diff --git a/.gitignore b/.gitignore
index cbfb38a869d3813931ef6f687d9154c5197c3dea..566bd0c1f7323f9daa7f747d5eccb26e02ca34fc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,5 @@ recorder/obj/*
 *.sublime-workspace
 *.qmake.stash
 __pycache__
+
+VimbaX_2023-1
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrab/AsynchronousGrab.c b/VimbaX/api/examples/VmbC/AsynchronousGrab/AsynchronousGrab.c
new file mode 100644
index 0000000000000000000000000000000000000000..9f331d72ef40b0066157864a8fd8d8e4273b178d
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrab/AsynchronousGrab.c
@@ -0,0 +1,625 @@
+/*=============================================================================
+  Copyright (C) 2014 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        AsynchronousGrab.c
+
+  Description: The AsynchronousGrab example will grab images asynchronously
+               using VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "AsynchronousGrab.h"
+
+#include <VmbCExamplesCommon/ListCameras.h>
+#include <VmbCExamplesCommon/PrintVmbVersion.h>
+#include <VmbCExamplesCommon/VmbStdatomic.h>
+#include <VmbCExamplesCommon/VmbThreads.h>
+
+#ifdef _WIN32
+    #include <windows.h>
+#else
+    #include <unistd.h>
+    #include <time.h>
+#endif
+
+#include <VmbC/VmbC.h>
+
+#include <VmbImageTransform/VmbTransform.h>
+
+
+#define NUM_FRAMES ((size_t)5)
+#define FRAME_CONTEXT_OPTIONS_INDEX ((size_t)0)
+#define FRAME_CONTEXT_STREAM_STATISTICS_INDEX ((size_t)1)
+
+/**
+ * \brief feature name of custom command for choosing the packet size provided by AVT GigE cameras
+ */
+#define ADJUST_PACKAGE_SIZE_COMMAND "GVSPAdjustPacketSize"
+
+VmbBool_t               g_vmbStarted               = VmbBoolFalse;      // Remember if Vmb is started
+VmbBool_t               g_streaming                = VmbBoolFalse;      // Remember if Vmb is streaming
+VmbBool_t               g_acquiring                = VmbBoolFalse;      // Remember if Vmb is acquiring
+VmbHandle_t             g_cameraHandle             = NULL;              // A handle to our camera
+VmbFrame_t              g_frames[NUM_FRAMES];                           // The frames we capture into
+
+double                  g_frameTime                = 0.0;               // Timestamp of last frame
+VmbBool_t               g_frameTimeValid           = VmbBoolFalse;      // Remember if there was a last timestamp
+VmbUint64_t             g_frameID                  = 0;                 // ID of last frame
+VmbBool_t               g_frameIdValid             = VmbBoolFalse;      // Remember if there was a last ID
+mtx_t                   g_frameInfoMutex;                               // mutex guarding access to the frame global info
+
+volatile atomic_flag    g_shutdown                 = ATOMIC_FLAG_INIT;  // flag set to true, if a thread initiates the shutdown 
+
+VmbBool_t               g_bUseAllocAndAnnouce      = VmbBoolFalse;      // Holds the optional decision about frame alloc and announce mode to access it from StopContinuousImageAcquisition()
+
+
+#ifdef _WIN32
+double          g_frequency                = 0.0;              //Frequency of tick counter in _WIN32
+#else
+#endif
+
+/**
+ * \brief Purpose: convert frames to RGB24 format and apply color processing if desired
+ * 
+ * \param[in] pFrame frame to process data might be destroyed dependent on transform function used
+ */
+VmbError_t ProcessFrame(VmbFrame_t * pFrame, VmbBool_t doColorProcessing)
+{
+    VmbTransformInfo    transformInfo;                         // if desired the transform information is constructed here
+
+    // check if we can get data
+    if(NULL == pFrame || NULL == pFrame->buffer)
+    {
+        printf("%s error invalid frame\n", __FUNCTION__);
+        return VmbErrorBadParameter;
+    }
+
+    VmbUint32_t width   = pFrame->width;
+    VmbUint32_t height  = pFrame->height;
+
+    VmbError_t result               = VmbErrorSuccess;
+    VmbUint32_t transformInfoCount  = 0;
+    if(doColorProcessing)   // if color processing is desired set the transform matrix
+    {
+        const static VmbFloat_t matrix[9] = {                                   // matrix to swap red and blue component
+                                                0.0, 0.0, 1.0,
+                                                0.0, 1.0, 0.0,
+                                                1.0, 0.0, 0.0
+                                            };
+        result = VmbSetColorCorrectionMatrix3x3(matrix, &transformInfo);        // initialize transform info
+        if(VmbErrorSuccess != result)
+        {
+            printf("%s error could not set transform matrix; Error: %d\n", __FUNCTION__, result);
+            return result;
+        }
+        transformInfoCount = 1;
+    }
+
+    VmbImage sourceImage = {
+        .Size = sizeof(sourceImage) // image transformation functions require the size to specified correctly
+    };
+
+    // set the image information from the frames pixel format and size
+    result = VmbSetImageInfoFromPixelFormat(pFrame->pixelFormat, width, height, &sourceImage);
+    if(VmbErrorSuccess != result)
+    {
+        printf("%s error could not set source image info; Error: %d\n", __FUNCTION__, result);
+        return result;
+    }
+
+    // the frame buffer will be the images data buffer
+    sourceImage.Data = pFrame->buffer;
+
+    VmbImage destinationImage = {
+        .Size = sizeof(destinationImage) // image transformation functions require the size to specified correctly
+    };
+
+    // set destination image info from frame size and string for RGB8 (rgb24)
+    result = VmbSetImageInfoFromString("RGB8", width, height, &destinationImage);
+    if(VmbErrorSuccess != result)
+    {
+        printf("%s error could not set destination image info; Error: %d\n", __FUNCTION__, result);
+        return result;
+    }
+    // allocate buffer for destination image size is width * height * size of rgb
+    VmbRGB8_t* destinationBuffer = (VmbRGB8_t*) malloc(width * height * sizeof(VmbRGB8_t));
+    if(NULL == destinationBuffer)
+    {
+        printf("%s error could not allocate rgb buffer for width: %d and height: %d\n", __FUNCTION__, width, height);
+        return VmbErrorResources;
+    }
+
+    // set the destination buffer to the data buffer of the image
+    destinationImage.Data = destinationBuffer;
+
+    // transform source to destination if color processing was enabled transformInfoCount is 1 otherwise transformInfo will be ignored
+    result = VmbImageTransform(&sourceImage, &destinationImage, &transformInfo, transformInfoCount);
+
+    // print first rgb pixel
+    printf("R: %d\tG: %d\tB: %d\n", destinationBuffer->R, destinationBuffer->G, destinationBuffer->B);
+
+    // clean image buffer
+    free(destinationBuffer);
+
+    return result;
+}
+
+/**
+ * \brief get time indicator
+ *
+ * \return time indicator in seconds for differential measurements
+ */
+double GetTime()
+{
+#ifdef _WIN32
+    LARGE_INTEGER nCounter;
+    QueryPerformanceCounter(&nCounter);
+    return ((double)nCounter.QuadPart) / g_frequency;
+#else
+    struct timespec now;
+    clock_gettime(CLOCK_REALTIME, &now);
+    return ((double)now.tv_sec) + ((double)now.tv_nsec) / 1000000000.0;
+#endif //_WIN32
+}
+
+/**
+ *\brief called from Vmb if a frame is ready for user processing
+ * 
+ * \param[in] cameraHandle handle to camera that supplied the frame
+ * \param[in] streamHandle handle to stream that supplied the frame
+ * \param[in] frame pointer to frame structure that can hold valid data
+ */
+void VMB_CALL FrameCallback(const VmbHandle_t cameraHandle, const VmbHandle_t streamHandle, VmbFrame_t* frame)
+{
+    //
+    // from here on the frame is under user control until returned to Vmb by requeuing it
+    // if you want to have smooth streaming keep the time you hold the frame short
+    //
+
+    //
+    // Note:    If VmbCaptureEnd is called asynchronously, while this callback is running, VmbCaptureEnd blocks,
+    //          until the callback returns.
+    //
+
+    AsynchronousGrabOptions const* options = (AsynchronousGrabOptions const*) frame->context[FRAME_CONTEXT_OPTIONS_INDEX];
+    StreamStatistics* streamStatistics = (StreamStatistics*) frame->context[FRAME_CONTEXT_STREAM_STATISTICS_INDEX];
+
+    VmbBool_t showFrameInfos = VmbBoolFalse;
+    double fps = 0.0;
+    VmbBool_t fpsValid = VmbBoolFalse;
+
+    if(FrameInfos_Off != options->frameInfos)
+    {
+        if(FrameInfos_Show == options->frameInfos)
+        {
+            showFrameInfos = VmbBoolTrue;
+        }
+
+        if (thrd_success == mtx_lock(&g_frameInfoMutex))
+        {
+            if (VmbFrameFlagsFrameID & frame->receiveFlags)
+            {
+                VmbUint64_t missingFrameCount = 0;
+                if (g_frameIdValid)
+                {
+                    if (frame->frameID != (g_frameID + 1))
+                    {
+                        // get difference between current frame and last received frame to calculate missing frames
+                        missingFrameCount = frame->frameID - g_frameID - 1;
+                        printf("%s error %llu missing frame(s) detected\n", __FUNCTION__, missingFrameCount);
+                    }
+                }
+                g_frameID = frame->frameID;                     // store current frame id to calculate missing frames in the next calls
+                g_frameIdValid = VmbBoolTrue;
+
+                double frameTime = GetTime();                   // get current time to calculate frames per second
+                if ((g_frameTimeValid)                          // only if the last time was valid
+                    && (0 == missingFrameCount))                // and the frame is not missing
+                {
+                    double timeDiff = frameTime - g_frameTime;  // build time difference with last frames time
+                    if (timeDiff > 0.0)
+                    {
+                        fps = 1.0 / timeDiff;
+                        fpsValid = VmbBoolTrue;
+                    }
+                    else
+                    {
+                        showFrameInfos = VmbBoolTrue;
+                    }
+                }
+                // store time for fps calculation in the next call
+                g_frameTime = frameTime;
+                g_frameTimeValid = VmbBoolTrue;
+                streamStatistics->framesMissing += missingFrameCount;
+            }
+            else
+            {
+                showFrameInfos = VmbBoolTrue;
+                g_frameIdValid = VmbBoolFalse;
+                g_frameTimeValid = VmbBoolFalse;
+            }
+
+            switch (frame->receiveStatus)
+            {
+            case VmbFrameStatusComplete:
+                streamStatistics->framesComplete++;
+                break;
+            case VmbFrameStatusIncomplete:
+                streamStatistics->framesIncomplete++;
+                break;
+            case VmbFrameStatusTooSmall:
+                streamStatistics->framesTooSmall++;
+                break;
+            case VmbFrameStatusInvalid:
+                streamStatistics->framesInvalid++;
+                break;
+            }
+
+            mtx_unlock(&g_frameInfoMutex);
+        }
+        // print the frame infos in case the frame is not complete
+        if(VmbFrameStatusComplete != frame->receiveStatus)
+        {
+            showFrameInfos = VmbBoolTrue;
+        }
+    }
+
+    if(showFrameInfos)
+    {
+        printf("Frame ID:");
+        if(VmbFrameFlagsFrameID & frame->receiveFlags)
+        {
+            printf("%llu", frame->frameID);
+        }
+        else
+        {
+            printf("?");
+        }
+
+        printf(" Status:");
+        switch(frame->receiveStatus)
+        {
+        case VmbFrameStatusComplete:
+            printf("Complete");
+            break;
+
+        case VmbFrameStatusIncomplete:
+            printf("Incomplete");
+            break;
+
+        case VmbFrameStatusTooSmall:  
+            printf("Too small");
+            break;
+
+        case VmbFrameStatusInvalid:
+            printf("Invalid");
+            break;
+
+        default:
+            printf("?");
+            break;
+        }
+
+        printf(" Size:");
+        if(VmbFrameFlagsDimension & frame->receiveFlags)
+        {
+            printf("%ux%u", frame->width, frame->height);
+        }
+        else
+        {
+            printf("?x?");
+        }
+
+        printf(" Format:0x%08X", frame->pixelFormat);
+
+        printf(" FPS:");
+        if(fpsValid)
+        {
+            printf("%.2f", fps);
+        }
+        else
+        {
+            printf("?");
+        }
+
+        printf("\n");
+    }
+
+    if (options->showRgbValue)
+    {
+        ProcessFrame(frame, options->enableColorProcessing);
+    }
+    else if (FrameInfos_Show != options->frameInfos)
+    {
+        // Print a dot every frame
+        printf(".");
+    }
+    fflush(stdout);
+
+    // requeue the frame so it can be filled again
+    VmbCaptureFrameQueue(cameraHandle, frame, &FrameCallback);
+}
+
+VmbError_t StartContinuousImageAcquisition(AsynchronousGrabOptions* options, StreamStatistics* statistics)
+{
+    VmbError_t          err                 = VmbErrorSuccess;      // The function result
+    VmbUint32_t         nCount              = 0;                    // Number of found cameras
+    VmbUint32_t         nFoundCount         = 0;                    // Change of found cameras
+    VmbAccessMode_t     cameraAccessMode    = VmbAccessModeFull;    // We open the camera with full access
+
+    if(!g_vmbStarted)
+    {
+        if (mtx_init(&g_frameInfoMutex, mtx_plain) != thrd_success)
+        {
+            return VmbErrorResources;
+        }
+
+        // initialize global state
+        g_streaming                = VmbBoolFalse;
+        g_acquiring                = VmbBoolFalse;
+        g_cameraHandle             = NULL;
+        memset(g_frames, 0, sizeof(g_frames));
+        g_frameTime                = 0.0;
+        g_frameTimeValid           = VmbBoolFalse;
+        g_frameID                  = 0;
+        g_frameIdValid             = VmbBoolFalse;
+        g_bUseAllocAndAnnouce      = options->allocAndAnnounce;
+
+#ifdef _WIN32
+        LARGE_INTEGER nFrequency;
+        QueryPerformanceFrequency(&nFrequency);
+        g_frequency = (double)nFrequency.QuadPart;
+#endif  //_WIN32
+
+        err = VmbStartup(NULL);
+
+        PrintVmbVersion();
+
+        if (VmbErrorSuccess == err)
+        {
+            g_vmbStarted = VmbBoolTrue;
+            
+            VmbUint32_t cameraCount = 0;
+            char const* cameraId = options->cameraId;
+
+            if (cameraId == NULL)
+            {
+                VmbCameraInfo_t* cameras = NULL;
+                err = ListCameras(&cameras, &cameraCount);
+
+                if (err == VmbErrorSuccess)
+                {
+                    if (cameraCount > 0)
+                    {
+                        cameraId = cameras->cameraIdString; // use id of the first camera
+                    }
+                    else
+                    {
+                        printf("no cameras found\n");
+                        err = VmbErrorNotFound;
+                    }
+                }
+                else
+                {
+                    printf("%s Could not list cameras or no cameras present. Error code: %d\n", __FUNCTION__, err);
+                }
+                free(cameras);
+            }
+
+            if (NULL != cameraId)
+            {
+                // Open camera
+                printf("Opening camera with ID: %s\n", cameraId);
+                err = VmbCameraOpen(cameraId, cameraAccessMode, &g_cameraHandle);
+
+                if (VmbErrorSuccess == err)
+                {
+                    // Try to execute custom command available to Allied Vision GigE Cameras to ensure the packet size is chosen well
+                    VmbCameraInfo_t info;
+                    err = VmbCameraInfoQuery(cameraId, &info, sizeof(info));
+                    VmbHandle_t stream = info.streamHandles[0];
+                    if (VmbErrorSuccess == VmbFeatureCommandRun(stream, ADJUST_PACKAGE_SIZE_COMMAND))
+                    {
+                        VmbBool_t isCommandDone = VmbBoolFalse;
+                        do
+                        {
+                            if (VmbErrorSuccess != VmbFeatureCommandIsDone(stream,
+                                ADJUST_PACKAGE_SIZE_COMMAND,
+                                &isCommandDone))
+                            {
+                                break;
+                            }
+                        } while (VmbBoolFalse == isCommandDone);
+                        VmbInt64_t packetSize = 0;
+                        VmbFeatureIntGet(stream, "GVSPPacketSize", &packetSize);
+                        printf("GVSPAdjustPacketSize: %lld\n", packetSize);
+                    }
+
+                    // Evaluate required alignment for frame buffer in case announce frame method is used
+                    VmbInt64_t nStreamBufferAlignment = 1;  // Required alignment of the frame buffer
+                    if (VmbErrorSuccess != VmbFeatureIntGet(stream, "StreamBufferAlignment", &nStreamBufferAlignment))
+                        nStreamBufferAlignment = 1;
+
+                    if (nStreamBufferAlignment < 1)
+                        nStreamBufferAlignment = 1;
+
+                    if (!options->allocAndAnnounce)
+                        printf("StreamBufferAlignment=%lld\n", nStreamBufferAlignment);
+
+                    if (VmbErrorSuccess == err)
+                    {
+                        VmbUint32_t payloadSize = 0;
+
+                        // determine the required buffer size
+                        err = VmbPayloadSizeGet(g_cameraHandle, &payloadSize);
+                        if (VmbErrorSuccess == err)
+                        {
+                            for (size_t i = 0; i < NUM_FRAMES; i++)
+                            {
+                                if (options->allocAndAnnounce)
+                                {
+                                    g_frames[i].buffer = NULL;
+                                }
+                                else
+                                {
+#ifdef _WIN32
+                                    g_frames[i].buffer = (unsigned char*)_aligned_malloc((size_t)payloadSize, (size_t)nStreamBufferAlignment);
+#else
+                                    g_frames[i].buffer = (unsigned char*)aligned_alloc((size_t)nStreamBufferAlignment, (size_t)payloadSize);
+#endif
+                                    if (NULL == g_frames[i].buffer)
+                                    {
+                                        err = VmbErrorResources;
+                                        break;
+                                    }
+                                }
+                                g_frames[i].bufferSize = payloadSize;
+                                g_frames[i].context[FRAME_CONTEXT_OPTIONS_INDEX] = options;
+                                g_frames[i].context[FRAME_CONTEXT_STREAM_STATISTICS_INDEX] = statistics;
+
+                                // Announce Frame
+                                err = VmbFrameAnnounce(g_cameraHandle, &g_frames[i], (VmbUint32_t)sizeof(VmbFrame_t));
+                                if (VmbErrorSuccess != err)
+                                {
+#ifdef _WIN32
+                                    _aligned_free(g_frames[i].buffer);
+#else
+                                    free(g_frames[i].buffer);
+#endif
+                                    memset(&g_frames[i], 0, sizeof(VmbFrame_t));
+                                    break;
+                                }
+                            }
+
+                            if (VmbErrorSuccess == err)
+                            {
+                                // Start Capture Engine
+                                err = VmbCaptureStart(g_cameraHandle);
+                                if (VmbErrorSuccess == err)
+                                {
+                                    g_streaming = VmbBoolTrue;
+                                    for (size_t i = 0; i < NUM_FRAMES; i++)
+                                    {
+                                        // Queue Frame
+                                        err = VmbCaptureFrameQueue(g_cameraHandle, &g_frames[i], &FrameCallback);
+                                        if (VmbErrorSuccess != err)
+                                        {
+                                            break;
+                                        }
+                                    }
+
+                                    if (VmbErrorSuccess == err)
+                                    {
+                                        // Start Acquisition
+                                        err = VmbFeatureCommandRun(g_cameraHandle, "AcquisitionStart");
+                                        if (VmbErrorSuccess == err)
+                                        {
+                                            g_acquiring = VmbBoolTrue;
+                                        }
+                                    }
+                                }
+                                else
+                                {
+                                    printf("Error %d in VmbCaptureStart\n", err);
+                                }
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    printf("Error %d in VmbCameraOpen\n", err);
+                }
+            }
+
+            if(VmbErrorSuccess != err)
+            {
+                StopContinuousImageAcquisition();
+            }
+        }
+        return err;
+    }
+    else
+    {
+        return VmbErrorAlready;
+    }
+}
+
+void StopContinuousImageAcquisition()
+{
+    int i = 0;
+
+    _Bool const shutdownDone = atomic_flag_test_and_set(&g_shutdown);
+
+    if(!shutdownDone)
+    {
+        if (g_vmbStarted)
+        {
+            if (NULL != g_cameraHandle)
+            {
+                if (g_acquiring)
+                {
+                    // Stop Acquisition
+                    VmbFeatureCommandRun(g_cameraHandle, "AcquisitionStop");
+                    g_acquiring = VmbBoolFalse;
+                }
+
+                if (g_streaming)
+                {
+                    // Stop Capture Engine
+                    VmbCaptureEnd(g_cameraHandle);
+                    g_streaming = VmbBoolFalse;
+                }
+
+                // Flush the capture queue
+                VmbCaptureQueueFlush(g_cameraHandle);
+
+                while (VmbErrorSuccess != VmbFrameRevokeAll(g_cameraHandle))
+                {
+                }
+
+                for (i = 0; i < NUM_FRAMES; i++)
+                {
+                    if (NULL != g_frames[i].buffer && !g_bUseAllocAndAnnouce)
+                    {
+#ifdef _WIN32
+                        _aligned_free(g_frames[i].buffer);
+#else
+                        free(g_frames[i].buffer);
+#endif
+                        memset(&g_frames[i], 0, sizeof(VmbFrame_t));
+                    }
+                }
+                // Close camera
+                VmbCameraClose(g_cameraHandle);
+                g_cameraHandle = NULL;
+            }
+            VmbShutdown();
+            g_vmbStarted = VmbBoolFalse;
+        }
+        mtx_destroy(&g_frameInfoMutex);
+    }
+}
+
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrab/AsynchronousGrab.h b/VimbaX/api/examples/VmbC/AsynchronousGrab/AsynchronousGrab.h
new file mode 100644
index 0000000000000000000000000000000000000000..93a59a1924a07c8e233364014b2f22a1425f21cc
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrab/AsynchronousGrab.h
@@ -0,0 +1,76 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        AsynchronousGrab.h
+
+  Description: The AsynchronousGrab example will grab images asynchronously
+               using VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 ASYNCHRONOUS_GRAB_H_
+#define ASYNCHRONOUS_GRAB_H_
+
+#include <VmbC/VmbCommonTypes.h>
+
+typedef enum FrameInfos
+{
+    FrameInfos_Undefined,
+    FrameInfos_Off,
+    FrameInfos_Show,
+    FrameInfos_Automatic
+} FrameInfos;
+
+typedef struct AsynchronousGrabOptions
+{
+    FrameInfos  frameInfos;
+    VmbBool_t   showRgbValue;
+    VmbBool_t   enableColorProcessing;
+    VmbBool_t   allocAndAnnounce;
+    char const* cameraId;
+} AsynchronousGrabOptions;
+
+typedef struct FrameStatistics
+{
+    VmbUint64_t framesComplete;
+    VmbUint64_t framesMissing;
+    VmbUint64_t framesIncomplete;
+    VmbUint64_t framesTooSmall;
+    VmbUint64_t framesInvalid;
+} StreamStatistics;
+
+/**
+ * \brief starts image acquisition on a given camera
+ * 
+ * Note: Vmb has to be uninitialized and the camera has to allow access mode full
+ * 
+ * \param[in] options                 struct with command line options (e.g. frameInfos, enableColorProcessing, allocAndAnnounce etc.)
+ * \param[in] statistics              struct with stream statistics (framesReceived, framesMissing)
+ */
+VmbError_t StartContinuousImageAcquisition(AsynchronousGrabOptions* options, StreamStatistics* statistics);
+
+/**
+ * \brief stops image acquisition that was started with StartContinuousImageAcquisition
+ */
+void StopContinuousImageAcquisition();
+
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrab/CMakeLists.txt b/VimbaX/api/examples/VmbC/AsynchronousGrab/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..68d6dcb58e337d4e4b54f1b835a76aaa98354c72
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrab/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(AsynchronousGrab LANGUAGES C)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS C ImageTransform)
+
+if(NOT TARGET VmbCExamplesCommon)
+    add_subdirectory(../Common VmbCExamplesCommon_build)
+endif()
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(AsynchronousGrab_VmbC
+    main.c
+    AsynchronousGrab.c
+    AsynchronousGrab.h
+    ${COMMON_SOURCES}
+)
+
+target_link_libraries(AsynchronousGrab_VmbC PRIVATE Vmb::C Vmb::ImageTransform VmbCExamplesCommon)
+if (UNIX)
+    target_link_libraries(AsynchronousGrab_VmbC PRIVATE pthread)
+endif()
+
+set_target_properties(AsynchronousGrab_VmbC PROPERTIES
+    C_STANDARD 11
+    VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};$ENV{PATH}"
+)
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrab/main.c b/VimbaX/api/examples/VmbC/AsynchronousGrab/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..ff718a32f3a7661c4bb88825fd0fe026797e8198
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrab/main.c
@@ -0,0 +1,226 @@
+/*=============================================================================
+  Copyright (C) 2013 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        main.c
+
+  Description: Implementation of main entry point of AsynchronousGrab example
+               of VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <stdio.h>
+#include <string.h>
+
+#include <VmbC/VmbC.h>
+
+#include "AsynchronousGrab.h"
+
+#include <VmbCExamplesCommon/ErrorCodeToMessage.h>
+
+#ifdef _WIN32
+#include <Windows.h>
+BOOL WINAPI ConsoleHandler(DWORD signal)
+{
+    switch (signal)
+    {
+    case CTRL_C_EVENT:
+    case CTRL_CLOSE_EVENT:
+        StopContinuousImageAcquisition();
+    }
+    return TRUE;
+}
+
+#endif
+
+#define VMB_PARAM_RGB "/r"
+#define VMB_PARAM_COLOR_PROCESSING "/c"
+#define VMB_PARAM_FRAME_INFOS "/i"
+#define VMB_PARAM_SHOW_CORRUPT_FRAMES "/a"
+#define VMB_PARAM_ALLOC_AND_ANNOUNCE "/x"
+#define VMB_PARAM_PRINT_HELP "/h"
+
+void PrintUsage()
+{
+    printf("Usage: AsynchronousGrab [CameraID] [/i] [/h]\n"
+           "Parameters:   CameraID    ID of the camera to use (using first camera if not specified)\n"
+           "              %s          Convert to RGB and show RGB values\n"
+           "              %s          Enable color processing (includes %s)\n"
+           "              %s          Show frame infos\n"
+           "              %s          Automatically only show frame infos of corrupt frames\n"
+           "              %s          AllocAndAnnounce mode: Buffers are allocated by the GenTL producer\n"
+           "              %s          Print out help\n",
+           VMB_PARAM_RGB,
+           VMB_PARAM_COLOR_PROCESSING,
+           VMB_PARAM_RGB,
+           VMB_PARAM_FRAME_INFOS,
+           VMB_PARAM_SHOW_CORRUPT_FRAMES,
+           VMB_PARAM_ALLOC_AND_ANNOUNCE,
+           VMB_PARAM_PRINT_HELP);
+}
+
+VmbError_t ParseCommandLineParameters(AsynchronousGrabOptions* cmdOptions, VmbBool_t* printHelp, int argc, char* argv[])
+{
+    VmbError_t result = VmbErrorSuccess;
+
+    *printHelp                          = VmbBoolFalse;
+    cmdOptions->frameInfos              = FrameInfos_Undefined;
+    cmdOptions->showRgbValue            = VmbBoolFalse;
+    cmdOptions->enableColorProcessing   = VmbBoolFalse;
+    cmdOptions->allocAndAnnounce        = VmbBoolFalse;
+    cmdOptions->cameraId                = NULL;
+
+    char** const paramsEnd = argv + argc;
+    for (char** param = argv + 1; result == VmbErrorSuccess && param != paramsEnd; ++param)
+    {
+        size_t const len = strlen(*param);
+        if (len != 0)
+        {
+            if (0 == strcmp(*param, VMB_PARAM_FRAME_INFOS))
+            {
+                if (cmdOptions->frameInfos == FrameInfos_Undefined)
+                {
+                    cmdOptions->frameInfos = FrameInfos_Show;
+                }
+                else if (cmdOptions->frameInfos != FrameInfos_Show)
+                {
+                    printf("conflicting frame info printing already specified\n");
+                    result = VmbErrorBadParameter;
+                }
+            }
+            else if (0 == strcmp(*param, VMB_PARAM_RGB))
+            {
+                cmdOptions->showRgbValue = VmbBoolTrue;
+            }
+            else if (0 == strcmp(*param, VMB_PARAM_SHOW_CORRUPT_FRAMES))
+            {
+                if (cmdOptions->frameInfos == FrameInfos_Undefined)
+                {
+                    cmdOptions->frameInfos = FrameInfos_Automatic;
+                }
+                else if (cmdOptions->frameInfos != FrameInfos_Automatic)
+                {
+                    printf("conflicting frame info printing already specified\n");
+                    result = VmbErrorBadParameter;
+                }
+            }
+            else if (0 == strcmp(*param, VMB_PARAM_COLOR_PROCESSING))
+            {
+                cmdOptions->enableColorProcessing = VmbBoolTrue;
+                cmdOptions->showRgbValue = VmbBoolTrue;
+            }
+            else if (0 == strcmp(*param, VMB_PARAM_ALLOC_AND_ANNOUNCE))
+            {
+                cmdOptions->allocAndAnnounce = VmbBoolTrue;
+            }
+            else if (0 == strcmp(*param, VMB_PARAM_PRINT_HELP))
+            {
+                if (argc != 2)
+                {
+                    printf("%s is required to be the only command line parameter\n\n", VMB_PARAM_PRINT_HELP);
+                    result = VmbErrorBadParameter;
+                }
+                else
+                {
+                    *printHelp = VmbBoolTrue;
+                }
+            }
+            else if (**param == '/')
+            {
+                printf("unknown command line option: %s\n", *param);
+                result = VmbErrorBadParameter;
+            }
+            else
+            {
+                if (cmdOptions->cameraId == NULL)
+                {
+                    cmdOptions->cameraId = *param;
+                }
+                else
+                {
+                    printf("Multiple camera ids specified: \"%s\" and \"%s\"\n", cmdOptions->cameraId, *param);
+                    result = VmbErrorBadParameter;
+                }
+            }
+        }
+        else
+        {
+            result = VmbErrorBadParameter;
+        }
+    }
+    if (cmdOptions->frameInfos == FrameInfos_Undefined)
+    {
+        cmdOptions->frameInfos = FrameInfos_Off;
+    }
+    return result;
+}
+
+int main(int argc, char* argv[])
+{
+    printf("/////////////////////////////////////////\n"
+           "/// Vmb API Asynchronous Grab Example ///\n"
+           "/////////////////////////////////////////\n\n");
+
+    AsynchronousGrabOptions cmdOptions;
+    VmbBool_t printHelp;
+    VmbError_t err = ParseCommandLineParameters(&cmdOptions, &printHelp, argc, argv);
+    
+    StreamStatistics streamStatistics = { 0, 0, 0, 0, 0 };
+
+    if (err == VmbErrorSuccess && !printHelp)
+    {
+#ifdef _WIN32
+        SetConsoleCtrlHandler(ConsoleHandler, TRUE);
+#endif
+        err = StartContinuousImageAcquisition(&cmdOptions, &streamStatistics);
+        if (VmbErrorSuccess == err)
+        {
+            printf("Press <enter> to stop acquisition...\n");
+            ((void)getchar());
+
+            StopContinuousImageAcquisition();
+            printf("\nAcquisition stopped.\n\n");
+            
+            if (cmdOptions.frameInfos != FrameInfos_Off)
+            {
+                printf("Frames complete   = %llu\n", streamStatistics.framesComplete);
+                printf("Frames incomplete = %llu\n", streamStatistics.framesIncomplete);
+                printf("Frames too small  = %llu\n", streamStatistics.framesTooSmall);
+                printf("Frames invalid    = %llu\n\n", streamStatistics.framesInvalid);
+                VmbUint64_t framesTotal = streamStatistics.framesComplete + 
+                                  streamStatistics.framesIncomplete + 
+                                  streamStatistics.framesTooSmall + 
+                                  streamStatistics.framesInvalid;
+                printf("Frames total      = %llu\n", framesTotal);
+                printf("Frames missing    = %llu\n", streamStatistics.framesMissing);
+            }
+        }
+        else
+        {
+            printf("\nAn error occurred: %s\n", ErrorCodeToMessage(err));
+        }
+    }
+    else
+    {
+        PrintUsage();
+    }
+
+    return err == VmbErrorSuccess ? 0 : 1;
+}
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/AcquisitionManager.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/AcquisitionManager.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c0eb52b19be76542f85a7dbf7adf323c77cca4a5
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/AcquisitionManager.cpp
@@ -0,0 +1,355 @@
+/**
+ * \copyright Allied Vision Technologies 2021 - 2022.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Implementation of ::VmbC::Examples::AcquisitionManager
+ */
+
+#include <cstdlib>
+#include <cstring>
+#include <limits>
+#include <string>
+
+#include "AcquisitionManager.h"
+#include "VmbException.h"
+
+#include "UI/MainWindow.h"
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        namespace
+        {
+            /**
+             * \brief feature name of custom command for choosing the packet size provided by AVT GigE cameras
+             */
+            constexpr char const* AdjustPackageSizeCommand = "GVSPAdjustPacketSize";
+
+            struct AcquisitionContext
+            {
+                AcquisitionManager* m_acquisitionManager;
+
+                AcquisitionContext(AcquisitionManager* acquisitionManager) noexcept
+                    : m_acquisitionManager(acquisitionManager)
+                {
+                }
+
+                AcquisitionContext(VmbFrame_t const& frame) noexcept
+                    : m_acquisitionManager(static_cast<AcquisitionManager*>(frame.context[0]))
+                {
+                }
+
+                void FillFrame(VmbFrame_t& frame) const noexcept
+                {
+                    frame.context[0] = m_acquisitionManager;
+                }
+
+            };
+        };
+
+        void AcquisitionManager::StartAcquisition(VmbCameraInfo_t const& cameraInfo)
+        {
+            StopAcquisition(); // if a camera is open, close it first
+            m_openCamera.reset(new CameraAccessLifetime(cameraInfo, *this));
+            m_imageTranscoder.Start();
+        }
+
+        void AcquisitionManager::StopAcquisition() noexcept
+        {
+            m_imageTranscoder.Stop();
+            m_openCamera.reset();
+        }
+
+        AcquisitionManager::AcquisitionManager(MainWindow& renderWindow)
+            : m_renderWindow(renderWindow),
+            m_imageTranscoder(*this)
+        {
+        }
+
+        AcquisitionManager::~AcquisitionManager()
+        {
+            StopAcquisition();
+            m_openCamera.reset();
+        }
+
+        void AcquisitionManager::ConvertedFrameReceived(QPixmap image)
+        {
+            m_renderWindow.RenderImage(image);
+        }
+
+        void AcquisitionManager::SetOutputSize(QSize size)
+        {
+            m_imageTranscoder.SetOutputSize(size);
+        }
+
+        void VMB_CALL AcquisitionManager::FrameCallback(VmbHandle_t /* cameraHandle */, VmbHandle_t const streamHandle, VmbFrame_t* frame)
+        {
+            if (frame != nullptr)
+            {
+                AcquisitionContext context(*frame);
+                if (context.m_acquisitionManager != nullptr)
+                {
+                    context.m_acquisitionManager->FrameReceived(streamHandle, frame);
+                }
+            }
+        }
+
+        void AcquisitionManager::FrameReceived(VmbHandle_t const streamHandle, VmbFrame_t const* frame)
+        {
+            m_imageTranscoder.PostImage(streamHandle, &AcquisitionManager::FrameCallback, frame);
+        }
+
+        AcquisitionManager::CameraAccessLifetime::CameraAccessLifetime(VmbCameraInfo_t const& camInfo, AcquisitionManager& acquisitionManager)
+        {
+            VmbError_t error = VmbCameraOpen(camInfo.cameraIdString, VmbAccessModeFull, &m_cameraHandle);
+            if (error != VmbErrorSuccess)
+            {
+                throw VmbException::ForOperation(error, "VmbCameraOpen");
+            }
+
+            // refresh camera info to get streams
+            VmbCameraInfo_t refreshedCameraInfo;
+            bool errorHappened = false;
+            VmbException ex;
+            error = VmbCameraInfoQueryByHandle(m_cameraHandle, &refreshedCameraInfo, sizeof(refreshedCameraInfo));
+            if (error != VmbErrorSuccess)
+            {
+                errorHappened = true;
+                ex = VmbException::ForOperation(error, "VmbCameraOpen");
+            }
+
+            if (!errorHappened)
+            {
+                errorHappened = true;
+                if (refreshedCameraInfo.localDeviceHandle == nullptr)
+                {
+                    ex = VmbException("The id could not be used to query the info of the correct camera");
+                }
+                else if (refreshedCameraInfo.streamCount == 0)
+                {
+                    ex = VmbException("The camera does not provide a stream");
+                }
+                else
+                {
+                    errorHappened = false;
+                }
+            }
+
+            if (!errorHappened)
+            {
+                // execute packet size adjustment, if this is a AVT GigE camera
+                if (VmbErrorSuccess == VmbFeatureCommandRun(refreshedCameraInfo.streamHandles[0], AdjustPackageSizeCommand))
+                {
+                    VmbBool_t isCommandDone = VmbBoolFalse;
+                    do
+                    {
+                        if (VmbErrorSuccess != VmbFeatureCommandIsDone(refreshedCameraInfo.streamHandles[0],
+                            AdjustPackageSizeCommand,
+                            &isCommandDone))
+                        {
+                            break;
+                        }
+                    } while (VmbBoolFalse == isCommandDone);
+                    VmbInt64_t packetSize = 0;
+                    VmbFeatureIntGet(refreshedCameraInfo.streamHandles[0], "GVSPPacketSize", &packetSize);
+                    printf("GVSPAdjustPacketSize: %lld\n", packetSize);
+                }
+
+                try
+                {
+                    m_streamLife.reset(new StreamLifetime(refreshedCameraInfo.streamHandles[0], m_cameraHandle, acquisitionManager));
+                }
+                catch (...)
+                {
+                    VmbCameraClose(m_cameraHandle);
+                    throw;
+                }
+            }
+            else
+            {
+                VmbCameraClose(m_cameraHandle);
+                throw ex;
+            }
+        }
+
+        AcquisitionManager::CameraAccessLifetime::~CameraAccessLifetime()
+        {
+            m_streamLife.reset(); // close stream first
+            VmbCameraClose(m_cameraHandle);
+        }
+
+        AcquisitionManager::StreamLifetime::StreamLifetime(VmbHandle_t const streamHandle, VmbHandle_t const cameraHandle, AcquisitionManager& acquisitionManager)
+        {
+            VmbUint32_t value;
+            VmbError_t error = VmbPayloadSizeGet(streamHandle, &value);
+            if (error != VmbErrorSuccess)
+            {
+                throw VmbException::ForOperation(error, "VmbPayloadSizeGet");
+            }
+
+            if (value == 0)
+            {
+                throw VmbException("Non-zero payload size required");
+            }
+            // Evaluate required alignment for frame buffer in case announce frame method is used
+            VmbInt64_t nStreamBufferAlignment = 1;  // Required alignment of the frame buffer
+            if (VmbErrorSuccess != VmbFeatureIntGet(streamHandle, "StreamBufferAlignment", &nStreamBufferAlignment))
+                nStreamBufferAlignment = 1;
+
+            if (nStreamBufferAlignment < 1)
+                nStreamBufferAlignment = 1;
+
+            m_payloadSize = static_cast<size_t>(value);
+            size_t bufferAlignment = static_cast<size_t>(nStreamBufferAlignment);
+            m_acquisitionLife.reset(new AcquisitionLifetime(cameraHandle, m_payloadSize, bufferAlignment, acquisitionManager));
+        }
+
+        AcquisitionManager::StreamLifetime::~StreamLifetime()
+        {
+        }
+
+        namespace
+        {
+            void RunCommand(VmbHandle_t const camHandle, std::string const& command)
+            {
+                auto error = VmbFeatureCommandRun(camHandle, command.c_str());
+
+                if (error != VmbErrorSuccess)
+                {
+                    throw VmbException::ForOperation(error, "VmbFeatureCommandRun");
+                }
+
+                VmbBool_t done = false;
+                while (!done)
+                {
+                    error = VmbFeatureCommandIsDone(camHandle, command.c_str(), &done);
+                    if (error != VmbErrorSuccess)
+                    {
+                        throw VmbException::ForOperation(error, "VmbFeatureCommandIsDone");
+                    }
+                }
+            }
+        }
+
+        AcquisitionManager::AcquisitionLifetime::AcquisitionLifetime(VmbHandle_t const camHandle, size_t payloadSize, size_t nBufferAlignment, AcquisitionManager& acquisitionManager)
+            : m_camHandle(camHandle)
+        {
+            m_frames.reserve(BufferCount);
+            for (size_t count = BufferCount; count > 0; --count)
+            {
+                auto frame = std::unique_ptr<Frame>(new Frame(payloadSize, nBufferAlignment));
+                m_frames.emplace_back(std::move(frame));
+            }
+
+            VmbError_t error = VmbErrorSuccess;
+            for (auto& frame : m_frames)
+            {
+                AcquisitionContext context(&acquisitionManager);
+                context.FillFrame(frame->m_frame);
+
+                error = VmbFrameAnnounce(camHandle, &(frame->m_frame), sizeof(frame->m_frame));
+                if (error != VmbErrorSuccess)
+                {
+                    break;
+                }
+            }
+
+            if (error != VmbErrorSuccess)
+            {
+                VmbFrameRevokeAll(camHandle); // error ignored on purpose
+                throw VmbException::ForOperation(error, "VmbFrameAnnounce");
+            }
+
+            error = VmbCaptureStart(camHandle);
+            if (error != VmbErrorSuccess)
+            {
+                throw VmbException::ForOperation(error, "VmbCaptureStart");
+            }
+
+            size_t numberEnqueued = 0;
+
+            for (auto& frame : m_frames)
+            {
+                error = VmbCaptureFrameQueue(camHandle, &(frame->m_frame), &AcquisitionManager::FrameCallback);
+                if (error == VmbErrorSuccess)
+                {
+                    ++numberEnqueued;
+                }
+            }
+
+            if (numberEnqueued == 0)
+            {
+                VmbCaptureEnd(camHandle);
+                throw VmbException("Non of the frames could be enqueued using VmbCaptureFrameQueue", error);
+            }
+
+            try
+            {
+                RunCommand(camHandle, "AcquisitionStart");
+            }
+            catch (VmbException const&)
+            {
+                VmbCaptureEnd(camHandle);
+                throw;
+            }
+        }
+
+        AcquisitionManager::AcquisitionLifetime::~AcquisitionLifetime()
+        {
+            try
+            {
+                RunCommand(m_camHandle, "AcquisitionStop");
+            }
+            catch (VmbException const&)
+            {
+            }
+
+            VmbCaptureEnd(m_camHandle);
+            VmbCaptureQueueFlush(m_camHandle);
+            VmbFrameRevokeAll(m_camHandle);
+        }
+
+        AcquisitionManager::Frame::Frame(size_t payloadSize, size_t bufferAlignment)
+        {
+            if (payloadSize > (std::numeric_limits<VmbUint32_t>::max)())
+            {
+                throw VmbException("payload size outside of allowed range");
+            }
+#ifdef _WIN32
+            m_frame.buffer = (unsigned char*)_aligned_malloc(payloadSize,bufferAlignment);
+#else
+            m_frame.buffer = (unsigned char*)aligned_alloc(bufferAlignment, payloadSize);
+#endif
+            if (m_frame.buffer == nullptr)
+            {
+                throw VmbException("Unable to allocate memory for frame", VmbErrorResources);
+            }
+            m_frame.bufferSize = static_cast<VmbUint32_t>(payloadSize);
+        }
+
+        AcquisitionManager::Frame::~Frame()
+        {
+#ifdef _WIN32
+            _aligned_free(m_frame.buffer);
+#else
+            std::free(m_frame.buffer);
+#endif
+        }
+
+    }
+}
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/AcquisitionManager.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/AcquisitionManager.h
new file mode 100644
index 0000000000000000000000000000000000000000..590ee3ecce6cf24d43ac5d8e33c85de9d09a9d17
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/AcquisitionManager.h
@@ -0,0 +1,186 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of a class responsible for managing the acquisition and
+ *        scheduling transformation and transfering converted frames to the
+ *        gui.
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_ACQUISITION_MANAGER_H
+#define ASYNCHRONOUSGRAB_C_ACQUISITION_MANAGER_H
+
+#include <memory>
+#include <vector>
+
+#include <QPixmap>
+#include <QSize>
+
+#include <VmbC/VmbC.h>
+
+#include "ImageTranscoder.h"
+
+class MainWindow;
+
+namespace VmbC
+{
+    namespace Examples
+    {
+        class Image;
+
+        /**
+         * \brief Responsible for starting/stoping the acquisition, scheduling
+         *        the transformation of frames received during the acquisition
+         *        and transfering the results to the qt window
+         */
+        class AcquisitionManager
+        {
+        public:
+            static constexpr VmbUint32_t BufferCount = 10;
+
+            /**
+             * \return true, if currently an acquisition is running 
+             */
+            bool IsAcquisitionActive() const noexcept
+            {
+                return static_cast<bool>(m_openCamera);
+            }
+
+            /**
+             * \brief start the acquistion for a given camera 
+             */
+            void StartAcquisition(VmbCameraInfo_t const& cameraInfo);
+
+            /**
+             * \brief stop the acquistion that is currently running
+             */
+            void StopAcquisition() noexcept;
+
+            AcquisitionManager(MainWindow& renderWindow);
+
+            ~AcquisitionManager();
+
+            /**
+             * \brief notifies this object about a frame available for rendering 
+             */
+            void ConvertedFrameReceived(QPixmap image);
+
+            /**
+             * \brief informs this object about the change of the desired output
+             *        size 
+             */
+            void SetOutputSize(QSize size);
+
+        private:
+            MainWindow& m_renderWindow;
+
+            class StreamLifetime;
+
+            /**
+             * \brief class responsible for opening/closing a camera 
+             */
+            class CameraAccessLifetime
+            {
+            public:
+                /**
+                 * \brief opens the camera and starts the acquisition immediately 
+                 */
+                CameraAccessLifetime(VmbCameraInfo_t const& camInfo, AcquisitionManager& acquisitionManager);
+
+                /**
+                 * \brief stops acquistion and closes the camera
+                 */
+                ~CameraAccessLifetime();
+            private:
+                /**
+                 * \brief stores the remote device handle
+                 */
+                VmbHandle_t m_cameraHandle {};
+                std::unique_ptr<StreamLifetime> m_streamLife;
+            };
+
+            class AcquisitionLifetime;
+
+            /**
+             * \brief handles acquiring any crucial information for a stream required for the acquistion 
+             */
+            class StreamLifetime
+            {
+            public:
+                StreamLifetime(VmbHandle_t streamHandle, VmbHandle_t cameraHandle, AcquisitionManager& acquisitionManager);
+                ~StreamLifetime();
+
+            private:
+                std::unique_ptr<AcquisitionLifetime> m_acquisitionLife;
+                size_t m_payloadSize;
+            };
+
+            /**
+             * \brief manages a VmbFrame_t and its memory 
+             */
+            struct Frame
+            {
+                Frame(size_t payloadSize, size_t bufferAlignment);
+                ~Frame();
+
+                Frame(Frame const&) = delete;
+                Frame& operator=(Frame const&) = delete;
+
+                Frame(Frame&& other) = delete;
+                Frame& operator=(Frame&& other) = delete;
+
+                VmbFrame_t m_frame;
+            };
+
+            /**
+             * \brief handles starting/stopping of a stream 
+             */
+            class AcquisitionLifetime
+            {
+            public:
+                AcquisitionLifetime(VmbHandle_t const camHandle, size_t payloadSize, size_t bufferAlignment, AcquisitionManager& acquisitionManager);
+                ~AcquisitionLifetime();
+
+            private:
+                std::vector<std::unique_ptr<Frame>> m_frames;
+                VmbHandle_t m_camHandle;
+            };
+
+            /**
+             * \brief stores the camera currently acquiring
+             */
+            std::unique_ptr<CameraAccessLifetime> m_openCamera;
+
+            /**
+             * \brief Object used for transforming frames to QPixmaps 
+             */
+            ImageTranscoder m_imageTranscoder;
+
+            /**
+             * \brief callback to receive the notification about new frames from VmbC 
+             */
+            static void VMB_CALL FrameCallback(VmbHandle_t cameraHandle, VmbHandle_t streamHandle, VmbFrame_t* frame);
+
+            /**
+             * \brief member function that receives the notification new frames from VmbC  
+             */
+            void FrameReceived(VmbHandle_t const cameraHandle, VmbFrame_t const* frame);
+        };
+    }
+}
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ApiController.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ApiController.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..973cf69b18488fd2cb5fd8da5d826737fb4d5df1
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ApiController.cpp
@@ -0,0 +1,139 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Implementation file for the ApiController helper class that
+ *        demonstrates how to implement an asynchronous, continuous image
+ *        acquisition with VmbC.
+ */
+
+#include <algorithm>
+
+#include "ApiController.h"
+#include "VmbException.h"
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        enum { NUM_FRAMES = 3, };
+
+        ApiController::ApiController(MainWindow& mainWindow)
+            : m_libraryLife {}
+        {
+        }
+
+        namespace
+        {
+
+            template<typename InfoType, typename RetrievalFunctor>
+            std::vector<std::unique_ptr<ModuleDataImpl<InfoType>>> ListModulesImpl(RetrievalFunctor retrievalFunction, const char* functionName)
+            {
+                VmbUint32_t count;
+
+                VmbError_t error = retrievalFunction(nullptr, 0, &count, sizeof(InfoType));
+                if (error != VmbErrorSuccess)
+                {
+                    throw VmbException::ForOperation(error, functionName);
+                }
+
+                std::vector<InfoType> buffer(count);
+
+                VmbUint32_t filledCount;
+
+                error = retrievalFunction(buffer.data(), count, &filledCount, sizeof(InfoType));
+
+                // for simplicity we ignore the case where the list grows between calls
+                if (error != VmbErrorSuccess && error != VmbErrorMoreData)
+                {
+                    throw VmbException::ForOperation(error, functionName);
+                }
+
+                if (filledCount < count)
+                {
+                    buffer.resize(filledCount);
+                }
+
+                std::vector<std::unique_ptr<ModuleDataImpl<InfoType>>> result(buffer.size());
+
+                std::transform(buffer.begin(), buffer.end(), result.begin(), [](InfoType const& info)
+                               {
+                                   return std::unique_ptr<ModuleDataImpl<InfoType>>(new ModuleDataImpl<InfoType>(info));
+                               });
+
+                return result;
+            }
+
+            template<typename InfoType>
+            std::vector<std::unique_ptr<ModuleDataImpl<InfoType>>> ListModules();
+
+            template<>
+            std::vector<std::unique_ptr<ModuleDataImpl<VmbTransportLayerInfo_t>>> ListModules<VmbTransportLayerInfo_t>()
+            {
+                return ListModulesImpl<VmbTransportLayerInfo_t>(VmbTransportLayersList, "VmbTransportLayersList");
+            }
+
+            template<>
+            std::vector<std::unique_ptr<ModuleDataImpl<VmbInterfaceInfo_t>>> ListModules<VmbInterfaceInfo_t>()
+            {
+                return ListModulesImpl<VmbInterfaceInfo_t>(VmbInterfacesList, "VmbInterfacesList");
+            }
+
+            template<>
+            std::vector<std::unique_ptr<ModuleDataImpl<VmbCameraInfo_t>>> ListModules<VmbCameraInfo_t>()
+            {
+                return ListModulesImpl<VmbCameraInfo_t>(VmbCamerasList, "VmbCamerasList");
+            }
+
+        };
+
+        std::vector<std::unique_ptr<CameraData>> ApiController::GetCameraList()
+        {
+            return ListModules<VmbCameraInfo_t>();
+        }
+
+        std::vector<std::unique_ptr<TlData>> ApiController::GetSystemList()
+        {
+            return ListModules<VmbTransportLayerInfo_t>();
+        }
+
+        std::vector<std::unique_ptr<InterfaceData>> ApiController::GetInterfaceList()
+        {
+            return ListModules<VmbInterfaceInfo_t>();
+        }
+
+        std::string ApiController::GetVersion() const
+        {
+            std::ostringstream os;
+
+            VmbVersionInfo_t versionInfo;
+            auto const error = VmbVersionQuery(&versionInfo, sizeof(versionInfo));
+
+            if (error == VmbErrorSuccess)
+            {
+                os
+                    << versionInfo.major << '.'
+                    << versionInfo.minor << '.'
+                    << versionInfo.patch;
+            }
+
+            return os.str();
+        }
+
+    } // namespace Examples
+} // namespace VmbC
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ApiController.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ApiController.h
new file mode 100644
index 0000000000000000000000000000000000000000..28941cb6dcaabd567d4849db3c624db78c8b734c
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ApiController.h
@@ -0,0 +1,86 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of the ApiController helper class that demonstrates how
+ *        to implement an asynchronous, continuous image acquisition with VmbC.
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_API_CONTROLLER_H
+#define ASYNCHRONOUSGRAB_C_API_CONTROLLER_H
+
+#include <QObject>
+
+#include <memory>
+#include <string>
+#include <vector>
+#include <sstream>
+
+#include <VmbC/VmbC.h>
+
+#include "ModuleData.h"
+#include "VmbLibraryLifetime.h"
+
+class MainWindow;
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        class ModuleTreeModel;
+
+        class ApiController
+        {
+        public:
+            ApiController(MainWindow& mainWindow);
+
+            /**
+             * \brief Gets all cameras known to Vmb for a given interface
+             *
+             * \return A vector of camera info structs
+             */
+            std::vector<std::unique_ptr<CameraData>> GetCameraList();
+
+            /**
+             * \brief gets all systems known to vmb
+             * \return a vector of system info structs
+             */
+            std::vector<std::unique_ptr<TlData>> GetSystemList();
+
+            /**
+             * \brief gets all interfaces for a given system known to vmb
+             * \return a vector of interface info structs
+             */
+            std::vector<std::unique_ptr<InterfaceData>> GetInterfaceList();
+
+            /**
+             * \brief Gets the version of the Vmb API
+             *
+             * \return the version as string
+             */
+            std::string GetVersion() const;
+        private:
+            VmbLibraryLifetime m_libraryLife;
+            std::vector<TlData> m_tls;
+            std::vector<InterfaceData> m_interfaces;
+            std::vector<CameraData> m_cameras;
+        };
+    } // namespace Examples
+} // namespace VmbC
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/CMakeLists.txt b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4a4e15ecaae8f1f555c6a3829e65de4692128719
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/CMakeLists.txt
@@ -0,0 +1,154 @@
+#[===[
+  Copyright (C) 2021-2022 Allied Vision Technologies.  All Rights Reserved.
+ 
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+ -----------------------------------------------------------------------------
+  CMake project for the AsynchronousGrab Qt example using the Vmb C API
+ -----------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+]===]
+
+cmake_minimum_required(VERSION 3.0)
+
+project(AsynchronousGrabQt)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS C ImageTransform)
+find_package(Qt5 REQUIRED COMPONENTS Widgets)
+
+set(SOURCES)
+set(HEADERS)
+
+# add source+header combination in this dir
+foreach(_FILE_NAME IN ITEMS
+    AcquisitionManager
+    ApiController
+    Image
+    ImageTranscoder
+    LogEntryListModel
+    ModuleData
+    ModuleTreeModel
+    VmbException
+    VmbLibraryLifetime
+)
+    list(APPEND SOURCES "${_FILE_NAME}.cpp")
+    list(APPEND HEADERS "${_FILE_NAME}.h")
+endforeach()
+
+# add sources without corresponding header
+list(APPEND SOURCES
+    main.cpp
+)
+
+# add headers without corresponding source
+list(APPEND HEADERS
+    support/NotNull.h
+    LogEntry.h
+)
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(AsynchronousGrabQt_VmbC
+    ${SOURCES}
+    ${HEADERS}
+)
+
+target_link_libraries(AsynchronousGrabQt_VmbC PRIVATE Qt5::Widgets Vmb::C Vmb::ImageTransform)
+if (UNIX)
+    target_link_libraries(AsynchronousGrabQt_VmbC PRIVATE pthread)
+endif()
+
+target_include_directories(AsynchronousGrabQt_VmbC PRIVATE . ${CMAKE_CURRENT_BINARY_DIR})
+
+# find out binary dir of qt
+get_filename_component(_VMB_QT_BIN_DIR ${Qt5_DIR} DIRECTORY)
+get_filename_component(_VMB_QT_BIN_DIR ${_VMB_QT_BIN_DIR} DIRECTORY)
+get_filename_component(_VMB_QT_BIN_DIR ${_VMB_QT_BIN_DIR} DIRECTORY)
+
+set_target_properties(AsynchronousGrabQt_VmbC
+    PROPERTIES
+        CXX_STANDARD 11
+        VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};${_VMB_QT_BIN_DIR}/bin;$ENV{PATH}"
+)
+
+# provide target_sources that suits our needs in case it's not yet built in 
+if (NOT COMMAND target_sources)
+    macro(target_sources TARGET VISIBILITY SOURCE_FILE)
+        foreach(_SRC IN ITEMS ${SOURCE_FILE} ${ARGN})
+            set_property(TARGET ${TARGET} APPEND PROPERTY SOURCES ${_SRC})
+        endforeach()
+    endmacro()
+endif()
+
+###############################################################################
+# qt source generation ########################################################
+###############################################################################
+
+set(GENERATED_UI_SOURCES)
+set(MOC_HEADERS)
+set(UI_FILES)
+set(UI_SOURCES)
+
+# uic generation
+foreach(_UI_SRC IN ITEMS
+    AsynchronousGrabGui
+)
+    set(_SRC UI/res/${_UI_SRC}.ui)
+    list(APPEND UI_FILES ${_SRC})
+    qt5_wrap_ui(GENERATED_UI_SOURCES ${_SRC})
+endforeach()
+
+# moc compilation
+foreach(_MOC_SRC IN ITEMS
+    MainWindow
+    ImageLabel
+)
+    set(_SRC UI/${_MOC_SRC}.h)
+    list(APPEND MOC_HEADERS ${_SRC})
+    list(APPEND UI_SOURCES UI/${_MOC_SRC}.cpp)
+    qt5_wrap_cpp(GENERATED_UI_SOURCES ${_SRC} TARGET AsynchronousGrabQt_VmbC)
+endforeach()
+
+list(APPEND UI_SOURCES imagelabel.h)
+
+set_source_files_properties(${GENERATED_UI_SOURCES} PROPERTIES
+    GENERATED True
+)
+
+target_sources(AsynchronousGrabQt_VmbC PRIVATE
+    ${GENERATED_UI_SOURCES}
+    ${MOC_HEADERS}
+    ${UI_FILES}
+    ${UI_SOURCES}
+)
+
+if(UNIX)
+  target_link_options(AsynchronousGrabQt_VmbC PUBLIC -no-pie)
+endif()
+
+# source groups for IDE
+source_group(Resources FILES ${UI_FILES})
+source_group("Source Files\\UI" FILES ${UI_SOURCES})
+source_group("Header Files\\UI" FILES ${MOC_HEADERS})
+source_group("Generated" FILES ${GENERATED_UI_SOURCES})
+
+# use executable as default startup project in Visual Studio
+set_property(DIRECTORY . PROPERTY VS_STARTUP_PROJECT AsynchronousGrabQt_VmbC)
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/Image.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/Image.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..820c41886e96c50b5203b092a58e336128bb9ebc
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/Image.cpp
@@ -0,0 +1,104 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Implementation of ::VmbC::Examples::Image
+ */
+
+#include <cstdlib>
+
+#include <VmbImageTransform/VmbTransform.h>
+
+#include "Image.h"
+#include "VmbException.h"
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        Image::Image(VmbPixelFormat_t pixelFormat) noexcept
+            : m_pixelFormat(pixelFormat)
+        {
+            m_image.Size = sizeof(m_image);
+            m_image.Data = nullptr;
+        }
+
+        Image::Image(VmbFrame_t const& frame)
+            : m_dataOwned(false),
+            m_pixelFormat(frame.pixelFormat)
+        {
+            m_image.Size = sizeof(m_image);
+            m_image.Data = frame.imageData;
+            
+            auto error = VmbSetImageInfoFromPixelFormat(frame.pixelFormat, frame.width, frame.height, &m_image);
+            if (error != VmbErrorSuccess)
+            {
+                throw VmbException::ForOperation(error, "VmbSetImageInfoFromPixelFormat");
+            }
+        }
+
+        Image::~Image()
+        {
+            if (m_dataOwned)
+            {
+                std::free(m_image.Data);
+            }
+        }
+
+        void Image::Convert(Image const& conversionSource)
+        {
+            if (&conversionSource == this)
+            {
+                return;
+            }
+            auto error = VmbSetImageInfoFromPixelFormat(m_pixelFormat, conversionSource.GetWidth(), conversionSource.GetHeight(), &m_image);
+            if (error != VmbErrorSuccess)
+            {
+                throw VmbException::ForOperation(error, "VmbSetImageInfoFromPixelFormat");
+            }
+
+            size_t requiredCapacity = GetBytesPerLine() * GetHeight();
+            if (requiredCapacity > m_capacity)
+            {
+                void* newData;
+                if (m_image.Data == nullptr)
+                {
+                    newData = std::malloc(requiredCapacity);
+                }
+                else
+                {
+                    newData = std::realloc(m_image.Data, requiredCapacity);
+                }
+
+                if (newData == nullptr)
+                {
+                    throw std::bad_alloc();
+                }
+
+                m_image.Data = newData;
+                m_capacity = requiredCapacity;
+            }
+
+            error = VmbImageTransform(&conversionSource.m_image, &m_image, nullptr, 0);
+            if (error != VmbErrorSuccess)
+            {
+                throw VmbException::ForOperation(error, "VmbImageTransform");
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/Image.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/Image.h
new file mode 100644
index 0000000000000000000000000000000000000000..a09f488dd94bc3bbf477dfb36863869f518f2929
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/Image.h
@@ -0,0 +1,102 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of a class responsible for accessing VmbImageTransform
+ *        functionality
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_IMAGE_H
+#define ASYNCHRONOUSGRAB_C_IMAGE_H
+
+#include <VmbC/VmbC.h>
+#include <VmbImageTransform/VmbTransformTypes.h>
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        /**
+         * \brief Image data that can be used as source and target for image
+         *        transformations via VmbImageTransform library
+         */
+        class Image
+        {
+        public:
+            /**
+             * \brief creates an image with a given pixel format that has
+             *        capacity 0
+             */
+            Image(VmbPixelFormat_t pixelFormat = VmbPixelFormatLast) noexcept;
+
+            /**
+             * \brief initializes the image with frame data received from VmbC;
+             *        does not take ownership of the data
+             */
+            Image(VmbFrame_t const& frame);
+
+            ~Image();
+
+            Image(Image const&) = delete;
+            Image& operator=(Image const&) = delete;
+
+            Image(Image const&&) = delete;
+            Image& operator=(Image const&&) = delete;
+
+            int GetWidth() const noexcept { return m_image.ImageInfo.Width; }
+
+            int GetHeight() const noexcept { return m_image.ImageInfo.Height; }
+
+            /**
+             * \brief gets the bytes used for one image line for use in the transformation target/QImage constructor.
+             * 
+             * \warning This function does not work properly for images using a number of bits per pixel that is not divisible by 8.
+             *          We only use it to determine the size of RGBA/BGRA images in this example.
+             */
+            int GetBytesPerLine() const noexcept
+            {
+                return m_image.ImageInfo.Stride * (m_image.ImageInfo.PixelInfo.BitsPerPixel / 8);
+            }
+
+            /**
+             * \brief gets readonly access to the raw image data 
+             */
+            unsigned char const* GetData() const noexcept
+            {
+                return static_cast<unsigned char const*>(m_image.Data);
+            }
+
+            /**
+             * \brief convert the data of conversionImage to the pixel format of this image
+             */
+            void Convert(Image const& conversionSource);
+        private:
+            bool m_dataOwned{true};
+            VmbImage m_image;
+            VmbPixelFormat_t m_pixelFormat;
+
+            /**
+             * \brief the size of the currently owned buffer in bytes 
+             */
+            size_t m_capacity { 0 };
+
+        };
+    }
+}
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ImageTranscoder.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ImageTranscoder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5fbcb186cacc5720dfa1dda255ec3e0716aa398e
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ImageTranscoder.cpp
@@ -0,0 +1,269 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Implementation of ::VmbC::Examples::ImageTranscoder
+ */
+
+#include <algorithm>
+#include <limits>
+#include <thread>
+#include <type_traits>
+
+#include "AcquisitionManager.h"
+#include "Image.h"
+#include "ImageTranscoder.h"
+#include "VmbException.h"
+
+#include <QImage>
+#include <QPixmap>
+
+#include <VmbC/VmbC.h>
+
+namespace VmbC
+{
+    namespace Examples
+    {
+        ImageTranscoder::ImageTranscoder(AcquisitionManager& manager)
+            : m_acquisitionManager(manager)
+        {
+        }
+
+        void ImageTranscoder::PostImage(VmbHandle_t const streamHandle, VmbFrameCallback callback, VmbFrame_t const* frame)
+        {
+            bool notify = false;
+
+            if (frame != nullptr)
+            {
+                if (frame->receiveStatus == VmbFrameStatusComplete
+                    && (frame->receiveFlags & VmbFrameFlagsDimension) == VmbFrameFlagsDimension)
+                {
+                    auto message = std::unique_ptr<TransformationTask>(new TransformationTask(streamHandle, callback, *frame));
+
+                    {
+                        std::lock_guard<std::mutex> lock(m_inputMutex);
+                        if (m_terminated)
+                        {
+                            message->m_canceled = true;
+                        }
+                        else
+                        {
+                            m_task = std::move(message);
+                            notify = true;
+                        }
+                    }
+                }
+                else
+                {
+                    // try to renequeue the frame we won't pass to the image transformation
+                    VmbCaptureFrameQueue(streamHandle, frame, callback);
+                }
+            }
+
+            if (notify)
+            {
+                m_inputCondition.notify_one();
+            }
+        }
+
+        void ImageTranscoder::Start()
+        {
+            {
+                std::lock_guard<std::mutex> lock(m_inputMutex);
+                if (!m_terminated)
+                {
+                    throw VmbException("ImageTranscoder is still running");
+                }
+                m_terminated = false;
+            }
+            m_thread = std::thread(&ImageTranscoder::TranscodeLoop, std::ref(*this));
+        }
+
+        void ImageTranscoder::Stop() noexcept
+        {
+            {
+                std::lock_guard<std::mutex> lock(m_inputMutex);
+                if (m_terminated)
+                {
+                    return;
+                }
+                m_terminated = true;
+                if (m_task)
+                {
+                    m_task->m_canceled;
+                    m_task.reset();
+                }
+            }
+            m_inputCondition.notify_all();
+            m_thread.join();
+        }
+
+        void ImageTranscoder::SetOutputSize(QSize size)
+        {
+            std::lock_guard<std::mutex> lock(m_sizeMutex);
+            m_outputSize = size;
+        }
+
+        ImageTranscoder::~ImageTranscoder()
+        {
+            // tell the thread about the shutdown
+            if (!m_terminated)
+            {
+                Stop();
+            }
+        }
+
+        void ImageTranscoder::TranscodeLoopMember()
+        {
+            std::unique_lock<std::mutex> lock(m_inputMutex);
+
+            while (true)
+            {
+                if (!m_terminated && !m_task)
+                {
+                    m_inputCondition.wait(lock, [this]() { return m_terminated || m_task; }); // wait for frame/termination
+                }
+
+                if (m_terminated)
+                {
+                    return;
+                }
+
+                {
+                    // get task
+                    decltype(m_task) task;
+                    std::swap(task, m_task);
+
+                    lock.unlock();
+
+                    if (task)
+                    {
+                        try
+                        {
+                            TranscodeImage(*task);
+                        }
+                        catch (VmbException const&)
+                        {
+                            // todo?
+                        }
+                        catch (std::bad_alloc&)
+                        {
+                            // todo?
+                        }
+                    }
+
+                    lock.lock();
+
+                    if (m_terminated)
+                    {
+                        // got terminated during conversion -> don't reenqueue frames
+                        task->m_canceled = true;
+                        return;
+                    }
+                }
+            }
+
+        }
+
+        namespace
+        {
+            bool IsLittleEndian()
+            {
+                uint32_t const one = 1;
+                auto oneBytes = reinterpret_cast<unsigned char const*>(&one);
+                return oneBytes[0] == 1;
+            }
+
+            /**
+             * \brief helper class for determining the image formats to use in the conversion 
+             */
+            class ImageFormats
+            {
+            public:
+
+                ImageFormats()
+                    : ImageFormats(IsLittleEndian())
+                {
+                }
+
+                QImage::Format const QtImageFormat;
+                VmbPixelFormat_t const VmbTransformFormat;
+
+            private:
+                ImageFormats(bool littleEndian)
+                    : QtImageFormat(littleEndian ? QImage::Format_RGB32 : QImage::Format_RGBX8888),
+                    VmbTransformFormat(littleEndian ? VmbPixelFormatBgra8 : VmbPixelFormatRgba8)
+                {
+                }
+            };
+
+            static const ImageFormats ConversionFormats{};
+        }
+
+        void ImageTranscoder::TranscodeImage(TransformationTask& task)
+        {
+            VmbFrame_t const& frame = task.m_frame;
+
+            Image const source(task.m_frame);
+
+            // allocate new image, if necessary
+            if (!m_transformTarget)
+            {
+                m_transformTarget.reset(new Image(ConversionFormats.VmbTransformFormat));
+            }
+
+            m_transformTarget->Convert(source);
+
+            QImage qImage(m_transformTarget->GetData(),
+                          m_transformTarget->GetWidth(),
+                          m_transformTarget->GetHeight(),
+                          m_transformTarget->GetBytesPerLine(),
+                          ConversionFormats.QtImageFormat);
+
+            QPixmap pixmap = QPixmap::fromImage(qImage, Qt::ImageConversionFlag::ColorOnly);
+
+            QSize size;
+           
+            {
+                std::lock_guard<std::mutex> lock(m_sizeMutex);
+                size = m_outputSize;
+            }
+
+            m_acquisitionManager.ConvertedFrameReceived(pixmap.scaled(size, Qt::AspectRatioMode::KeepAspectRatio));
+        }
+
+        void ImageTranscoder::TranscodeLoop(ImageTranscoder& transcoder)
+        {
+            transcoder.TranscodeLoopMember();
+        }
+
+        ImageTranscoder::TransformationTask::TransformationTask(VmbHandle_t const streamHandle, VmbFrameCallback callback, VmbFrame_t const& frame)
+            : m_streamHandle(streamHandle),
+            m_callback(callback),
+            m_frame(frame)
+        {
+        }
+
+        ImageTranscoder::TransformationTask::~TransformationTask()
+        {
+            if (!m_canceled)
+            {
+                VmbCaptureFrameQueue(m_streamHandle, &m_frame, m_callback);
+            }
+        }
+    }
+}
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ImageTranscoder.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ImageTranscoder.h
new file mode 100644
index 0000000000000000000000000000000000000000..944f03c0bbbaa517dd2fd863cb0b4190d497d715
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ImageTranscoder.h
@@ -0,0 +1,160 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of a class responsible converting VmbC image data to
+ *        QPixmap in a background thread
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_IMAGE_TRANSCODER_H
+#define ASYNCHRONOUSGRAB_C_IMAGE_TRANSCODER_H
+
+#include <condition_variable>
+#include <memory>
+#include <mutex>
+#include <thread>
+
+#include <QSize>
+
+#include <VmbC/VmbC.h>
+
+namespace VmbC
+{
+    namespace Examples
+    {
+        class AcquisitionManager;
+        class Image;
+
+        /**
+         * \brief Class responsible converting VmbC image data to
+         *        QPixmap in a background thread
+         */
+        class ImageTranscoder
+        {
+        public:
+            ImageTranscoder(AcquisitionManager& manager);
+            ~ImageTranscoder();
+
+            /**
+             * \brief Asynchronously schedule the conversion of a frame 
+             * \param callback the callback to use the old frame that is reenqueued
+             */
+            void PostImage(VmbHandle_t streamHandle, VmbFrameCallback callback, VmbFrame_t const* frame);
+
+            /**
+             * \brief start with the conversion process 
+             */
+            void Start();
+
+            /**
+             * \brief stop the conversion process
+             */
+            void Stop() noexcept;
+
+            /**
+             * \brief update the size of the QPixmaps to produce
+             */
+            void SetOutputSize(QSize size);
+        private:
+            /**
+             * \brief size of QPixmaps to produce 
+             */
+            QSize m_outputSize;
+
+            /**
+             * \brief mutex for guarding access to m_outputSize 
+             */
+            std::mutex m_sizeMutex;
+
+            /**
+             * \brief object holding all required info about a desired
+             *        conversion 
+             */
+            struct TransformationTask
+            {
+                VmbHandle_t m_streamHandle;
+                VmbFrameCallback m_callback;
+                VmbFrame_t const& m_frame;
+
+                /**
+                 * \brief set to true to prevent reenqueuing the frame after
+                 *        the conversion 
+                 */
+                bool m_canceled{ false };
+                
+                TransformationTask(VmbHandle_t const streamHandle, VmbFrameCallback callback, VmbFrame_t const& frame);
+
+                ~TransformationTask();
+            };
+
+            /**
+             * \brief the function to use with std::thread 
+             */
+            static void TranscodeLoop(ImageTranscoder& transcoder);
+
+            /**
+             * \brief contains the actual logic used for executing the
+             *        conversions 
+             */
+            void TranscodeLoopMember();
+
+            /**
+             * \brief execute the conversion of a single image
+             */ 
+            void TranscodeImage(TransformationTask& task);
+
+            /**
+             * \brief the object to notify about the conversion results 
+             */
+            AcquisitionManager& m_acquisitionManager;
+
+            /**
+             * \brief mutex guarding the frame data received 
+             */
+            std::mutex m_inputMutex;
+
+            /**
+             * \brief condition variable used to notify the background thread
+             *        about new frames; guarded by m_inputMutex  
+             */
+            std::condition_variable m_inputCondition;
+
+            /**
+             * \brief info about the next conversion to do 
+             */
+            std::unique_ptr<TransformationTask> m_task;
+
+            /**
+             * \brief target image for the conversion 
+             */
+            std::unique_ptr<Image> m_transformTarget;
+
+            /**
+             * \brief true, if the background thread should terminate; guarded
+             *        by m_inputMutex 
+             */
+            bool m_terminated { true };
+
+            /**
+             * \brief the background thread 
+             */
+            std::thread m_thread;
+        };
+    }
+}
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/LogEntry.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/LogEntry.h
new file mode 100644
index 0000000000000000000000000000000000000000..65ef8caaf7a3ba3176e15089372163de73d15552
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/LogEntry.h
@@ -0,0 +1,58 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of an entry of the event log view
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_LOG_ENTRY_H
+#define ASYNCHRONOUSGRAB_C_LOG_ENTRY_H
+
+#include <VmbC/VmbC.h>
+
+#include <string>
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        class LogEntry
+        {
+        public:
+            LogEntry(std::string const& message, VmbError_t error = VmbErrorSuccess)
+                : m_frame(message), m_errorCode(error) 
+            {
+            }
+
+            std::string const& GetMessage() const noexcept
+            {
+                return m_frame;
+            }
+
+            VmbError_t GetErrorCode() const noexcept
+            {
+                return m_errorCode;
+            }
+        private:
+            std::string m_frame;
+            VmbError_t m_errorCode;
+        };
+    } // namespace Examples
+} // namespace VmbC
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/LogEntryListModel.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/LogEntryListModel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..de9eef1a936219cf0fb6edead3a4cb0eb82db0c6
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/LogEntryListModel.cpp
@@ -0,0 +1,104 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Implementation of LogEntryListModel.
+ */
+
+#include "LogEntryListModel.h"
+
+namespace VmbC
+{
+    namespace Examples
+    {
+        LogEntryListModel::LogEntryListModel(QObject* parent)
+            : QAbstractTableModel(parent)
+        {
+        }
+
+        int LogEntryListModel::columnCount(QModelIndex const& parent) const
+        {
+            return 2;
+        }
+
+        int LogEntryListModel::rowCount(QModelIndex const& parent) const
+        {
+            return static_cast<int>(m_data.size());
+        }
+
+        namespace
+        {
+            QVariant ErrorCodeText(VmbError_t errorCode)
+            {
+                if (errorCode == VmbErrorSuccess)
+                {
+                    return {};
+                }
+                return QString::number(errorCode);
+            }
+        }
+
+        QVariant LogEntryListModel::data(QModelIndex const& index, int role) const
+        {
+            if (role == Qt::ItemDataRole::DisplayRole)
+            {
+                auto& entry = m_data.at(static_cast<size_t>(index.row()));
+                switch (index.column())
+                {
+                case ErrorCodeColumn:
+                    return ErrorCodeText(entry.GetErrorCode());
+                case MessageColumn:
+                    return QString::fromStdString(entry.GetMessage());
+                }
+            }
+
+            return QVariant();
+        }
+
+        QVariant LogEntryListModel::headerData(int section, Qt::Orientation, int role) const
+        {
+            if (role == Qt::DisplayRole)
+            {
+                switch (section)
+                {
+                case ErrorCodeColumn:
+                    return QString("Error Code");
+                case MessageColumn:
+                    return QString("Message");
+                }
+            }
+            return QVariant();
+        }
+
+        LogEntryListModel& LogEntryListModel::operator<<(LogEntry&& entry)
+        {
+            int size = static_cast<int>(m_data.size());
+            beginInsertRows(QModelIndex(), size, size);
+            try
+            {
+                m_data.emplace_back(std::move(entry));
+                insertRows(size, 1);
+            }
+            catch (...)
+            {
+            }
+            endInsertRows();
+            return *this;
+        }
+
+    } // namespace Examples
+} // namespace VmbC
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/LogEntryListModel.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/LogEntryListModel.h
new file mode 100644
index 0000000000000000000000000000000000000000..7a86259f4f6aca8db56c57420a4acc39e285375f
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/LogEntryListModel.h
@@ -0,0 +1,61 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of a model for filling a TreeView with model data
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_LIST_ENTRY_LIST_MODEL_H
+#define ASYNCHRONOUSGRAB_C_LIST_ENTRY_LIST_MODEL_H
+
+#include <vector>
+
+#include <QAbstractTableModel>
+#include <QVariant>
+
+#include "LogEntry.h"
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        class LogEntryListModel : public QAbstractTableModel
+        {
+        public:
+            static constexpr int ErrorCodeColumn = 0;
+            static constexpr int MessageColumn = 1;
+
+            LogEntryListModel(QObject* parent = nullptr);
+
+            int columnCount(QModelIndex const& parent) const override;
+            int rowCount(QModelIndex const& parent) const override;
+            QVariant data(QModelIndex const& index, int role) const override;
+            QVariant headerData(int section, Qt::Orientation, int role) const override;
+
+            LogEntryListModel& operator<<(LogEntry&& entry);
+        private:
+
+            /**
+             * \brief a list of all log entries
+             */
+            std::vector<LogEntry> m_data;
+        };
+    } // namespace Examples
+} // namespace VmbC
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleData.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleData.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b9ec5bfd5d81247f7c2b88b3c096b87dc3b357e4
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleData.cpp
@@ -0,0 +1,50 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Implementation of ModuleData.
+ */
+
+#include "ModuleData.h"
+
+namespace VmbC
+{
+    namespace Examples
+    {
+        ModuleData* ModuleData::GetParent()
+        {
+            return m_parent;
+        }
+
+        ModuleData::ModuleData()
+            : m_parent(nullptr)
+        {
+        }
+
+        void ModuleData::Visitor::Visit(VmbCameraInfo_t const& data)
+        {
+        }
+
+        void ModuleData::Visitor::Visit(VmbInterfaceInfo_t const& data)
+        {
+        }
+
+        void ModuleData::Visitor::Visit(VmbTransportLayerInfo_t const& data)
+        {
+        }
+    } // namespace Examples
+} // namespace VmbC
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleData.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleData.h
new file mode 100644
index 0000000000000000000000000000000000000000..ac6be7c4ee4f2811b169f85d76eda8034bc9f892
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleData.h
@@ -0,0 +1,107 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of base class for modules
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_MODULE_DATA_H
+#define ASYNCHRONOUSGRAB_C_MODULE_DATA_H
+
+#include <string>
+
+#include <VmbC/VmbC.h>
+
+class MainWindow;
+
+namespace VmbC
+{
+    namespace Examples
+    {
+        class ApiController;
+
+        class ModuleData
+        {
+        public:
+            struct Visitor
+            {
+                virtual ~Visitor() = default;
+
+                virtual void Visit(VmbCameraInfo_t const& data);
+
+                virtual void Visit(VmbInterfaceInfo_t const& data);
+
+                virtual void Visit(VmbTransportLayerInfo_t const& data);
+            };
+
+            virtual ~ModuleData() = default;
+
+            ModuleData* GetParent();
+
+            virtual void Accept(Visitor& visitor) const = 0;
+        protected:
+            ModuleData();
+            ModuleData* m_parent;
+
+        };
+
+        /**
+         * \brief a class holding the info about a single module
+         * \tparam T the info type, e.g. VmbCameraInfo_t or VmbInterfaceInfo_t
+         */
+        template<typename T>
+        class ModuleDataImpl : public ModuleData
+        {
+        public:
+            using InfoType = T;
+
+            void Accept(Visitor& visitor) const override
+            {
+                visitor.Visit(m_info);
+            }
+
+            ModuleDataImpl(InfoType const& info)
+                : m_info(info)
+            {
+            }
+
+            InfoType const& GetInfo() const
+            {
+                return m_info;
+            }
+
+            void SetParent(ModuleData* parent)
+            {
+                m_parent = parent;
+            }
+        private:
+
+            /**
+             * \brief Vmb C Api struct holding the info about the module
+             */
+            InfoType m_info;
+
+        };
+
+        using CameraData = ModuleDataImpl<VmbCameraInfo_t>;
+        using InterfaceData = ModuleDataImpl<VmbInterfaceInfo_t>;
+        using TlData = ModuleDataImpl<VmbTransportLayerInfo_t>;
+
+    } // namespace Examples
+} // namespace VmbC
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleTreeModel.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleTreeModel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e8bc14bd8830dcd3c62da5125f75124577f55866
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleTreeModel.cpp
@@ -0,0 +1,233 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Implementation of ::VmbC::Examples::ModuleTreeModel
+ */
+
+#include "ModuleTreeModel.h"
+
+#include <limits>
+#include <unordered_map>
+
+namespace VmbC
+{
+    namespace Examples
+    {
+        ModuleTreeModel::Item::Item()
+            : m_parent(nullptr),
+            m_indexInParent((std::numeric_limits<size_t>::max)())
+        {
+        }
+
+        ModuleTreeModel::Item::Item(std::unique_ptr<ModuleData>&& module)
+            : m_module(std::move(module)), m_parent(nullptr),
+            m_indexInParent((std::numeric_limits<size_t>::max)())
+        {
+        }
+
+        ModuleTreeModel::ModuleTreeModel(std::vector<std::unique_ptr<ModuleData>>&& moduleData)
+        {
+            m_data.reserve(moduleData.size());
+
+            for (auto& md : moduleData)
+            {
+                m_data.emplace_back(std::move(md));
+            }
+            m_data.shrink_to_fit();
+            
+            // create mapping for ModuleData to Item containing it
+            std::unordered_map<ModuleData*, Item*> mapping;
+            mapping[nullptr] = &m_pseudoRoot;
+
+            for (auto& item : m_data)
+            {
+                mapping[item.m_module.get()] = &item;
+            }
+
+            // initialize parent and child lists
+            for (auto& item : m_data)
+            {
+                auto parentItem = mapping[item.m_module->GetParent()];
+
+                item.m_parent = parentItem;
+                item.m_indexInParent = parentItem->m_children.size();
+                parentItem->m_children.push_back(&item);
+            }
+        }
+
+        QModelIndex ModuleTreeModel::index(int r, int column, QModelIndex const& parent) const
+        {
+            if (column != 0 || r < 0)
+            {
+                return QModelIndex();
+            }
+
+            size_t const row = static_cast<size_t>(r);
+
+            if (parent.isValid())
+            {
+                auto const ptr = parent.internalPointer();
+                if (column != 0 || ptr == nullptr)
+                {
+                    return QModelIndex();
+                }
+                auto& children = static_cast<Item*>(ptr)->m_children;
+
+                return (children.size() > row)
+                    ? createIndex(r, column, children[row]) : QModelIndex();
+            }
+            else
+            {
+                return row >= m_pseudoRoot.m_children.size() ? QModelIndex() : createIndex(r, column, m_pseudoRoot.m_children[row]);
+            }
+        }
+
+        QModelIndex ModuleTreeModel::parent(QModelIndex const& index) const
+        {
+            if (index.isValid())
+            {
+                Item const* const item = static_cast<Item*>(index.internalPointer());
+                if (item == nullptr)
+                {
+                    return QModelIndex();
+                }
+                else
+                {
+                    auto const parentItem = item->m_parent;
+                    return (parentItem == nullptr) ? QModelIndex() : createIndex(static_cast<int>(parentItem->m_indexInParent), 0, parentItem);
+                }
+            }
+            else
+            {
+                return QModelIndex();
+            }
+        }
+
+        int ModuleTreeModel::rowCount(QModelIndex const& parent) const
+        {
+            if (parent.isValid())
+            {
+                Item const* const item = static_cast<Item*>(parent.internalPointer());
+                return (item == nullptr) ? 0 : static_cast<int>(item->m_children.size());
+            }
+            else
+            {
+                return static_cast<int>(m_pseudoRoot.m_children.size());
+            }
+        }
+
+        int ModuleTreeModel::columnCount(QModelIndex const& parent) const
+        {
+            return 1;
+        }
+
+        namespace
+        {
+            struct DataRetrievalContext
+            {
+                Qt::ItemDataRole m_role;
+                QVariant& m_result;
+            };
+        }
+
+        QVariant ModuleTreeModel::data(QModelIndex const& index, int role) const
+        {
+            QVariant result;
+
+            Item const* const item = static_cast<Item*>(index.internalPointer());
+
+            if (item != nullptr)
+            {
+                DataRetrievalVisitor visitor { static_cast<Qt::ItemDataRole>(role), result };
+                item->m_module->Accept(visitor);
+            }
+
+            return result;
+        }
+
+        Qt::ItemFlags ModuleTreeModel::flags(QModelIndex const& index) const
+        {
+            Qt::ItemFlags flags = Qt::ItemFlag::ItemIsEnabled;
+
+            if (index.isValid())
+            {
+                auto ptr = index.internalPointer();
+                if (ptr != nullptr)
+                {
+                    FlagUpdateVisitor visitor(flags);
+                    static_cast<Item*>(ptr)->m_module->Accept(visitor);
+                }
+            }
+
+            return flags;
+        }
+
+        ModuleData const* ModuleTreeModel::GetModule(QModelIndex const& modelIndex)
+        {
+            if (!modelIndex.isValid())
+            {
+                return nullptr;
+            }
+            auto ptr = modelIndex.internalPointer();
+            return (ptr == nullptr) ? nullptr : static_cast<Item*>(ptr)->m_module.get();
+        }
+
+        void ModuleTreeModel::DataRetrievalVisitor::Visit(VmbCameraInfo_t const& data)
+        {
+            switch (m_role)
+            {
+            case Qt::ItemDataRole::DisplayRole:
+                m_result = QString(data.modelName) + QString(" (") + QString(data.cameraName) + QString(")");
+                break;
+            }
+        }
+
+        void ModuleTreeModel::DataRetrievalVisitor::Visit(VmbInterfaceInfo_t const& data)
+        {
+            switch (m_role)
+            {
+            case Qt::ItemDataRole::DisplayRole:
+                m_result = QString(data.interfaceName);
+                break;
+            }
+        }
+
+        void ModuleTreeModel::DataRetrievalVisitor::Visit(VmbTransportLayerInfo_t const& data)
+        {
+            switch (m_role)
+            {
+            case Qt::ItemDataRole::DisplayRole:
+                m_result = QString(data.transportLayerName);
+                break;
+            case Qt::ItemDataRole::ToolTipRole:
+                m_result = QString::fromStdString(std::string("transportLayerName: ") + data.transportLayerName);
+                break;
+            }
+        }
+
+        ModuleTreeModel::DataRetrievalVisitor::DataRetrievalVisitor(Qt::ItemDataRole role, QVariant& result)
+            : m_role(role), m_result(result)
+        {
+        }
+
+        void ModuleTreeModel::FlagUpdateVisitor::Visit(VmbCameraInfo_t const& data)
+        {
+            m_flags |= (Qt::ItemFlag::ItemNeverHasChildren | Qt::ItemFlag::ItemIsSelectable);
+        }
+} // namespace Examples
+} // namespace VmbC
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleTreeModel.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleTreeModel.h
new file mode 100644
index 0000000000000000000000000000000000000000..359728d5e65cb017098e336301784d51c246ea30
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/ModuleTreeModel.h
@@ -0,0 +1,117 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of a model for filling a TreeView with model data
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_MODULE_TREE_MODEL_H
+#define ASYNCHRONOUSGRAB_C_MODULE_TREE_MODEL_H
+
+#include <string>
+#include <memory>
+#include <vector>
+
+#include <QAbstractItemModel>
+#include <QVariant>
+
+#include "ModuleData.h"
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        class ModuleTreeModel : public QAbstractItemModel
+        {
+        public:
+            ModuleTreeModel(std::vector<std::unique_ptr<ModuleData>>&& moduleData);
+
+            QModelIndex index(int row, int column, QModelIndex const& parent) const override;
+            QModelIndex parent(QModelIndex const& index) const override;
+            int rowCount(QModelIndex const& parent) const override;
+            int columnCount(QModelIndex const& parent) const override;
+            QVariant data(QModelIndex const& index, int role) const override;
+            Qt::ItemFlags flags(QModelIndex const& index) const override;
+
+            /**
+             * \brief get the module data at the given model index
+             * \return a pointer to the module data object or null, if the index is invalid
+             */
+            static ModuleData const* GetModule(QModelIndex const& modelIndex);
+        private:
+            struct DataRetrievalVisitor : ModuleData::Visitor
+            {
+                Qt::ItemDataRole m_role;
+                QVariant& m_result;
+
+                DataRetrievalVisitor(Qt::ItemDataRole role, QVariant& result);
+
+                void Visit(VmbCameraInfo_t const& data) override;
+
+                void Visit(VmbInterfaceInfo_t const& data) override;
+
+                void Visit(VmbTransportLayerInfo_t const& data) override;
+            };
+
+            struct FlagUpdateVisitor : ModuleData::Visitor
+            {
+                Qt::ItemFlags& m_flags;
+
+                FlagUpdateVisitor(Qt::ItemFlags& flags)
+                    : m_flags(flags)
+                {
+                }
+
+                void Visit(VmbCameraInfo_t const& data) override;
+
+            };
+
+            /**
+             * \brief one node in the tree
+             */
+            struct Item
+            {
+                Item();
+
+                Item(std::unique_ptr<ModuleData>&& module);
+
+                Item(Item&&) = default;
+
+                Item& operator=(Item&&) = default;
+
+                std::unique_ptr<ModuleData> m_module;
+
+                Item* m_parent;
+                size_t m_indexInParent;
+                std::vector<Item*> m_children;
+            };
+
+            /**
+             * \brief item used as parent for the actual roots of the trees
+             */
+            Item m_pseudoRoot;
+
+            /**
+             * \brief a list of all items of the module  
+             */
+            std::vector<Item> m_data;
+        };
+    } // namespace Examples
+} // namespace VmbC
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/ImageLabel.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/ImageLabel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8f4b1d615468a40644cc7a42054c251037ab5f50
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/ImageLabel.cpp
@@ -0,0 +1,41 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ImageLabel.cpp
+
+  Description: Implementation of ImageLabel.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <QResizeEvent>
+
+#include "UI/ImageLabel.h"
+
+ImageLabel::ImageLabel(QWidget* parent, Qt::WindowFlags flags)
+    : QLabel(parent, flags)
+{
+}
+
+void ImageLabel::resizeEvent(QResizeEvent* event)
+{
+    QLabel::resizeEvent(event);
+    emit sizeChanged(event->size());
+}
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/ImageLabel.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/ImageLabel.h
new file mode 100644
index 0000000000000000000000000000000000000000..92e225311929e8bb72daee375d37af19b6b6c4ff
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/ImageLabel.h
@@ -0,0 +1,51 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief QLabel subclass that provides a signal for getting size updates
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_IMAGE_LABEL_H
+#define ASYNCHRONOUSGRAB_C_IMAGE_LABEL_H
+
+#include <QLabel>
+#include <QSize>
+
+/**
+ * \brief Widget for displaying a the images received from a camera.
+ *        Provides a signal for listening to size updates
+ */
+class ImageLabel : public QLabel
+{
+    Q_OBJECT
+public:
+    ImageLabel(QWidget* parent = 0, Qt::WindowFlags flags = Qt::Widget);
+protected:
+    /**
+     * \brief adds sizeChanged signal emission to QLabel::resizeEvent
+     */
+    void resizeEvent(QResizeEvent* event) override;
+signals:
+    /**
+     * \brief signal triggered during the resize event
+     * \param value the new size after the resize event
+     */
+    void sizeChanged(QSize value);
+
+};
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/MainWindow.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/MainWindow.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e309f18172bf9f9c627d6bfca8b04dffc08877aa
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/MainWindow.cpp
@@ -0,0 +1,379 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        MainWindow.cpp
+
+  Description: Qt dialog class for the GUI of the MainWindow example of
+               VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <algorithm>
+
+#include <QItemSelection>
+#include <QPixmap>
+
+#include "ui_AsynchronousGrabGui.h"
+
+#include "Image.h"
+#include "LogEntryListModel.h"
+#include "MainWindow.h"
+#include "ModuleTreeModel.h"
+#include "VmbException.h"
+
+#include <QTreeWidgetItem>
+
+using VmbC::Examples::VmbException;
+using VmbC::Examples::LogEntry;
+using VmbC::Examples::LogEntryListModel;
+
+namespace Text
+{
+    QString StartAcquisition()
+    {
+        return "Start Acquisition";
+    }
+
+    QString StopAcquisition()
+    {
+        return "Stop Acquisition";
+    }
+
+    QString WindowTitleStartupError()
+    {
+        return "Vmb C AsynchronousGrab API Version";
+    }
+
+    QString WindowTitle(std::string const& vmbCVersion)
+    {
+        return QString::fromStdString("Vmb C AsynchronousGrab API Version " + vmbCVersion);
+    }
+}
+
+namespace
+{
+    struct SelectableCheckVisitor : VmbC::Examples::ModuleData::Visitor
+    {
+        bool m_selectable { false };
+
+        void Visit(VmbCameraInfo_t const&) override
+        {
+            m_selectable = true;
+        }
+    };
+
+    struct CameraInfoRetrievalVisitor : VmbC::Examples::ModuleData::Visitor
+    {
+        VmbCameraInfo_t const* m_info { nullptr };
+
+        void Visit(VmbCameraInfo_t const& info) override
+        {
+            m_info = &info;
+        }
+    };
+}
+
+MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags flags)
+    : QMainWindow(parent, flags),
+    m_ui(new Gui()),
+    m_acquisitionManager(*this),
+    m_log(new LogEntryListModel())
+{
+    m_ui->setupUi(this);
+    SetupLogView();
+
+    try
+    {
+        m_apiController.reset(new ApiController(*this));
+    }
+    catch (VmbException const& ex)
+    {
+        Log(ex);
+    }
+
+    if (m_apiController)
+    {
+        SetupUi(*(m_apiController.get()));
+        SetupCameraTree();
+        m_acquisitionManager.SetOutputSize(m_ui->m_renderLabel->size());
+        QObject::connect(m_ui->m_renderLabel, &ImageLabel::sizeChanged, this, &MainWindow::ImageLabelSizeChanged);
+    }
+    else
+    {
+        setWindowTitle(Text::WindowTitleStartupError());
+    }
+}
+
+void MainWindow::StartStopClicked()
+{
+    if (m_acquisitionManager.IsAcquisitionActive())
+    {
+        StopAcquisition();
+    }
+    else
+    {
+        auto selectionModel = m_ui->m_cameraSelectionTree->selectionModel();
+        if (selectionModel->hasSelection())
+        {
+            auto selection = selectionModel->selectedRows();
+            if (!selection.isEmpty())
+            {
+                auto modelData = VmbC::Examples::ModuleTreeModel::GetModule(selection.at(0));
+                if (modelData != nullptr)
+                {
+                    CameraInfoRetrievalVisitor visitor;
+                    modelData->Accept(visitor);
+                    
+                    if (visitor.m_info != nullptr)
+                    {
+                        StartAcquisition(*(visitor.m_info));
+                    }
+                }
+            }
+        }
+    }
+
+}
+
+void MainWindow::ImageLabelSizeChanged(QSize newSize)
+{
+    m_acquisitionManager.SetOutputSize(newSize);
+}
+
+void MainWindow::RenderImage()
+{
+    QPixmap pixmap;
+    {
+        std::lock_guard<std::mutex> lock(m_imageSynchronizer);
+
+        if (m_renderingRequired)
+        {
+            m_renderingRequired = false;
+            std::swap(pixmap, m_queuedImage);
+        }
+        else
+        {
+            return;
+        }
+    }
+
+    m_ui->m_renderLabel->setPixmap(pixmap);
+}
+
+void MainWindow::SetupUi(VmbC::Examples::ApiController& controller)
+{
+    setWindowTitle(Text::WindowTitle(m_apiController->GetVersion()));
+    
+    QObject::connect(m_ui->m_acquisitionStartStopButton, &QPushButton::clicked, this, &MainWindow::StartStopClicked);
+    QObject::connect(this, &MainWindow::ImageReady, this, static_cast<void (MainWindow::*)()>(&MainWindow::RenderImage), Qt::ConnectionType::QueuedConnection);
+}
+
+void MainWindow::SetupLogView()
+{
+    auto old = m_ui->m_eventLog->model();;
+    m_ui->m_eventLog->setModel(m_log);
+    delete old;
+}
+
+void MainWindow::StartAcquisition(VmbCameraInfo_t const& cameraInfo)
+{
+    bool success = false;
+
+    try
+    {
+        m_acquisitionManager.StartAcquisition(cameraInfo);
+        success = true;
+    }
+    catch (VmbException const& ex)
+    {
+        Log(ex);
+    }
+
+    if (success)
+    {
+        Log("Acquisition Started");
+        // update button text
+        m_ui->m_acquisitionStartStopButton->setText(Text::StopAcquisition());
+    }
+}
+
+void MainWindow::StopAcquisition()
+{
+    m_acquisitionManager.StopAcquisition();
+
+    Log("Acquisition Stopped");
+
+    auto& button = *(m_ui->m_acquisitionStartStopButton);
+
+    button.setText(Text::StartAcquisition());
+    button.setEnabled(m_ui->m_cameraSelectionTree->selectionModel()->hasSelection());
+}
+
+void MainWindow::CameraSelected(QItemSelection const& newSelection)
+{
+    if (!m_acquisitionManager.IsAcquisitionActive())
+    {
+        m_ui->m_acquisitionStartStopButton->setText(Text::StartAcquisition());
+
+        bool disableBtn = newSelection.empty() ;
+        if (!disableBtn)
+        {
+            auto moduleData = VmbC::Examples::ModuleTreeModel::GetModule(newSelection.at(0).topLeft());
+
+            SelectableCheckVisitor visitor;
+            moduleData->Accept(visitor);
+            disableBtn = !visitor.m_selectable;
+        }
+
+        m_ui->m_acquisitionStartStopButton->setDisabled(disableBtn);
+    }
+}
+
+MainWindow::~MainWindow()
+{
+    QObject::disconnect(m_ui->m_renderLabel, &ImageLabel::sizeChanged, this, &MainWindow::ImageLabelSizeChanged);
+    m_acquisitionManager.StopAcquisition();
+}
+
+void MainWindow::RenderImage(QPixmap image)
+{
+    bool notify = false;
+
+    {
+        std::lock_guard<std::mutex> lock(m_imageSynchronizer);
+
+        m_queuedImage = std::move(image);
+        
+        if (!m_renderingRequired)
+        {
+            notify = true;
+            m_renderingRequired = true;
+        }
+    }
+
+    if (notify)
+    {
+        emit ImageReady();
+    }
+}
+
+void MainWindow::SetupCameraTree()
+{
+
+    using VmbC::Examples::ModuleTreeModel;
+    using VmbC::Examples::ModuleData;
+    using VmbC::Examples::CameraData;
+    using VmbC::Examples::InterfaceData;
+    using VmbC::Examples::TlData;
+
+    std::vector<std::unique_ptr<ModuleData>> moduleData;
+
+    // read module info and populate moduleData
+    try
+    {
+        auto systems = m_apiController->GetSystemList();
+        auto interfaces = m_apiController->GetInterfaceList();
+        auto cameras = m_apiController->GetCameraList();
+
+        auto const systemsBegin = systems.begin();
+        auto const systemsEnd = systems.end();
+
+        auto ifEnd = std::stable_partition(interfaces.begin(), interfaces.end(),
+                                           [this, systemsBegin, systemsEnd](std::unique_ptr<InterfaceData> const& ifPtr)
+                                           {
+                                               auto iface = ifPtr.get();
+                                               auto parentIter = std::find_if(systemsBegin, systemsEnd, [iface](std::unique_ptr<TlData> const& sysPtr)
+                                                                              {
+                                                                                  return sysPtr->GetInfo().transportLayerHandle == iface->GetInfo().transportLayerHandle;
+                                                                              });
+                                               if (parentIter == systemsEnd)
+                                               {
+                                                   Log(std::string("parent module not found for interface ") + iface->GetInfo().interfaceName + " ignoring interface");
+                                                   return false;
+                                               }
+                                               else
+                                               {
+                                                   iface->SetParent(parentIter->get());
+                                                   return true;
+                                               }
+                                           });
+
+        auto ifBegin = interfaces.begin();
+
+        auto camerasEnd = std::stable_partition(cameras.begin(), cameras.end(),
+                                           [this, ifBegin, ifEnd](std::unique_ptr<CameraData> const& camPtr)
+                                           {
+                                               auto cam = camPtr.get();
+                                               auto parentIter = std::find_if(ifBegin, ifEnd, [cam](std::unique_ptr<InterfaceData> const& ifacePtr)
+                                                                              {
+                                                                                  return ifacePtr->GetInfo().interfaceHandle == cam->GetInfo().interfaceHandle;
+                                                                              });
+                                               if (parentIter == ifEnd)
+                                               {
+                                                   Log(std::string("parent module not found for camera ") + cam->GetInfo().cameraName + " ignoring camera");
+                                                   return false;
+                                               }
+                                               else
+                                               {
+                                                   cam->SetParent(parentIter->get());
+                                                   return true;
+                                               }
+                                           });
+
+        moduleData.resize(systems.size()
+                          + std::distance(ifBegin, ifEnd)
+                          + std::distance(cameras.begin(), camerasEnd)
+        );
+
+        // move data of all modules reachable from a tl to moduleData
+        auto pos = std::move(systems.begin(), systems.end(), moduleData.begin());
+        pos = std::move(ifBegin, ifEnd, pos);
+        std::move(cameras.begin(), camerasEnd, pos);
+    }
+    catch (VmbException const& ex)
+    {
+        Log(ex);
+    }
+
+    ModuleTreeModel* model = new ModuleTreeModel(std::move(moduleData));
+
+    m_ui->m_cameraSelectionTree->setModel(model);
+    m_ui->m_cameraSelectionTree->expandAll();
+
+    auto selectionModel = m_ui->m_cameraSelectionTree->selectionModel();
+    QObject::connect(selectionModel, &QItemSelectionModel::selectionChanged, this, &MainWindow::CameraSelected);
+
+    m_ui->m_cameraSelectionTree->setDisabled(false);
+
+    m_ui->m_cameraSelectionTree->header()->setStretchLastSection(false);
+    m_ui->m_cameraSelectionTree->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
+
+}
+
+void MainWindow::Log(VmbC::Examples::VmbException const& exception)
+{
+    (*m_log) << LogEntry(exception.what(), exception.GetExitCode());
+}
+
+void MainWindow::Log(std::string const& strMsg)
+{
+    (*m_log) << LogEntry(strMsg);
+}
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/MainWindow.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/MainWindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..089fbf9adc127fdfcc16d48354149998441cc9cf
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/MainWindow.h
@@ -0,0 +1,185 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief The main window of the AsynchronousGrab example of VmbC.
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_MAIN_WINDOW_H
+#define ASYNCHRONOUSGRAB_C_MAIN_WINDOW_H
+
+#include <memory>
+#include <mutex>
+
+#include <QMainWindow>
+#include <QPixmap>
+
+#include <VmbC/VmbC.h>
+
+#include "ApiController.h"
+#include "AcquisitionManager.h"
+#include "support/NotNull.h"
+
+using VmbC::Examples::ApiController;
+
+QT_BEGIN_NAMESPACE
+
+class QListView;
+class QItemSelection;
+class QTreeView;
+
+namespace Ui
+{
+    class AsynchronousGrabGui;
+}
+
+QT_END_NAMESPACE
+
+namespace VmbC
+{
+    namespace Examples
+    {
+        class ApiController;
+        class Image;
+        class LogEntryListModel;
+        class VmbException;
+    }
+}
+
+/**
+ * \brief The GUI. Displays the available cameras, the image received and an
+ *        event log.
+ */
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+public:
+    MainWindow(QWidget* parent = 0, Qt::WindowFlags flags = Qt::Widget);
+
+    ~MainWindow();
+
+    /**
+     * \brief Asynchonously schedule rendering of image 
+     */
+    void RenderImage(QPixmap image);
+private:
+    using Gui = Ui::AsynchronousGrabGui;
+
+    /**
+     * \brief variable for holding the content from UI/res/AsynchronousGrabGui.ui
+     */
+    VmbC::Examples::NotNull<Gui> m_ui;
+
+    /**
+     * \brief Our controller that wraps API access
+     */
+    std::unique_ptr<ApiController> m_apiController;
+
+    bool m_renderingRequired{ false };
+    
+    /**
+     * \brief the next image to be rendered 
+     */
+    QPixmap m_queuedImage;
+
+    /**
+     * \brief mutex for synchonizing access to m_queuedImage
+     */
+    std::mutex m_imageSynchronizer;
+
+    /**
+     * \brief Object for managing the acquisition; this includes the transfer
+     *        of converted images to this object
+     */
+    VmbC::Examples::AcquisitionManager m_acquisitionManager;
+
+    /**
+     * \brief the model used for the QTableView to display log messages.
+     */
+    VmbC::Examples::NotNull<VmbC::Examples::LogEntryListModel> m_log;
+
+    /**
+     * \brief Queries and lists all known camera
+     */
+    void SetupCameraTree();
+
+    /**
+     * \brief Log an exception thrown because of a VmbC libary function call
+     *
+     * \param[in] exception the exception thrown
+     */
+    void Log(VmbC::Examples::VmbException const& exception);
+
+    /**
+     * \brief Prints out a given logging string
+     *
+     * \param[in] strMsg A given message to be printed out
+     */
+    void Log(std::string const& strMsg);
+
+    /**
+     * \brief setup api with info retrieved from controller
+     */
+    void SetupUi(VmbC::Examples::ApiController& controller);
+
+    /**
+     * \brief initialized the QTableView used for logging 
+     */
+    void SetupLogView();
+
+    /**
+     * \brief start the acquisition for a given camera
+     */
+    void StartAcquisition(VmbCameraInfo_t const& cameraInfo);
+
+    /**
+     * \brief stop the acquistion 
+     */
+    void StopAcquisition();
+
+private slots:
+
+    /**
+     * \brief Slot for selection changes in the camera tree
+     */
+    void CameraSelected(QItemSelection const& newSelection);
+
+    /**
+     * \brief Slot for clicks of the start / stop acquisition button
+     */
+    void StartStopClicked();
+
+    /**
+     * \brief Slot for the size changes of the label used for rendering the images
+     */
+    void ImageLabelSizeChanged(QSize newSize);
+
+    /**
+     * \brief Slot for replacing the pixmap of the label used for rendering.
+     * 
+     * Thread affinity with this object required
+     */
+    void RenderImage();
+signals:
+    /**
+     * \brief signal emitted from a background thread to notify the gui about
+     *        a new image being available for rendering
+     */
+    void ImageReady();
+};
+
+#endif // ASYNCHRONOUSGRAB_C_MAIN_WINDOW_H
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/res/AsynchronousGrabGui.ui b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/res/AsynchronousGrabGui.ui
new file mode 100644
index 0000000000000000000000000000000000000000..239d1b9ba9ad436a8c9de2cdebf1753001b4002f
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/UI/res/AsynchronousGrabGui.ui
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AsynchronousGrabGui</class>
+ <widget class="QMainWindow" name="AsynchronousGrabGui">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1040</width>
+    <height>780</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>1040</width>
+    <height>780</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>16777215</width>
+    <height>16777215</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Vmb C AsynchronousGrab</string>
+  </property>
+  <widget class="QWidget" name="centralWidget">
+   <layout class="QGridLayout" name="gridLayout" rowstretch="1,0" columnstretch="0,1" rowminimumheight="0,100" columnminimumwidth="300,0">
+    <item row="0" column="1">
+     <widget class="ImageLabel" name="m_renderLabel">
+      <property name="text">
+       <string/>
+      </property>
+      <property name="textFormat">
+       <enum>Qt::PlainText</enum>
+      </property>
+      <property name="scaledContents">
+       <bool>false</bool>
+      </property>
+      <property name="alignment">
+       <set>Qt::AlignCenter</set>
+      </property>
+     </widget>
+    </item>
+    <item row="1" column="0">
+     <widget class="QPushButton" name="m_acquisitionStartStopButton">
+      <property name="enabled">
+       <bool>false</bool>
+      </property>
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="text">
+       <string>Start Acquisition</string>
+      </property>
+     </widget>
+    </item>
+    <item row="0" column="0">
+     <widget class="QTreeView" name="m_cameraSelectionTree">
+      <property name="enabled">
+       <bool>false</bool>
+      </property>
+      <property name="rootIsDecorated">
+       <bool>true</bool>
+      </property>
+      <attribute name="headerVisible">
+       <bool>false</bool>
+      </attribute>
+      <attribute name="headerDefaultSectionSize">
+       <number>35</number>
+      </attribute>
+     </widget>
+    </item>
+    <item row="1" column="1">
+     <widget class="QTableView" name="m_eventLog">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="editTriggers">
+       <set>QAbstractItemView::NoEditTriggers</set>
+      </property>
+      <property name="showDropIndicator" stdset="0">
+       <bool>false</bool>
+      </property>
+      <property name="selectionMode">
+       <enum>QAbstractItemView::SingleSelection</enum>
+      </property>
+      <property name="selectionBehavior">
+       <enum>QAbstractItemView::SelectRows</enum>
+      </property>
+      <property name="showGrid">
+       <bool>true</bool>
+      </property>
+      <attribute name="horizontalHeaderHighlightSections">
+       <bool>false</bool>
+      </attribute>
+      <attribute name="horizontalHeaderStretchLastSection">
+       <bool>true</bool>
+      </attribute>
+      <attribute name="verticalHeaderVisible">
+       <bool>false</bool>
+      </attribute>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbException.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbException.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..78ca20eec381c0c066eeaf0a4519ab447ea28d60
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbException.cpp
@@ -0,0 +1,43 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Implementation of ::VmbC::Examples::VmbException
+ */
+
+#include <cassert>
+
+#include "VmbException.h"
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        VmbException::VmbException(std::string const& message, VmbError_t exitCode)
+            : m_exitCode(exitCode),
+            m_errorMessage(message)
+        {
+            assert(exitCode != VmbErrorSuccess);
+        }
+
+        VmbException VmbException::ForOperation(VmbError_t exitCode, std::string const& operation)
+        {
+            return VmbException(operation + " call unsuccessful; exit code " + std::to_string(exitCode), exitCode);
+        }
+    }
+}
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbException.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbException.h
new file mode 100644
index 0000000000000000000000000000000000000000..cb8f058d057435642c3c335bee68325131a6574c
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbException.h
@@ -0,0 +1,73 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of a custom exception type used in this example
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_VMB_EXCEPTION_H
+#define ASYNCHRONOUSGRAB_C_VMB_EXCEPTION_H
+
+#include <exception>
+#include <string>
+
+#include <VmbC/VmbC.h>
+
+namespace VmbC
+{
+    namespace Examples
+    {
+        /**
+         * \brief A custom exception type used in this example
+         */
+        class VmbException : public std::exception
+        {
+        public:
+            VmbException() = default;
+            VmbException(VmbException&&) = default;
+            VmbException& operator=(VmbException&&) = default;
+
+            /**
+             * \brief create an exception with a custom message and a given VmbC error code 
+             */
+            VmbException(std::string const& message, VmbError_t exitCode = VmbErrorOther);
+
+            /**
+             * \brief create an exception with a standardized message for
+             *        failure of a VmbC API function 
+             * \param[in] errorCode the error code returned by the function
+             * \param[in] functionName the name of the function returning the error
+             */
+            static VmbException ForOperation(VmbError_t errorCode, std::string const& functionName);
+
+            const char* what() const noexcept override
+            {
+                return m_errorMessage.c_str();
+            }
+
+            VmbError_t GetExitCode() const noexcept
+            {
+                return m_exitCode;
+            }
+        private:
+            VmbError_t m_exitCode{ VmbErrorSuccess };
+            std::string m_errorMessage;
+        };
+    }
+}
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbLibraryLifetime.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbLibraryLifetime.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0e9365b6dc922248799653ec74a732a2bd2ed357
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbLibraryLifetime.cpp
@@ -0,0 +1,44 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Implementation of ::VmbC::Examples::VmbLibraryLifetime
+ */
+
+#include "VmbException.h"
+#include "VmbLibraryLifetime.h"
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        VmbLibraryLifetime::VmbLibraryLifetime()
+        {
+            VmbError_t startupError = VmbStartup(nullptr);
+            if (startupError != VmbErrorSuccess)
+            {
+                throw VmbException::ForOperation(startupError, "VmbStartup");
+            }
+        }
+
+        VmbLibraryLifetime::~VmbLibraryLifetime()
+        {
+            VmbShutdown();
+        }
+    }
+}
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbLibraryLifetime.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbLibraryLifetime.h
new file mode 100644
index 0000000000000000000000000000000000000000..87b6b8de9d44f1c23432a4ce48c92839a017d23e
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/VmbLibraryLifetime.h
@@ -0,0 +1,50 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of a class responsible for starting/stopping VmbC
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_VMB_LIBRARY_LIFETIME_H
+#define ASYNCHRONOUSGRAB_C_VMB_LIBRARY_LIFETIME_H
+
+namespace VmbC
+{
+    namespace Examples
+    {
+
+        /**
+         * \brief class for managing the initialization and deinitialization of
+         *        the Vmb C library 
+         */
+        class VmbLibraryLifetime
+        {
+        public:
+            VmbLibraryLifetime();
+
+            ~VmbLibraryLifetime();
+
+            VmbLibraryLifetime(VmbLibraryLifetime const&) = delete;
+            VmbLibraryLifetime(VmbLibraryLifetime &&) = delete;
+            VmbLibraryLifetime& operator=(VmbLibraryLifetime const&) = delete;
+            VmbLibraryLifetime& operator=(VmbLibraryLifetime&&) = delete;
+        private:
+        };
+    }
+}
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/imagelabel.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/imagelabel.h
new file mode 100644
index 0000000000000000000000000000000000000000..cc909c753171581bf70461fc114093dd2b3ac74d
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/imagelabel.h
@@ -0,0 +1 @@
+#include "UI/ImageLabel.h"
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/main.cpp b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ac0b9c6cfb5b097bd20a01ff4ed27b350df4643a
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/main.cpp
@@ -0,0 +1,33 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Entry point of the Asynchronous Grab Qt example using the VmbC API
+ */
+
+#include <QApplication>
+#include <QMessageBox>
+
+#include "UI/MainWindow.h"
+
+int main(int argc, char* argv[])
+{
+    QApplication application(argc, argv);
+    MainWindow mainWindow;
+    mainWindow.show();
+    return application.exec();
+}
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/AsynchronousGrabQt/support/NotNull.h b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/support/NotNull.h
new file mode 100644
index 0000000000000000000000000000000000000000..eea679c27db6e3735b95d61d26e6164682701bf4
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/AsynchronousGrabQt/support/NotNull.h
@@ -0,0 +1,98 @@
+/**
+ * \date 2021
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of a wrapper class for pointer indicating non-null values
+ */
+
+#ifndef ASYNCHRONOUSGRAB_C_SUPPORT_NOTNULL_H
+#define ASYNCHRONOUSGRAB_C_SUPPORT_NOTNULL_H
+
+#include <cassert>
+#include <type_traits>
+
+namespace VmbC
+{
+    namespace Examples
+    {
+        inline namespace Support
+        {
+
+            /**
+             * \brief a pointer where 0 is not a valid value
+             * \tparam T the type the pointer points to
+             */
+            template<typename T>
+            class NotNull
+            {
+            public:
+                NotNull(std::nullptr_t) = delete;
+
+                inline NotNull(T* pointer) noexcept
+                    : m_ptr(pointer)
+                {
+                    assert(pointer != nullptr);
+                }
+
+                template<typename U>
+                inline NotNull(NotNull<U> const& other) noexcept
+                    : m_ptr(static_cast<U*>(other))
+                {
+                    static_assert(std::is_assignable<decltype(m_ptr)&, U*>::value, "Incompatible pointer types");
+                }
+
+                template<typename U>
+                NotNull<T>& operator=(NotNull<U> const& other) noexcept
+                {
+                    static_assert(std::is_assignable<decltype(m_ptr)&, U*>::value, "Incompatible pointer types");
+                    m_ptr = static_cast<U*>(other);
+                    return *this;
+                }
+
+                inline NotNull(NotNull<T> const& other) noexcept = default;
+                inline NotNull& operator=(NotNull<T> const& other) noexcept = default;
+
+                NotNull(NotNull<T>&&) = delete;
+                NotNull<T>& operator=(NotNull<T>&&) = delete;
+
+                inline operator T* () const noexcept
+                {
+                    return m_ptr;
+                }
+
+                inline T* operator->() const noexcept
+                {
+                    return m_ptr;
+                }
+
+                inline bool operator==(T* pointer) const noexcept
+                {
+                    return (pointer == m_ptr);
+                }
+
+                inline bool operator!=(T* pointer) const noexcept
+                {
+                    return (pointer != m_ptr);
+                }
+            private:
+                T* m_ptr;
+            };
+        }
+    }
+}
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/CMakeLists.txt b/VimbaX/api/examples/VmbC/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cf78e8944e6c55be9907693d6a3b288f47ccb7d1
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/CMakeLists.txt
@@ -0,0 +1,61 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(VmbCExamples)
+
+set(VMB_C_EXAMPLES_LIST IGNORE CACHE STRING
+    "a semicolon separated list of examples to configure; takes precedence over other settings to enable or disable examples"
+)
+
+set(VMB_C_ALL_EXAMPLES)
+
+# function takes the directory and optionally aliases other than the directory the example can be refered by
+function(vmb_c_example DIRECTORY)
+    if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}")
+        set(VMB_C_EXAMPLE_IGNORE_${DIRECTORY} False CACHE BOOL "Ignore the ${DIRECTORY} example; VMB_C_EXAMPLES_LIST takes precedence over this property")
+        foreach(_ALIAS IN LISTS DIRECTORY ARGN)
+            set(VMB_C_ALIAS_${_ALIAS} ${DIRECTORY} PARENT_SCOPE)
+        endforeach()
+        if (NOT VMB_C_EXAMPLE_IGNORE_${DIRECTORY})
+            set(VMB_C_ALL_EXAMPLES ${VMB_C_ALL_EXAMPLES} ${DIRECTORY} PARENT_SCOPE)
+        endif()
+    endif()
+endfunction()
+
+# attempt to locate Qt to decide, if we want to add the Qt example
+find_package(Qt5 COMPONENTS Widgets)
+
+# Actual examples list
+vmb_c_example(AsynchronousGrab)
+vmb_c_example(ListFeatures FeatureList FeaturesList)
+vmb_c_example(ListCameras)
+vmb_c_example(ChunkAccess)
+vmb_c_example(ConfigIp)
+vmb_c_example(ForceIp)
+
+if(Qt5_FOUND)
+    vmb_c_example(AsynchronousGrabQt Qt)
+endif()
+
+# overwrite list of examples set based on individual ignores
+if(VMB_C_EXAMPLES_LIST)
+    set(VMB_C_ALL_EXAMPLES)
+    foreach(_EXAMPLE IN LISTS VMB_C_EXAMPLES_LIST)
+        set(_DIR ${VMB_C_ALIAS_${_EXAMPLE}})
+        if (NOT _DIR)
+            message(FATAL_ERROR "${_EXAMPLE} found in VMB_C_EXAMPLES_LIST is not a known example")
+        else()
+            set(VMB_C_ALL_EXAMPLES ${VMB_C_ALL_EXAMPLES} ${_DIR})
+        endif()
+    endforeach()
+endif()
+
+# finally add the necessary subdirectories
+list(REMOVE_DUPLICATES VMB_C_ALL_EXAMPLES)
+
+if (NOT VMB_C_ALL_EXAMPLES)
+    message(FATAL_ERROR "no active examples")
+endif()
+
+foreach(_EXAMPLE IN LISTS VMB_C_ALL_EXAMPLES)
+    add_subdirectory(${_EXAMPLE})
+endforeach()
diff --git a/VimbaX/api/examples/VmbC/ChunkAccess/CMakeLists.txt b/VimbaX/api/examples/VmbC/ChunkAccess/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b7714e4052dc56240f3491fa99ba9501fecc1140
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ChunkAccess/CMakeLists.txt
@@ -0,0 +1,33 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(ChunkAccess LANGUAGES C)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS C)
+
+if(NOT TARGET VmbCExamplesCommon)
+    add_subdirectory(../Common VmbCExamplesCommon_build)
+endif()
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(ChunkAccess_VmbC
+    main.c
+    ChunkAccessProg.c
+    ChunkAccessProg.h
+    ${COMMON_SOURCES}
+)
+
+source_group(Common FILES ${COMMON_SOURCES})
+
+target_link_libraries(ChunkAccess_VmbC PRIVATE Vmb::C VmbCExamplesCommon)
+set_target_properties(ChunkAccess_VmbC PROPERTIES
+    C_STANDARD 11
+    VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};$ENV{PATH}"
+)
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/ChunkAccess/ChunkAccessProg.c b/VimbaX/api/examples/VmbC/ChunkAccess/ChunkAccessProg.c
new file mode 100644
index 0000000000000000000000000000000000000000..e68b19ef6c362fe8cea353ff2443f10e3d49657c
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ChunkAccess/ChunkAccessProg.c
@@ -0,0 +1,262 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ChunkAccessProg.c
+
+  Description: The ChunkAccess example will receive chunk data of first camera
+               that is found by VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _WIN32
+    #include <Windows.h>
+#else
+    #include <unistd.h>
+#endif
+
+#include "ChunkAccessProg.h"
+
+#include <VmbCExamplesCommon/ListCameras.h>
+#include <VmbCExamplesCommon/PrintVmbVersion.h>
+
+#include <VmbC/VmbC.h>
+
+#define NUM_FRAMES ((size_t)5)
+
+
+VmbError_t VMB_CALL ChunkCallback(VmbHandle_t featureAccessHandle, void* userContext)
+{
+    VmbError_t err = VmbErrorSuccess;
+    VmbInt64_t id = 0, ts = 0, w = 0, h = 0;
+
+    err = VmbFeatureIntGet(featureAccessHandle, "ChunkWidth", &w);
+
+    err = VmbFeatureIntGet(featureAccessHandle, "ChunkHeight", &h);
+
+    err = VmbFeatureIntGet(featureAccessHandle, "ChunkFrameID", &id);
+
+    err = VmbFeatureIntGet(featureAccessHandle, "ChunkTimestamp", &ts);
+
+    printf("  Chunk Data: id=%2.2lld ts=%lld width=%lld height=%lld\n", id, ts, w, h);
+
+    return err;
+}
+
+
+void VMB_CALL FrameDoneCallback(const VmbHandle_t hCamera, const VmbHandle_t stream, VmbFrame_t* pFrame)
+{
+    VmbError_t err;
+
+    if (VmbFrameStatusComplete == pFrame->receiveStatus)
+    {
+        printf("  Frame Done: id=%2.2lld ts=%lld  complete\n", pFrame->frameID, pFrame->timestamp);
+
+        if (pFrame->chunkDataPresent)
+        {
+            err = VmbChunkDataAccess(pFrame, ChunkCallback, 0);
+        }
+    }
+    else
+    {
+        printf("  Frame Done: id=%2.2lld not successfully received. Error code: %d %s\n", pFrame->frameID, pFrame->receiveStatus, pFrame->receiveStatus == VmbFrameStatusIncomplete ? "(incomplete)" : "");
+    }
+
+    err = VmbCaptureFrameQueue(hCamera, pFrame, FrameDoneCallback);
+}
+
+
+int ChunkAccessProg()
+{
+    VmbError_t err = VmbStartup(NULL);
+    PrintVmbVersion();
+
+    if (err == VmbErrorSuccess)
+    {
+        VmbUint32_t cameraCount = 0;
+        VmbCameraInfo_t* cameras = NULL;
+        VmbCameraInfo_t* camera = NULL;
+        VmbHandle_t hCamera = NULL;
+
+        err = ListCameras(&cameras, &cameraCount);
+        if (err == VmbErrorSuccess)
+        {
+            // use first camera in list
+            camera = cameras + 0;
+
+            err = VmbCameraOpen(camera->cameraIdString, VmbAccessModeFull, &hCamera);
+            if (err == VmbErrorSuccess)
+            {
+                VmbCameraInfo_t cameraInfo;
+                err = VmbCameraInfoQueryByHandle(hCamera, &cameraInfo, sizeof(VmbCameraInfo_t));
+                if (err == VmbErrorSuccess)
+                {
+                    printf(
+                        "Camera id    : %s\n"
+                        "Camera name  : %s\n"
+                        "Model name   : %s\n"
+                        "Serial Number: %s\n\n",
+                        cameraInfo.cameraIdString,
+                        cameraInfo.cameraName,
+                        cameraInfo.modelName,
+                        cameraInfo.serialString);
+
+                    // activate chunk features
+                    err = VmbFeatureBoolSet(hCamera, "ChunkModeActive", VmbBoolFalse);
+                    err = VmbFeatureEnumSet(hCamera, "ChunkSelector", "FrameID");
+                    err = VmbFeatureBoolSet(hCamera, "ChunkEnable", VmbBoolTrue);
+                    err = VmbFeatureEnumSet(hCamera, "ChunkSelector", "Timestamp");
+                    err = VmbFeatureBoolSet(hCamera, "ChunkEnable", VmbBoolTrue);
+                    err = VmbFeatureEnumSet(hCamera, "ChunkSelector", "Width");
+                    err = VmbFeatureBoolSet(hCamera, "ChunkEnable", VmbBoolTrue);
+                    err = VmbFeatureEnumSet(hCamera, "ChunkSelector", "Height");
+                    err = VmbFeatureBoolSet(hCamera, "ChunkEnable", VmbBoolTrue);
+                    err = VmbFeatureBoolSet(hCamera, "ChunkModeActive", VmbBoolTrue);
+
+                    // show camera setup
+                    VmbInt64_t w = -1, h = -1, PLS = 0;
+                    VmbBool_t cma = VmbBoolFalse;
+                    double e = 1000.;
+                    const char* pf;
+                    err = VmbFeatureFloatGet(hCamera, "ExposureTime", &e);
+                    err = VmbFeatureIntGet  (hCamera, "Width", &w);
+                    err = VmbFeatureIntGet  (hCamera, "Height", &h);
+                    err = VmbFeatureEnumGet (hCamera, "PixelFormat", &pf);
+                    err = VmbFeatureBoolGet (hCamera, "ChunkModeActive", &cma);
+                    err = VmbFeatureIntGet  (hCamera, "PayloadSize", &PLS);
+
+                    printf("ExposureTime   : %.0f us\n", e);
+                    printf("PixelFormat    : %s\n", pf);
+                    printf("Width * Height : %lld * %lld\n", w, h);
+                    printf("Payload Size   : %lld byte\n", PLS);
+                    printf("ChunkModeActive: %d\n\n", cma);
+
+                    // Try to execute custom command available to Allied Vision GigE Cameras to ensure the packet size is chosen well
+                    if (VmbErrorSuccess == VmbFeatureCommandRun(cameraInfo.streamHandles[0], "GVSPAdjustPacketSize"))
+                    {
+                        VmbBool_t isCommandDone = VmbBoolFalse;
+                        do
+                        {
+                            if (VmbErrorSuccess != VmbFeatureCommandIsDone(cameraInfo.streamHandles[0],
+                                "GVSPAdjustPacketSize",
+                                &isCommandDone))
+                            {
+                                break;
+                            }
+                        } while (VmbBoolFalse == isCommandDone);
+                        VmbInt64_t packetSize = 0;
+                        VmbFeatureIntGet(cameraInfo.streamHandles[0], "GVSPPacketSize", &packetSize);
+                        printf("GVSPAdjustPacketSize: %lld\n", packetSize);
+                    }
+
+                    // allocate and announce frame buffer
+                    VmbFrame_t frames[NUM_FRAMES];
+                    VmbUint32_t payloadSize = 0;
+                    err = VmbPayloadSizeGet(hCamera, &payloadSize);
+
+                    // Evaluate required alignment for frame buffer in case announce frame method is used
+                    VmbInt64_t nStreamBufferAlignment = 1;  // Required alignment of the frame buffer
+                    if (VmbErrorSuccess != VmbFeatureIntGet(cameraInfo.streamHandles[0], "StreamBufferAlignment", &nStreamBufferAlignment))
+                        nStreamBufferAlignment = 1;
+
+                    if (nStreamBufferAlignment < 1)
+                        nStreamBufferAlignment = 1;
+
+                    for (int i = 0; i < NUM_FRAMES; ++i)
+                    {
+#ifdef _WIN32
+                        frames[i].buffer = (unsigned char*)_aligned_malloc((size_t)payloadSize, (size_t)nStreamBufferAlignment);
+#else
+                        frames[i].buffer = (unsigned char*)aligned_alloc((size_t)nStreamBufferAlignment, (size_t)payloadSize);
+#endif      
+                        frames[i].bufferSize = payloadSize;
+                        err = VmbFrameAnnounce(hCamera, &frames[i], sizeof(VmbFrame_t));
+                    }
+
+                    err = VmbCaptureStart(hCamera);
+
+                    if (err == VmbErrorSuccess)
+                    {
+
+                        // Queue frames and register FrameDoneCallback
+                        for (int i = 0; i < NUM_FRAMES; ++i)
+                        {
+                            err = VmbCaptureFrameQueue(hCamera, &frames[i], FrameDoneCallback);
+                        }
+
+                        // Start acquisition on the camera for 1sec
+                        printf("AcquisitionStart...\n");
+                        err = VmbFeatureCommandRun(hCamera, "AcquisitionStart");
+
+                        printf("Wait 1000ms...\n");
+#ifdef _WIN32
+                        Sleep(1000);
+#else
+                        usleep(100000);
+#endif
+                        // Stop acquisition on the camera
+                        printf("AcquisitionStop...\n");
+                        err = VmbFeatureCommandRun(hCamera, "AcquisitionStop");
+
+                        // Cleanup
+                        printf("VmbCaptureEnd...\n");
+                        err = VmbCaptureEnd(hCamera);
+
+                        printf("VmbCaptureQueueFlush...\n");
+                        err = VmbCaptureQueueFlush(hCamera);
+
+                        printf("VmbFrameRevoke...\n");
+                        for (int i = 0; i < NUM_FRAMES; ++i)
+                        {
+                            err = VmbFrameRevoke(hCamera, frames + i);
+#ifdef _WIN32
+                            _aligned_free(frames[i].buffer);
+#else
+                            free(frames[i].buffer);
+#endif
+                        }
+                    }
+                    else
+                    {
+                        printf("Error %d in VmbCaptureStart\n", err);
+                    }
+
+                    err = VmbCameraClose(hCamera);
+                }
+                else
+                {
+                    printf("Error %d in VmbCameraInfoQueryByHandle\n", err);
+                }
+            }
+            else
+            {
+                printf("Error %d in VmbCameraOpen\n", err);
+            }
+        }
+
+        free(cameras);
+        printf("VmbShutdown...\n");
+        VmbShutdown();
+    }
+
+    return err == VmbErrorSuccess ? 0 : 1;
+}
diff --git a/VimbaX/api/examples/VmbC/ChunkAccess/ChunkAccessProg.h b/VimbaX/api/examples/VmbC/ChunkAccess/ChunkAccessProg.h
new file mode 100644
index 0000000000000000000000000000000000000000..1f543e5fcda5d8bd18d4be8467ddca1b6b8a6137
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ChunkAccess/ChunkAccessProg.h
@@ -0,0 +1,37 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ChunkAccessProg.h
+
+  Description: The ChunkAccess example will receive chunk data of first camera
+               that is found by VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 CHUNK_ACCESS_PROG_H_
+#define CHUNK_ACCESS_PROG_H_
+
+/**
+ * Starts Vmb, get first connected camera, starts acquisition and dumps chunk data
+ */
+int ChunkAccessProg();
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/ChunkAccess/main.c b/VimbaX/api/examples/VmbC/ChunkAccess/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..d6ada1cd615715bbb0907197d4b77778a93fb867
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ChunkAccess/main.c
@@ -0,0 +1,44 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        main.c
+
+  Description: Main entry point of ChunkAccess example of VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <stdio.h>
+
+#include "ChunkAccessProg.h"
+
+int main( int argc, char* argv[] )
+{
+    printf( "////////////////////////////////////\n" );
+    printf( "/// Vmb API Chunk Access Example ///\n" );
+    printf( "////////////////////////////////////\n\n" );
+
+    if ( 1 < argc )
+    {
+        printf( "No parameters expected. Execution will not be affected by the provided parameter(s).\n\n" );
+    }
+    
+    return ChunkAccessProg();
+}
diff --git a/VimbaX/api/examples/VmbC/Common/AccessModeToString.c b/VimbaX/api/examples/VmbC/Common/AccessModeToString.c
new file mode 100644
index 0000000000000000000000000000000000000000..64304271a710c25c95490f564a366d59cd0ee716
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/AccessModeToString.c
@@ -0,0 +1,56 @@
+/*=============================================================================
+  Copyright (C) 2014 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        AccessModeToString.c
+
+  Description: Convert the access modes to a self-explanatory string.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "include/VmbCExamplesCommon/AccessModeToString.h"
+
+const char* AccessModesToString(VmbAccessMode_t eMode)
+{
+    switch (eMode)
+    {
+        case VmbAccessModeFull:
+        {
+            return "Full access";
+        }
+        case VmbAccessModeNone:
+        {
+            return "No access";
+        }
+        case VmbAccessModeRead:
+        {
+            return "Readonly access";
+        }
+        case (VmbAccessModeRead | VmbAccessModeFull):
+        {
+            return "Full access, readonly access";
+        }
+        case VmbAccessModeUnknown:
+        default:
+        {
+            return "Unknown";
+        }
+    }
+}
diff --git a/VimbaX/api/examples/VmbC/Common/CMakeLists.txt b/VimbaX/api/examples/VmbC/Common/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1c4507bd3f42ec4ddb1373750b20a13bbc7ddefa
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/CMakeLists.txt
@@ -0,0 +1,58 @@
+project(ListFeatures LANGUAGES C)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS C ImageTransform)
+
+set(SOURCES)
+set(HEADERS
+    include/VmbCExamplesCommon/ArrayAlloc.h
+)
+
+#OS dependent sources
+foreach(SRC IN ITEMS
+    VmbStdatomic
+    VmbThreads
+)
+    if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}_${CMAKE_SYSTEM_NAME}.c")
+        list(APPEND SOURCES "${SRC}_${CMAKE_SYSTEM_NAME}.c")
+        list(APPEND HEADERS "include/VmbCExamplesCommon/${SRC}_${CMAKE_SYSTEM_NAME}.h")
+    endif()
+
+    list(APPEND HEADERS include/VmbCExamplesCommon/${SRC}.h)
+endforeach()
+
+set(SOURCES_WITH_HEADERS
+    AccessModeToString
+    ErrorCodeToMessage
+    IpAddressToHostByteOrderedInt
+    ListCameras
+    ListInterfaces
+    ListTransportLayers
+    PrintVmbVersion
+    TransportLayerTypeToString
+)
+
+foreach(SRC IN LISTS SOURCES_WITH_HEADERS)
+    list(APPEND SOURCES ${SRC}.c)
+    list(APPEND HEADERS include/VmbCExamplesCommon/${SRC}.h)
+endforeach()
+
+add_library(VmbCExamplesCommon STATIC
+    ${SOURCES}
+    ${HEADERS}
+)
+
+set_target_properties(VmbCExamplesCommon PROPERTIES
+    C_STANDARD 11
+)
+
+target_compile_definitions(VmbCExamplesCommon PRIVATE _LITTLE_ENDIAN)
+
+target_include_directories(VmbCExamplesCommon PUBLIC
+    include
+    $<TARGET_PROPERTY:Vmb::C,INTERFACE_INCLUDE_DIRECTORIES>
+)
diff --git a/VimbaX/api/examples/VmbC/Common/ErrorCodeToMessage.c b/VimbaX/api/examples/VmbC/Common/ErrorCodeToMessage.c
new file mode 100644
index 0000000000000000000000000000000000000000..39a6a9e9ed042cd8f47532ddb4c84d8fb5c8505a
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/ErrorCodeToMessage.c
@@ -0,0 +1,78 @@
+/*=============================================================================
+  Copyright (C) 2014 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ErrorCodeToMessage.c
+
+  Description: Convert the error codes to a self-explanatory message.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "include/VmbCExamplesCommon/ErrorCodeToMessage.h"
+
+const char* ErrorCodeToMessage(VmbError_t eError)
+{
+
+    switch(eError)
+    {
+    case VmbErrorSuccess:                   return "Success.";
+    case VmbErrorInternalFault:             return "Unexpected fault in VmbApi or driver.";
+    case VmbErrorApiNotStarted:             return "API not started.";
+    case VmbErrorNotFound:                  return "Not found.";
+    case VmbErrorBadHandle:                 return "Invalid handle.";
+    case VmbErrorDeviceNotOpen:             return "Device not open.";
+    case VmbErrorInvalidAccess:             return "Invalid access.";
+    case VmbErrorBadParameter:              return "Bad parameter.";
+    case VmbErrorStructSize:                return "Wrong DLL version.";
+    case VmbErrorMoreData:                  return "More data is available.";
+    case VmbErrorWrongType:                 return "Wrong type.";
+    case VmbErrorInvalidValue:              return "Invalid value.";
+    case VmbErrorTimeout:                   return "Timeout.";
+    case VmbErrorOther:                     return "TL error.";
+    case VmbErrorResources:                 return "Resource not available.";
+    case VmbErrorInvalidCall:               return "Invalid call.";
+    case VmbErrorNoTL:                      return "No TL loaded.";
+    case VmbErrorNotImplemented:            return "Not implemented.";
+    case VmbErrorNotSupported:              return "Not supported.";
+    case VmbErrorIncomplete:                return "Operation is not complete.";
+    case VmbErrorIO:                        return "IO error.";
+    case VmbErrorValidValueSetNotPresent:   return "No valid value set available.";
+    case VmbErrorGenTLUnspecified:          return "Unspecified GenTL runtime error.";
+    case VmbErrorUnspecified:               return "Unspecified runtime error.";
+    case VmbErrorBusy:                      return "The responsible module/entity is busy executing actions.";
+    case VmbErrorNoData:                    return "The function has no data to work on.";
+    case VmbErrorParsingChunkData:          return "An error occurred parsing a buffer containing chunk data.";
+    case VmbErrorInUse:                     return "Already in use.";
+    case VmbErrorUnknown:                   return "Unknown error condition.";
+    case VmbErrorXml:                       return "Error parsing xml.";
+    case VmbErrorNotAvailable:              return "Something is not available.";
+    case VmbErrorNotInitialized:            return "Something is not initialized.";
+    case VmbErrorInvalidAddress:            return "The given address is out of range or invalid for internal reasons.";
+    case VmbErrorAlready:                   return "Something has already been done.";
+    case VmbErrorNoChunkData:               return "A frame expected to contain chunk data does not contain chunk data.";
+    case VmbErrorUserCallbackException:     return "A callback provided by the user threw an exception.";
+    case VmbErrorFeaturesUnavailable:       return "Feature unavailable for a module.";
+    case VmbErrorTLNotFound:                return "A required transport layer could not be found or loaded.";
+    case VmbErrorAmbiguous:                 return "Entity cannot be uniquely identified based on the information provided.";
+    case VmbErrorRetriesExceeded:           return "Allowed retries exceeded without successfully completing the operation.";
+    default:                                return eError >= VmbErrorCustom ? "User defined error" : "Unknown";
+    }
+}
+
diff --git a/VimbaX/api/examples/VmbC/Common/IpAddressToHostByteOrderedInt.c b/VimbaX/api/examples/VmbC/Common/IpAddressToHostByteOrderedInt.c
new file mode 100644
index 0000000000000000000000000000000000000000..027f4218a871e06b9f5282fa095d0f79333fbc80
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/IpAddressToHostByteOrderedInt.c
@@ -0,0 +1,51 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        IpAddressToHostByteOrderedInt.c
+
+  Description: Convert a hexadecimal IP address into its decimal representation as integer in host byte order.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <arpa/inet.h>
+#endif
+
+
+unsigned int IpAddressToHostByteOrderedInt(const char* const strIp)
+{
+    unsigned long ip = inet_addr(strIp);
+
+    if (ip == INADDR_NONE)
+    {
+        return INADDR_NONE;
+    }
+
+#ifdef _LITTLE_ENDIAN
+    ip = ntohl(ip);
+#endif
+
+    return ip;
+}
diff --git a/VimbaX/api/examples/VmbC/Common/ListCameras.c b/VimbaX/api/examples/VmbC/Common/ListCameras.c
new file mode 100644
index 0000000000000000000000000000000000000000..db11b6ca80c19e13ebb1b68ddf989a95dff4a08b
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/ListCameras.c
@@ -0,0 +1,78 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListCameras.c
+
+  Description: Get the list of the cameras.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <stdio.h>
+
+#include "include/VmbCExamplesCommon/ListCameras.h"
+
+#include "include/VmbCExamplesCommon/ArrayAlloc.h"
+
+#include <VmbC/VmbC.h>
+
+
+VmbError_t ListCameras(VmbCameraInfo_t** cameras, VmbUint32_t* count)
+{
+    VmbUint32_t camCount = 0;
+    VmbError_t err = VmbCamerasList(NULL, 0, &camCount, sizeof(VmbCameraInfo_t)); // get the number of cameras
+    if (err != VmbErrorSuccess)
+    {
+        return err;
+    }
+
+    if (camCount == 0)
+    {
+        printf("no cameras found\n");
+        return VmbErrorNotFound;
+    }
+
+    VmbCameraInfo_t* res = VMB_MALLOC_ARRAY(VmbCameraInfo_t, camCount); // get the camera info
+    if (res == NULL)
+    {
+        printf("insufficient memory available");
+        return VmbErrorResources;
+    }
+
+    VmbUint32_t countNew = 0;
+    err = VmbCamerasList(res, camCount, &countNew, sizeof(VmbCameraInfo_t));
+    if (err == VmbErrorSuccess || (err == VmbErrorMoreData && camCount < countNew))
+    {
+        if (countNew == 0)
+        {
+            err = VmbErrorNotFound;
+        }
+        else
+        {
+            *cameras = res;
+            *count = countNew > camCount ? camCount : countNew;
+            return VmbErrorSuccess;
+        }
+    }
+
+    free(res);
+
+    return err;
+}
diff --git a/VimbaX/api/examples/VmbC/Common/ListInterfaces.c b/VimbaX/api/examples/VmbC/Common/ListInterfaces.c
new file mode 100644
index 0000000000000000000000000000000000000000..6db52392e83e49d25e2176291820380f4ded0586
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/ListInterfaces.c
@@ -0,0 +1,77 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListInterfaces.c
+
+  Description: Get the list of the interfaces.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <stdio.h>
+
+#include "include/VmbCExamplesCommon/ListInterfaces.h"
+
+#include "include/VmbCExamplesCommon/ArrayAlloc.h"
+
+#include <VmbC/VmbC.h>
+
+
+VmbError_t ListInterfaces(VmbInterfaceInfo_t** interfaces, VmbUint32_t* count)
+{
+    VmbUint32_t interfaceCount = 0;
+    VmbError_t err = VmbInterfacesList(NULL, 0, &interfaceCount, sizeof(VmbInterfaceInfo_t)); // get the number of interfaces
+    if (err != VmbErrorSuccess)
+    {
+        return err;
+    }
+    if (interfaceCount == 0)
+    {
+        printf("no interfaces found\n");
+        return VmbErrorNotFound;
+    }
+
+    VmbInterfaceInfo_t* res = VMB_MALLOC_ARRAY(VmbInterfaceInfo_t, interfaceCount); // get the interface info
+    if (res == NULL)
+    {
+        printf("insufficient memory available");
+        return VmbErrorResources;
+    }
+
+    VmbUint32_t countNew = 0;
+    err = VmbInterfacesList(res, interfaceCount, &countNew, sizeof(VmbInterfaceInfo_t));
+    if (err == VmbErrorSuccess || (err == VmbErrorMoreData && countNew > interfaceCount))
+    {
+        if (countNew == 0)
+        {
+            err = VmbErrorNotFound;
+        }
+        else
+        {
+            *interfaces = res;
+            *count = countNew > interfaceCount ? interfaceCount : countNew;
+            return VmbErrorSuccess;
+        }
+    }
+
+    free(res);
+
+    return err;
+}
diff --git a/VimbaX/api/examples/VmbC/Common/ListTransportLayers.c b/VimbaX/api/examples/VmbC/Common/ListTransportLayers.c
new file mode 100644
index 0000000000000000000000000000000000000000..ba5de5bf5c7e592466f0ceca49b93e942f88146f
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/ListTransportLayers.c
@@ -0,0 +1,77 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListTransportLayers.c
+
+  Description: Get a list of the transport layers.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <stdio.h>
+
+#include "include/VmbCExamplesCommon/ListTransportLayers.h"
+
+#include "include/VmbCExamplesCommon/ArrayAlloc.h"
+
+#include <VmbC/VmbC.h>
+
+
+VmbError_t ListTransportLayers(VmbTransportLayerInfo_t** transportLayers, VmbUint32_t* count)
+{
+    VmbUint32_t tlCount = 0;
+    VmbError_t err = VmbTransportLayersList(NULL, 0, &tlCount, sizeof(VmbTransportLayerInfo_t)); // get the number of transport layers
+    if (err != VmbErrorSuccess)
+    {
+        return err;
+    }
+    if (tlCount == 0)
+    {
+        printf("no cameras found\n");
+        return VmbErrorNotFound;
+    }
+
+    VmbTransportLayerInfo_t* res = VMB_MALLOC_ARRAY(VmbTransportLayerInfo_t, tlCount); // get the transport layer info
+    if (res == NULL)
+    {
+        printf("insufficient memory available");
+        return VmbErrorResources;
+    }
+
+    VmbUint32_t countNew = 0;
+    err = VmbTransportLayersList(res, tlCount, &countNew, sizeof(VmbTransportLayerInfo_t));
+    if (err == VmbErrorSuccess || (err == VmbErrorMoreData && tlCount < countNew))
+    {
+        if (countNew == 0)
+        {
+            err = VmbErrorNotFound;
+        }
+        else
+        {
+            *transportLayers = res;
+            *count = tlCount < countNew ? tlCount : countNew;
+            return VmbErrorSuccess;
+        }
+    }
+
+    free(res);
+
+    return err;
+}
diff --git a/VimbaX/api/examples/VmbC/Common/PrintVmbVersion.c b/VimbaX/api/examples/VmbC/Common/PrintVmbVersion.c
new file mode 100644
index 0000000000000000000000000000000000000000..267cc45d5c86fac48582f8d73689f5eec41c1a8d
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/PrintVmbVersion.c
@@ -0,0 +1,50 @@
+/*=============================================================================
+  Copyright (C) 2014 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        PrintVmbVersion.h
+
+  Description: Print Vmb version.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "include/VmbCExamplesCommon/PrintVmbVersion.h"
+
+#include "include/VmbCExamplesCommon/ErrorCodeToMessage.h"
+
+#include <stdio.h>
+
+#include <VmbC/VmbC.h>
+
+void PrintVmbVersion()
+{
+    VmbVersionInfo_t    versionInfo;
+    VmbError_t          result = VmbVersionQuery(&versionInfo, sizeof(versionInfo));
+    if(VmbErrorSuccess == result)
+    {
+        printf("Vmb Version Major: %u Minor: %u Patch: %u\n\n", versionInfo.major, versionInfo.minor, versionInfo.patch);
+    }
+    else
+    {
+        printf("VmbVersionQuery failed with reason: %s\n\n", ErrorCodeToMessage(result));
+    }
+}
+
+
diff --git a/VimbaX/api/examples/VmbC/Common/TransportLayerTypeToString.c b/VimbaX/api/examples/VmbC/Common/TransportLayerTypeToString.c
new file mode 100644
index 0000000000000000000000000000000000000000..919d264feccca795586061987f695648d2f05e22
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/TransportLayerTypeToString.c
@@ -0,0 +1,60 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        TransportLayerTypeToString.c
+
+  Description: Convert VmbTransportLayerType_t to string.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "include/VmbCExamplesCommon/TransportLayerTypeToString.h"
+
+
+char const* TransportLayerTypeToString(VmbTransportLayerType_t tlType)
+{
+    switch (tlType)
+    {
+    case VmbTransportLayerTypeCL:
+        return "Camera Link";
+    case VmbTransportLayerTypeCLHS:
+        return "Camera Link HS";
+    case VmbTransportLayerTypeCustom:
+        return "Custom";
+    case VmbTransportLayerTypeCXP:
+        return "CoaXPress";
+    case VmbTransportLayerTypeEthernet:
+        return "Generic Ethernet";
+    case VmbTransportLayerTypeGEV:
+        return "GigE Vision";
+    case VmbTransportLayerTypeIIDC:
+        return "IIDC 1394";
+    case VmbTransportLayerTypeMixed:
+        return "Mixed";
+    case VmbTransportLayerTypePCI:
+        return "PCI / PCIe";
+    case VmbTransportLayerTypeU3V:
+        return "USB 3 Vision";
+    case VmbTransportLayerTypeUVC:
+        return "USB video class";
+    default:
+        return "[Unknown]";
+    }
+}
diff --git a/VimbaX/api/examples/VmbC/Common/VmbStdatomic_Windows.c b/VimbaX/api/examples/VmbC/Common/VmbStdatomic_Windows.c
new file mode 100644
index 0000000000000000000000000000000000000000..3ccd867fb6b7e685d8424baddcaae086b210948a
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/VmbStdatomic_Windows.c
@@ -0,0 +1,43 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbStdatomic_Windows.h
+
+  Description: Provide functionality that should be provided by <stdatomic.h>
+               for systems that don't provide this functionality.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "include/VmbCExamplesCommon/VmbStdatomic.h"
+
+#ifdef __STDC_NO_ATOMICS__
+
+_Bool atomic_flag_test_and_set(volatile atomic_flag* obj)
+{
+    return InterlockedExchange(&obj->value, (LONG)true);
+}
+
+void atomic_flag_clear(volatile atomic_flag* obj)
+{
+    InterlockedExchange(&obj->value, (LONG)false);
+}
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/VmbThreads_Linux.c b/VimbaX/api/examples/VmbC/Common/VmbThreads_Linux.c
new file mode 100644
index 0000000000000000000000000000000000000000..00c77fb91e6a351aaffacf6e9b6ddbfd8a39bb0d
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/VmbThreads_Linux.c
@@ -0,0 +1,101 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbThreads_Linux.h
+
+  Description: Provide functionality that should be provided by <threads.h>
+               for systems that don't provide this functionality.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "include/VmbCExamplesCommon/VmbThreads.h"
+
+#ifdef __STDC_NO_THREADS__
+
+int mtx_init(mtx_t* mutex, int type)
+{
+    if (mutex == NULL)
+    {
+        return thrd_error;
+    }
+
+    int pthreadMutexType;
+    switch (type)
+    {
+    case mtx_plain:
+        pthreadMutexType = PTHREAD_MUTEX_NORMAL;
+        break;
+    case mtx_recursive:
+        pthreadMutexType = PTHREAD_MUTEX_RECURSIVE;
+        break;
+    default: // other types not implemented
+        return thrd_error;
+    }
+
+    pthread_mutexattr_t mutexAttributes;
+    int result = thrd_error;
+    if (!pthread_mutexattr_init(&mutexAttributes))
+    {
+        if(!pthread_mutexattr_settype(&mutexAttributes, pthreadMutexType))
+        {
+            if (!pthread_mutex_init(&mutex->mutex, &mutexAttributes))
+            {
+                result = thrd_success;
+            }
+        }
+        pthread_mutexattr_destroy(&mutexAttributes);
+    }
+    return result;
+}
+
+int mtx_lock(mtx_t* mutex)
+{
+    if (mutex != NULL)
+    {
+        if (!pthread_mutex_lock(&mutex->mutex))
+        {
+            return thrd_success;
+        }
+    }
+    return thrd_error;
+}
+
+int mtx_unlock(mtx_t* mutex)
+{
+    if (mutex != NULL)
+    {
+        if(!pthread_mutex_unlock(&mutex->mutex))
+        {
+            return thrd_success;
+        }
+    }
+    return thrd_error;
+}
+
+void mtx_destroy(mtx_t* mutex)
+{
+    if (mutex != NULL)
+    {
+        pthread_mutex_destroy(&mutex->mutex);
+    }
+}
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/Common/VmbThreads_Windows.c b/VimbaX/api/examples/VmbC/Common/VmbThreads_Windows.c
new file mode 100644
index 0000000000000000000000000000000000000000..6c77698e70c6c4aca1cfcb8ea6f951ba34a13691
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/VmbThreads_Windows.c
@@ -0,0 +1,89 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbThreads.h
+
+  Description: Provide functionality that should be provided by <threads.h>
+               for systems that don't provide this functionality.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "include/VmbCExamplesCommon/VmbThreads.h"
+
+#ifdef __STDC_NO_THREADS__
+
+int mtx_init(mtx_t* mutex, int type)
+{
+    if (mutex == NULL)
+    {
+        return thrd_error;
+    }
+    switch (type)
+    {
+    case mtx_plain:
+    case mtx_recursive:
+    {
+        HANDLE h = CreateMutex(NULL, FALSE, NULL);
+        if (h != NULL)
+        {
+            mutex->handle = h;
+            return thrd_success;
+        }
+        break;
+    }
+    // other mutex types not implemented yet
+    }
+    return thrd_error;
+}
+
+int mtx_lock(mtx_t* mutex)
+{
+    if (mutex != NULL)
+    {
+        if (WAIT_OBJECT_0 == WaitForSingleObject(mutex->handle, INFINITE))
+        {
+            return thrd_success;
+        }
+    }
+    return thrd_error;
+}
+
+int mtx_unlock(mtx_t* mutex)
+{
+    if (mutex != NULL)
+    {
+        if (ReleaseMutex(mutex->handle))
+        {
+            return thrd_success;
+        }
+    }
+    return thrd_error;
+}
+
+void mtx_destroy(mtx_t* mutex)
+{
+    if (mutex != NULL)
+    {
+        CloseHandle(mutex->handle);
+    }
+}
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/AccessModeToString.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/AccessModeToString.h
new file mode 100644
index 0000000000000000000000000000000000000000..770432ca0fd5733d0079749a94f84cd568280d21
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/AccessModeToString.h
@@ -0,0 +1,42 @@
+/*=============================================================================
+  Copyright (C) 2014 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        AccessModeToString.h
+
+  Description: Convert the access modes to a self-explanatory string.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 ACCESS_MODE_TO_STRING_H_
+#define ACCESS_MODE_TO_STRING_H_
+    
+#include <VmbC/VmbCTypeDefinitions.h>
+
+/**
+ * \brief Translates Vmb access modes to a readable string
+ * 
+ * \param[in] eMode The access mode to be converted to string
+ * 
+ * \return A descriptive string representation of the access mode
+ */
+const char* AccessModesToString( VmbAccessMode_t eMode );
+
+#endif // ACCESS_MODE_TO_STRING_H_
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ArrayAlloc.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ArrayAlloc.h
new file mode 100644
index 0000000000000000000000000000000000000000..375e6f8ba214e81a4628b71b7925784051f5ac08
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ArrayAlloc.h
@@ -0,0 +1,43 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ArrayAlloc.h
+
+  Description: Define a macro for allocating an array.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 ARRAY_ALLOC_H_
+#define ARRAY_ALLOC_H_
+
+#include <stdlib.h>
+
+#ifndef NULL
+    #define NULL 0
+#endif
+
+
+/**
+ * \brief uses malloc to allocate memory for an array of \p size elements of type \p type
+ */
+#define VMB_MALLOC_ARRAY(type, size) ((type*) malloc(size * sizeof(type)))
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ErrorCodeToMessage.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ErrorCodeToMessage.h
new file mode 100644
index 0000000000000000000000000000000000000000..28b95a3cd62929bb736e5dc5b69332cb731923db
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ErrorCodeToMessage.h
@@ -0,0 +1,42 @@
+/*=============================================================================
+  Copyright (C) 2014 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ErrorCodeToMessage.h
+
+  Description: Convert the error codes to a self-explanatory message.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 ERROR_CODE_TO_MESSAGE_H_
+#define ERROR_CODE_TO_MESSAGE_H_
+    
+#include <VmbC/VmbCommonTypes.h>
+
+/**
+ * \brief Translates Vmb error codes to readable error messages
+ * 
+ * \param[in] eError    The error code to be converted to string
+ * 
+ * \return A descriptive string representation of the error code
+ */
+const char* ErrorCodeToMessage( VmbError_t eError );
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/IpAddressToHostByteOrderedInt.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/IpAddressToHostByteOrderedInt.h
new file mode 100644
index 0000000000000000000000000000000000000000..6a674f03af70a72d3057fc82330ad200c00d8f0b
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/IpAddressToHostByteOrderedInt.h
@@ -0,0 +1,39 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        IpAddressToHostByteOrderedInt.h
+
+  Description: Convert a hexadecimal IP address into its decimal representation as integer in host byte order.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 IP_ADDRESS_TO_HOST_BYTE_ORDERED_INT_H_
+#define IP_ADDRESS_TO_HOST_BYTE_ORDERED_INT_H_
+
+/**
+ * \brief Converts a hexadecimal IP address into its decimal representation.
+ * \param[in] strIp    The string representation of the IP
+ *
+ * \return INADDR_NONE in case of error otherwise the decimal representation of the IP address as integer in host byte order
+*/
+unsigned int IpAddressToHostByteOrderedInt(const char* const strIp);
+
+#endif // IP_ADDRESS_TO_HOST_BYTE_ORDERED_INT_H_
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ListCameras.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ListCameras.h
new file mode 100644
index 0000000000000000000000000000000000000000..453ceedef7f1a9e794d309739e7ceee7aa7db477
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ListCameras.h
@@ -0,0 +1,41 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListCameras.h
+
+  Description: Get the list of the cameras.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 LIST_CAMERAS_H_
+#define LIST_CAMERAS_H_
+    
+#include <VmbC/VmbCTypeDefinitions.h>
+
+/**
+ * \brief Get a list of cameras
+ * 
+ * \param[out] cameras an array of cameras allocated using malloc
+ * \param[out] count the number of cameras; instead of assigning 0 ::VmbErrorNotFound is returned
+ */
+VmbError_t ListCameras(VmbCameraInfo_t** cameras, VmbUint32_t* count);
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ListInterfaces.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ListInterfaces.h
new file mode 100644
index 0000000000000000000000000000000000000000..cafe05cc6c06cb2ffa9d2f697cfb98aa0d962c95
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ListInterfaces.h
@@ -0,0 +1,41 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListInterfaces.h
+
+  Description: Get the list of the interfaces.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 LIST_INTERFACES_H_
+#define LIST_INTERFACES_H_
+    
+#include <VmbC/VmbCTypeDefinitions.h>
+
+/**
+ * \brief Get the list of interfaces
+ * 
+ * \param[out] interfaces an array of interfaces allocated using malloc
+ * \param[out] count the number of interfaces; instead of assigning 0 ::VmbErrorNotFound is returned
+ */
+VmbError_t ListInterfaces(VmbInterfaceInfo_t** interfaces, VmbUint32_t* count);
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ListTransportLayers.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ListTransportLayers.h
new file mode 100644
index 0000000000000000000000000000000000000000..fc4db5e1b80386af5acb7cb38317e467284c007e
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/ListTransportLayers.h
@@ -0,0 +1,41 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListTransportLayers.h
+
+  Description: Get a list of the transport layers.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 LIST_TRANSPORT_LAYERS_H_
+#define LIST_TRANSPORT_LAYERS_H_
+    
+#include <VmbC/VmbCTypeDefinitions.h>
+
+/**
+ * \brief get a list of transport layers
+ * 
+ * \param[out] transportLayers an array of transport layers allocated using malloc
+ * \param[out] count the number of transport layers; instead of assigning 0 ::VmbErrorNotFound is returned
+ */
+VmbError_t ListTransportLayers(VmbTransportLayerInfo_t** transportLayers, VmbUint32_t* count);
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/PrintVmbVersion.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/PrintVmbVersion.h
new file mode 100644
index 0000000000000000000000000000000000000000..3dbf3cbef00a6fd809426a996a9a924118e9a841
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/PrintVmbVersion.h
@@ -0,0 +1,36 @@
+/*=============================================================================
+  Copyright (C) 2014 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        PrintVmbVersion.h
+
+  Description: Print Vmb version.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 PRINT_VMB_VERSION_H_
+#define PRINT_VMB_VERSION_H_
+
+/**
+ * \brief Prints out the version of the Vmb API
+ */
+void PrintVmbVersion();
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/TransportLayerTypeToString.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/TransportLayerTypeToString.h
new file mode 100644
index 0000000000000000000000000000000000000000..ed9fec0df14d4af90964cddb4ed898bd87237630
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/TransportLayerTypeToString.h
@@ -0,0 +1,38 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        TransportLayerTypeToString.h
+
+  Description: Convert VmbTransportLayerType_t to string.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 TRANSPORT_LAYER_TYPE_TO_STRING_H_
+#define TRANSPORT_LAYER_TYPE_TO_STRING_H_
+    
+#include <VmbC/VmbCTypeDefinitions.h>
+
+/**
+ * \brief convert the transport layer type enum constant to a human readable string
+ */
+char const* TransportLayerTypeToString(VmbTransportLayerType_t tlType);
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbStdatomic.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbStdatomic.h
new file mode 100644
index 0000000000000000000000000000000000000000..5a3a8fcac8cc765937dd73da79da73e9764e2516
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbStdatomic.h
@@ -0,0 +1,52 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbStdatomic.h
+
+  Description: Provide functionality that should be provided by <stdatomic.h>
+               for systems that don't provide this functionality.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMB_STDATOMIC_H_
+#define VMB_STDATOMIC_H_
+
+#if defined(_MSC_VER) && !defined(__STDC_NO_ATOMICS__) // <stdatomic.h> only provided by MSVC if /std:c11 or higher is set (added in MSVC 1928)
+#   define __STDC_NO_ATOMICS__
+#endif
+
+#ifdef __STDC_NO_ATOMICS__
+#ifdef _WIN32
+#   include "VmbStdatomic_Windows.h"
+#else
+#   error Functionality not implemented on the current system
+#endif
+    struct atomic_flag;
+    typedef struct atomic_flag atomic_flag;
+
+    _Bool atomic_flag_test_and_set(volatile atomic_flag* obj);
+
+    void atomic_flag_clear(volatile atomic_flag* obj);
+#else
+#   include <stdatomic.h>
+#endif
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbStdatomic_Windows.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbStdatomic_Windows.h
new file mode 100644
index 0000000000000000000000000000000000000000..5edbdc7fa58e192911dd820c66fb7d9745823850
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbStdatomic_Windows.h
@@ -0,0 +1,43 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbStdatomic_Windows.h
+
+  Description: Provide functionality that should be provided by <stdatomic.h>
+               for systems that don't provide this functionality.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMB_STDATOMIC_WINDOWS_H_
+#define VMB_STDATOMIC_WINDOWS_H_
+
+#include <stdbool.h>
+
+#include <Windows.h>
+
+struct atomic_flag
+{
+    LONG value;
+};
+
+#define ATOMIC_FLAG_INIT {.value=false}
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbThreads.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbThreads.h
new file mode 100644
index 0000000000000000000000000000000000000000..20dcb5280da28387159628eb30471882a1c10d3f
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbThreads.h
@@ -0,0 +1,57 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbThreads.h
+
+  Description: Provide functionality that should be provided by <threads.h>
+               for systems that don't provide this functionality.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMB_THREADS_H_
+#define VMB_THREADS_H_
+
+#if defined(_MSC_VER) && !defined(__STDC_NO_THREADS__) // <threads.h> only provided by MSVC if /std:c11 or higher is set (added in MSVC 1928)
+#   define __STDC_NO_THREADS__
+#endif
+
+#ifdef __STDC_NO_THREADS__
+#ifdef _WIN32
+#   include "VmbThreads_Windows.h"
+#else
+#   ifdef __linux__
+#   include "VmbThreads_Linux.h"
+#   else
+#       error Functionality not implemented on the current system
+#   endif
+#endif
+    int mtx_init(mtx_t* mutex, int type);
+
+    int mtx_lock(mtx_t* mutex);
+
+    int mtx_unlock(mtx_t* mutex);
+
+    void mtx_destroy(mtx_t* mutex);
+#else
+#   include <threads.h>
+#endif
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbThreads_Linux.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbThreads_Linux.h
new file mode 100644
index 0000000000000000000000000000000000000000..3b1dbdc94d2118a1126c4fa19d2dd35e017f87ee
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbThreads_Linux.h
@@ -0,0 +1,56 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbThreads_Linux.h
+
+  Description: Provide functionality that should be provided by <threads.h>
+               for systems that don't provide this functionality.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMB_THREADS_LINUX_H_
+#define VMB_THREADS_LINUX_H_
+
+#include <pthread.h>
+
+enum
+{
+    thrd_success = 0,
+    thrd_nomem,
+    thrd_timedout,
+    thrd_busy,
+    thrd_error
+};
+
+enum
+{
+    mtx_plain = 0,
+    mtx_recursive = 1,
+    mtx_timed = 2
+};
+
+typedef struct VmbMtx
+{
+    pthread_mutex_t mutex;
+} mtx_t;
+
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbThreads_Windows.h b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbThreads_Windows.h
new file mode 100644
index 0000000000000000000000000000000000000000..22e86639595f1175ba6eac1d6f2d0972839a595d
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/Common/include/VmbCExamplesCommon/VmbThreads_Windows.h
@@ -0,0 +1,56 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbThreads.h
+
+  Description: Provide functionality that should be provided by <threads.h>
+               for systems that don't provide this functionality.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMB_THREADS_WINDOWS_H_
+#define VMB_THREADS_WINDOWS_H_
+
+#include <Windows.h>
+
+enum
+{
+    thrd_success = ERROR_SUCCESS,
+    thrd_nomem,
+    thrd_timedout,
+    thrd_busy,
+    thrd_error
+};
+
+enum
+{
+    mtx_plain,
+    mtx_recursive,
+    mtx_timed
+};
+
+typedef struct VmbMtx
+{
+    HANDLE handle;
+} mtx_t;
+
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbC/ConfigIp/CMakeLists.txt b/VimbaX/api/examples/VmbC/ConfigIp/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2158211d79a6105b72bea1b44d6dc78c10b9626a
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ConfigIp/CMakeLists.txt
@@ -0,0 +1,42 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(ConfigIp LANGUAGES C)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS C)
+
+if(NOT TARGET VmbCExamplesCommon)
+    add_subdirectory(../Common VmbCExamplesCommon_build)
+endif()
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(ConfigIp_VmbC
+    main.c
+    ConfigIp.c
+    ConfigIp.h
+    ConfigIpProg.c
+    ConfigIpProg.h
+    ${COMMON_SOURCES}
+)
+
+source_group(Common FILES ${COMMON_SOURCES})
+
+target_compile_definitions(ConfigIp_VmbC PRIVATE _LITTLE_ENDIAN)
+
+target_link_libraries(ConfigIp_VmbC PRIVATE Vmb::C VmbCExamplesCommon)
+
+if (WIN32)
+    target_link_libraries(ConfigIp_VmbC PRIVATE Ws2_32)
+endif()
+
+set_target_properties(ConfigIp_VmbC PROPERTIES
+    C_STANDARD 11
+    VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};$ENV{PATH}"
+)
diff --git a/VimbaX/api/examples/VmbC/ConfigIp/ConfigIp.c b/VimbaX/api/examples/VmbC/ConfigIp/ConfigIp.c
new file mode 100644
index 0000000000000000000000000000000000000000..4072c74e50c95f28582fc5b057d90b6074898591
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ConfigIp/ConfigIp.c
@@ -0,0 +1,487 @@
+/**
+ * \date 2022
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of the function which implements the IP configuration
+ */
+
+#define _CRT_SECURE_NO_WARNINGS // disable sscanf warning for Windows
+
+#include "ConfigIpProg.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <arpa/inet.h>
+#include <time.h>
+#endif
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCExamplesCommon/AccessModeToString.h>
+#include <VmbCExamplesCommon/ErrorCodeToMessage.h>
+#include <VmbCExamplesCommon/ListCameras.h>
+#include <VmbCExamplesCommon/IpAddressToHostByteOrderedInt.h>
+
+
+
+/*
+ * Macros used to control the print out of the progress and upcoming errors.
+ * Define _VMB_CONFIG_IP_NO_PRINT to disable the print out
+ */
+#ifdef _VMB_CONFIG_IP_NO_PRINT
+    #define VMB_PRINT(text, ...)
+#else
+    #define VMB_PRINT(...) printf(__VA_ARGS__)
+#endif
+
+
+
+ /*
+  * Helper macros used for cleaner error handling
+  */
+#define _ON_ERROR(op, onError)  {\
+                                    VmbError_t error = op; \
+                                    if(error != VmbErrorSuccess) \
+                                    { \
+                                        onError; \
+                                    } \
+                                }
+
+#define _ON_ERROR_WITH_PRINT(op, onError) _ON_ERROR(op, VMB_PRINT("%s failed. %s Error code: %d.\n", #op, ErrorCodeToMessage(error), error); onError)
+
+#define RETURN_ON_ERROR(op)                             _ON_ERROR(op, return error;)
+#define CONTINUE_ON_ERROR(op)                           _ON_ERROR(op, continue;)
+
+#define RETURN_SPECIFIC_AND_PRINT_ON_ERROR(op, retVal)  _ON_ERROR_WITH_PRINT(op, return retVal;)
+#define RETURN_AND_PRINT_ON_ERROR(op)                   _ON_ERROR_WITH_PRINT(op, return error;)
+
+#define CONTINUE_AND_PRINT_ON_ERROR(op)                 _ON_ERROR_WITH_PRINT(op, continue;)
+#define BREAK_AND_PRINT_ON_ERROR(op)                    _ON_ERROR_WITH_PRINT(op, break;)
+
+/*
+ * Helper structs
+ */
+
+/**
+ * \brief Helper struct used to store information about an opened camera
+ */
+typedef struct CameraOpenResult
+{
+    VmbError_t      error;          //!< Error code representing the success of the operation
+    VmbHandle_t     cameraHandle;   //!< Handle of the opened camera
+} CameraOpenResult;
+
+/*
+ * Helper functions
+ */
+
+ /**
+  * \brief Writes the desired persistent IP configuration. The new configuration will be retained and applied after a power-cycle of the camera.
+ *         Assumes that the VmbC API is already started.
+  *
+  * \param[in] cameraHandle The handle of the desired camera
+  * \param[in] ip           The desired IP address
+  * \param[in] subnetMask   The desired subnet mask
+  * \param[in] gateway      The desired gateway
+  *
+  * \return Result of the operation
+ */
+VmbError_t SetPersistentIp(const VmbHandle_t cameraHandle, const char* const ip, const char* const subnet, const char* const gateway);
+
+/**
+ * \brief Writes the DHCP IP configuration. The new configuration will be retained and applied after a power-cycle of the camera.
+ *
+ * \param[in] cameraHandle The handle of the desired camera
+  *
+  * \return Result of the operation
+ */
+VmbError_t SetDhcp(const VmbHandle_t cameraHandle);
+
+/**
+ * \brief Writes the LLA IP configuration. The new configuration will be retained and applied after a power-cycle of the camera.
+ *
+ * \param[in] cameraHandle The handle of the desired camera
+  *
+  * \return Result of the operation
+ */
+VmbError_t SetLla(const VmbHandle_t cameraHandle);
+
+/**
+ * \brief Open a camera using the given camera id
+ *
+ * \param[in] cameraId The desired camera id
+ *
+ * \return Information collected during opening
+*/
+CameraOpenResult OpenCamera(const char* const cameraId);
+
+/**
+ * \brief Writes the desired IP configuration. The new configuration will be retained and applied after a power-cycle of the camera.
+ *
+ * \param[in] cameraHandle The handle of the desired camera
+ * \param[in] ip           The desired IP address in host byte order
+ * \param[in] subnetMask   The desired subnet mask in host byte order
+ * \param[in] gateway      The desired gateway in host byte order
+ *
+ * \return Result of the operation
+*/
+VmbError_t WritePersistentIp(const VmbHandle_t cameraHandle, const VmbInt64_t ip, const VmbInt64_t subnetMask, const VmbInt64_t gateway);
+
+/**
+ * \brief Writes the desired IP configuration using standard features from the SFNC. The new configuration will be retained and applied after a power-cycle of the camera.
+ *
+ * \param[in] cameraHandle The handle of the desired camera
+ * \param[in] ip           The desired IP address in host byte order
+ * \param[in] subnetMask   The desired subnet mask in host byte order
+ * \param[in] gateway      The desired gateway in host byte order
+ *
+ * \return Result of the operation
+*/
+VmbError_t WritePersistentIpFeatures(const VmbHandle_t cameraHandle, const VmbInt64_t ip, const VmbInt64_t subnetMask, const VmbInt64_t gateway);
+
+/**
+ * \brief Writes the desired IP configuration using standard camera registers. The new configuration will be retained and applied after a power-cycle of the camera.
+ *
+ * \param[in] cameraHandle The handle of the desired camera
+ * \param[in] ip           The desired IP address in host byte order
+ * \param[in] subnetMask   The desired subnet mask in host byte order
+ * \param[in] gateway      The desired gateway in host byte order
+ *
+ * \return Result of the operation
+*/
+VmbError_t WritePersistentIpRegisters(const VmbHandle_t cameraHandle, const VmbUint32_t ip, const VmbUint32_t subnetMask, const VmbUint32_t gateway);
+
+/**
+ * \brief Writes data to a standard camera register
+ *
+ * \param[in] cameraHandle The handle of the camera whose register shall be written to
+ * \param[in] address      The address of the register to write to
+ * \param[in] data         The data to write to the register
+ *
+ * \return Result of the operation
+*/
+VmbError_t WriteRegister(const VmbHandle_t cameraHandle, const VmbUint64_t address, VmbUint32_t data);
+
+/**
+ * \brief Write an interface configuration to the interface configuration register
+ *
+ * \param[in] cameraHandle                    The handle of the camera whose interface configuration register shall be written to
+ * \param[in] SetInterfaceConfigRegisterValue A pointer to a function which is given write access to a host-byte-ordered copy of the current configuration data as a parameter,
+ *                                            i.e. this function's implementation defines the new configuration to be written
+ *
+ * \return Result of the operation
+*/
+VmbError_t WriteInterfaceConfigRegister(const VmbHandle_t cameraHandle, void (*SetInterfaceConfigRegisterValue) (VmbUint32_t* const));
+
+/**
+ * \brief Modifies an interface configuration to enable persistent IP, for passing to WriteInterfaceConfigRegister()
+ *
+ * \param[in,out] interfaceConfiguration A pointer to the configuration data in host-byte-order
+ *
+ * \return Nothing
+*/
+void SetInterfaceConfigRegisterValue_PersistentIpConfig(VmbUint32_t* const interfaceConfiguration);
+
+/**
+ * \brief Modifies an interface configuration to enable DHCP, for passing to WriteInterfaceConfigRegister()
+ *
+ * \param[in,out] interfaceConfiguration A pointer to the configuration data in host-byte-order
+ *
+ * \return Nothing
+*/
+void SetInterfaceConfigRegisterValue_DhcpIpConfig(VmbUint32_t* const interfaceConfiguration);
+
+/**
+ * \brief Modifies an interface configuration to enable LLA, for passing to WriteInterfaceConfigRegister()
+ *
+ * \param[in,out] interfaceConfiguration A pointer to the configuration data in host-byte-order
+ *
+ * \return Nothing
+*/
+void SetInterfaceConfigRegisterValue_LlaIpConfig(VmbUint32_t* const interfaceConfiguration);
+
+
+/*
+ * ConfigIp implementation
+ */
+
+VmbError_t ConfigIp(const char* const cameraId, const char* const ip, const char* const subnet, const char* const gateway)
+{
+    /*
+     * Open the camera using the desired camera id.
+     */
+    const CameraOpenResult openedCamera = OpenCamera(cameraId);
+    RETURN_ON_ERROR(openedCamera.error);
+
+    VmbError_t configIpError = VmbErrorUnknown;
+
+    if (openedCamera.cameraHandle)
+    {
+        if (ip != NULL && subnet != NULL)
+        {
+            configIpError = SetPersistentIp(openedCamera.cameraHandle, ip, subnet, gateway);
+        }
+        else if (ip != NULL)
+        {
+            configIpError = SetDhcp(openedCamera.cameraHandle);
+        }
+        else
+        {
+            configIpError = SetLla(openedCamera.cameraHandle);
+        }
+
+        VmbCameraClose(openedCamera.cameraHandle);
+    }
+
+    return configIpError;
+}
+
+VmbError_t SetPersistentIp(const VmbHandle_t cameraHandle, const char* const ip, const char* const subnet, const char* const gateway)
+{
+    /*
+     * Convert the string parameters into the needed integer values in host byte order
+     */
+    const VmbInt64_t ipValue          = (VmbInt64_t)IpAddressToHostByteOrderedInt(ip);
+    const VmbInt64_t subnetMaskValue  = (VmbInt64_t)IpAddressToHostByteOrderedInt(subnet);
+    const VmbInt64_t gatewayValue     = (gateway) ? (VmbInt64_t)IpAddressToHostByteOrderedInt(gateway) : 0;
+
+    const VmbBool_t invalidConfiguration = ((ipValue == INADDR_NONE) || (subnetMaskValue == INADDR_NONE) || (gatewayValue == INADDR_NONE));
+    if (invalidConfiguration)
+    {
+        VMB_PRINT("One or more invalid parameters: %s %s %s\n.", ip, subnet, gateway);
+        return 1;
+    }
+
+    /*
+     * Write the desired persistent IP configuration using either features from the SFNC or standard camera registers
+     */
+    const VmbError_t configError = WritePersistentIp(cameraHandle, ipValue, subnetMaskValue, gatewayValue);
+
+    (configError == VmbErrorSuccess) ? VMB_PRINT("IP configuration written to camera\n") : VMB_PRINT("IP configuration not written completely to camera\n");
+
+    return VmbErrorSuccess;
+}
+
+VmbError_t SetDhcp(const VmbHandle_t cameraHandle)
+{
+    /*
+     * Check if the optional sfnc feature GevCurrentIPConfigurationDHCP is available and writeable.
+     */
+    VmbBool_t writeable = VmbBoolFalse;
+    const VmbError_t error = VmbFeatureAccessQuery(cameraHandle, "GevCurrentIPConfigurationDHCP", NULL, &writeable);
+    const VmbBool_t cameraHasPersistentFeatures = (error == VmbErrorSuccess) && (writeable);
+
+    /*
+     * Use the available sfnc features or camera registers to set the DHCP IP configuration
+     */
+    if (cameraHasPersistentFeatures)
+    {
+        VMB_PRINT("Setting DHCP using sfnc features\n");
+        RETURN_AND_PRINT_ON_ERROR(VmbFeatureBoolSet(cameraHandle, "GevCurrentIPConfigurationDHCP", VmbBoolTrue));
+    }
+    else
+    {
+        VMB_PRINT("Setting DHCP using device registers\n");
+        RETURN_ON_ERROR(WriteInterfaceConfigRegister(cameraHandle, SetInterfaceConfigRegisterValue_DhcpIpConfig));
+    }
+
+    return error;
+}
+
+VmbError_t SetLla(const VmbHandle_t cameraHandle)
+{
+    /*
+     * Check if the optional sfnc feature GevCurrentIPConfigurationLLA is available and writeable.
+     */
+    VmbBool_t writeable = VmbBoolFalse;
+    const VmbError_t error = VmbFeatureAccessQuery(cameraHandle, "GevCurrentIPConfigurationLLA", NULL, &writeable);
+    const VmbBool_t cameraHasPersistentFeatures = (error == VmbErrorSuccess) && (writeable);
+
+    /*
+     * Use the available sfnc features or camera registers to set the LLA IP configuration
+     */
+    if (cameraHasPersistentFeatures)
+    {
+        VMB_PRINT("Setting LLA using sfnc features\n");
+        RETURN_AND_PRINT_ON_ERROR(VmbFeatureBoolSet(cameraHandle, "GevCurrentIPConfigurationLLA", VmbBoolTrue));
+    }
+    else
+    {
+        VMB_PRINT("Setting LLA using device registers\n");
+        RETURN_ON_ERROR(WriteInterfaceConfigRegister(cameraHandle, SetInterfaceConfigRegisterValue_LlaIpConfig));
+    }
+
+    return VmbErrorSuccess;
+}
+
+CameraOpenResult OpenCamera(const char* const cameraId)
+{
+    CameraOpenResult result;
+    memset(&result, 0, sizeof(result));
+    result.error = VmbErrorUnknown;
+
+    /*
+     * Check that the camera is not opened by another application or located in a different subnet
+     */
+    VmbCameraInfo_t info;
+    RETURN_SPECIFIC_AND_PRINT_ON_ERROR(result.error = VmbCameraInfoQuery(cameraId, &info, sizeof(info)), result);
+
+    VmbBool_t noFullAccess = ((info.permittedAccess & VmbAccessModeFull) != VmbAccessModeFull);
+    if (noFullAccess)
+    {
+        result.error = VmbErrorInvalidAccess;
+        VMB_PRINT("Not able to open the camera. The camera is used by a different application or located in a different subnet.");
+        return result;
+    }
+
+    /*
+     * Open the camera for later access
+     */
+    RETURN_SPECIFIC_AND_PRINT_ON_ERROR( (result.error = VmbCameraOpen(cameraId, VmbAccessModeFull, &result.cameraHandle)), result);
+
+    VMB_PRINT("Opened camera\n");
+
+    return result;
+}
+
+VmbError_t WritePersistentIp(const VmbHandle_t cameraHandle, const VmbInt64_t ip, const VmbInt64_t subnetMask, const VmbInt64_t gateway)
+{
+    /*
+     * Check if the optional sfnc feature GevCurrentIPConfigurationPersistentIP is available and writeable.
+     * It is assumed that the camera will either implement all the needed features for the persistent IP or none of them
+     */
+    VmbBool_t writeable = VmbBoolFalse;
+    VmbError_t error = VmbFeatureAccessQuery(cameraHandle, "GevCurrentIPConfigurationPersistentIP", NULL, &writeable);
+    const VmbBool_t cameraHasPersistentFeatures = (error == VmbErrorSuccess) && (writeable);
+
+    /*
+     * Use the available sfnc features or camera registers to set the persistent IP configuration
+     */
+    if (cameraHasPersistentFeatures)
+    {
+        VMB_PRINT("Setting persistent IP using sfnc features\n");
+        error = WritePersistentIpFeatures(cameraHandle, ip, subnetMask, gateway);
+    }
+    else
+    {
+        VMB_PRINT("Setting persistent IP using device registers\n");
+        error = WritePersistentIpRegisters(cameraHandle, (VmbUint32_t)ip, (VmbUint32_t)subnetMask, (VmbUint32_t)gateway);
+    }
+    return error;
+}
+
+VmbError_t WritePersistentIpFeatures(const VmbHandle_t cameraHandle, const VmbInt64_t ip, const VmbInt64_t subnetMask, const VmbInt64_t gateway)
+{
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntSet(cameraHandle, "GevPersistentIPAddress", ip));
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntSet(cameraHandle, "GevPersistentSubnetMask", subnetMask));
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntSet(cameraHandle, "GevPersistentDefaultGateway", gateway));
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureBoolSet(cameraHandle, "GevCurrentIPConfigurationPersistentIP", VmbBoolTrue));
+
+    return VmbErrorSuccess;
+}
+
+VmbError_t WritePersistentIpRegisters(const VmbHandle_t cameraHandle, const VmbUint32_t ip, const VmbUint32_t subnetMask, const VmbUint32_t gateway)
+{
+    const VmbUint64_t GIGE_PERSISTENT_IP_REGISTER           = 0x064C;
+    const VmbUint64_t GIGE_PERSISTENT_SUBNET_MASK_REGISTER  = 0x065C;
+    const VmbUint64_t GIGE_PERSISTENT_GATEWAY_REGISTER      = 0x066C;
+
+    /*
+     * Write the configuration to the camera registers
+     */
+    const VmbUint64_t addresses[] = { GIGE_PERSISTENT_IP_REGISTER, GIGE_PERSISTENT_SUBNET_MASK_REGISTER, GIGE_PERSISTENT_GATEWAY_REGISTER };
+    const VmbUint32_t datas[]     = { ip , subnetMask , gateway };
+    const VmbUint32_t registersToWrite = sizeof(datas) / sizeof(VmbUint32_t);
+    for (VmbUint32_t currentIndex = 0; currentIndex < registersToWrite; currentIndex++)
+    {
+        RETURN_ON_ERROR(WriteRegister(cameraHandle, addresses[currentIndex], datas[currentIndex]));
+    }
+
+    /*
+     * Set the interface configuration register to enable persistent IP
+     */
+    RETURN_ON_ERROR(WriteInterfaceConfigRegister(cameraHandle, SetInterfaceConfigRegisterValue_PersistentIpConfig));
+
+    return VmbErrorSuccess;
+}
+
+VmbError_t WriteRegister(const VmbHandle_t cameraHandle, const VmbUint64_t address, VmbUint32_t data)
+{
+    #ifdef _LITTLE_ENDIAN
+    data = htonl(data);
+    #endif
+
+    char strData[4];
+    strData[0] = data;
+    strData[1] = data >> 8;
+    strData[2] = data >> 16;
+    strData[3] = data >> 24;
+
+    VmbUint32_t written = 0;
+    VmbUint32_t bufferSize = sizeof(VmbUint32_t);
+    RETURN_AND_PRINT_ON_ERROR(VmbMemoryWrite(cameraHandle, address, bufferSize, strData, &written));
+
+    return VmbErrorSuccess;
+}
+
+VmbError_t WriteInterfaceConfigRegister(const VmbHandle_t cameraHandle, void (*SetInterfaceConfigRegisterValue) (VmbUint32_t* const) )
+{
+    const VmbUint64_t GIGE_INTERFACE_CONFIG_REGISTER = 0x0014;
+
+    /*
+     * Read the Network Interface Configuration register
+     */
+    VmbUint32_t interfaceConfiguration = 0;
+    VmbUint32_t bytesRead = 0;
+    RETURN_AND_PRINT_ON_ERROR(VmbMemoryRead(cameraHandle, GIGE_INTERFACE_CONFIG_REGISTER, sizeof(interfaceConfiguration), (char*)(&interfaceConfiguration), &bytesRead));
+
+    #ifdef _LITTLE_ENDIAN
+    interfaceConfiguration = ntohl(interfaceConfiguration);
+    #endif // _LITTLE_ENDIAN
+
+    /*
+     * Set the configuration bits
+     */
+    SetInterfaceConfigRegisterValue(&interfaceConfiguration);
+
+    RETURN_ON_ERROR(WriteRegister(cameraHandle, GIGE_INTERFACE_CONFIG_REGISTER, interfaceConfiguration));
+
+    return VmbErrorSuccess;
+}
+
+void SetInterfaceConfigRegisterValue_PersistentIpConfig(VmbUint32_t* const interfaceConfiguration)
+{
+    *interfaceConfiguration = *interfaceConfiguration | 1UL;
+}
+
+void SetInterfaceConfigRegisterValue_DhcpIpConfig(VmbUint32_t* const interfaceConfiguration)
+{
+    *interfaceConfiguration = *interfaceConfiguration & ~(1UL);
+    *interfaceConfiguration = *interfaceConfiguration | (1UL << 1);
+}
+
+void SetInterfaceConfigRegisterValue_LlaIpConfig(VmbUint32_t* const interfaceConfiguration)
+{
+    *interfaceConfiguration = *interfaceConfiguration & ~(1UL);
+    *interfaceConfiguration = *interfaceConfiguration & ~(1UL << 1);
+}
diff --git a/VimbaX/api/examples/VmbC/ConfigIp/ConfigIp.h b/VimbaX/api/examples/VmbC/ConfigIp/ConfigIp.h
new file mode 100644
index 0000000000000000000000000000000000000000..4b7115644727f664f8a64f4d63b73f4a41ad4b0c
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ConfigIp/ConfigIp.h
@@ -0,0 +1,48 @@
+/**
+ * \date 2022
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Declaration of the function which implements the IP configuration
+ */
+
+#ifndef CONFIG_IP_H_
+#define CONFIG_IP_H_
+
+#include <VmbC/VmbC.h>
+
+/**
+ * \brief set an IP configuration for a camera identified by its ID
+ *
+ * Starts the VmbC API. Writes the IP configuration into the camera's IP configuration registers.
+ * The new configuration will be retained and applied after a power-cycle of the camera.
+ * Assumes that the VmbC API is already started.
+ *
+ * By default the progress and error messages are printed out. Define _VMB_CONFIG_IP_NO_PRINT to disable the print out.
+ *
+ * \param[in] cameraId ID of the desired camera whose IP configuration is to be updated
+ * \param[in] ip       For setting the IP configuration to:
+                                   1. a persistent IP: the desired IP address
+                                   2.            DHCP: the string "dhcp"
+                                   3.             LLA: a NULL pointer
+ * \param[in] subnet   The desired subnet mask in the case of setting a persistent IP, otherwise a NULL pointer
+ * \param[in] gateway  The desired gateway in the case of setting a persistent IP. Optional, can be a NULL pointer.
+ *
+ * \return error code reporting the success of the operation
+*/
+VmbError_t ConfigIp(const char* const cameraId, const char* const ip, const char* const subnet, const char* const gateway);
+
+#endif // CONFIG_IP_H_
diff --git a/VimbaX/api/examples/VmbC/ConfigIp/ConfigIpProg.c b/VimbaX/api/examples/VmbC/ConfigIp/ConfigIpProg.c
new file mode 100644
index 0000000000000000000000000000000000000000..c2ea4a9b4bb36ec1d36d3044a4528900ab572909
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ConfigIp/ConfigIpProg.c
@@ -0,0 +1,52 @@
+/**
+ * \date 2022
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of the function which implements the Config IPs example
+ */
+
+#include <stdio.h>
+
+#include "ConfigIpProg.h"
+#include "ConfigIp.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCExamplesCommon/PrintVmbVersion.h>
+#include <VmbCExamplesCommon/ErrorCodeToMessage.h>
+
+int ConfigIpProg(const char* const cameraId, const char* const ip, const char* const subnet, const char* const gateway)
+{
+    /*
+     * Initialize the VmbC API
+     */
+    VmbError_t err = VmbStartup(NULL);
+    VmbBool_t apiStartFailed = (VmbErrorSuccess != err);
+    if (apiStartFailed)
+    {
+        printf("VmbStartup failed. %s Error code: %d.", ErrorCodeToMessage(err), err);
+        return 1;
+    }
+
+    PrintVmbVersion();
+
+    err = ConfigIp(cameraId, ip, subnet, gateway);
+
+    VmbShutdown();
+
+    return (err == VmbErrorSuccess) ? 0 : 1;
+}
diff --git a/VimbaX/api/examples/VmbC/ConfigIp/ConfigIpProg.h b/VimbaX/api/examples/VmbC/ConfigIp/ConfigIpProg.h
new file mode 100644
index 0000000000000000000000000000000000000000..16fa67b12c2c1ec627ec66fd95df02daa6cde77c
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ConfigIp/ConfigIpProg.h
@@ -0,0 +1,43 @@
+/**
+ * \date 2022
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Declaration of the function which implements the Config IP example
+ */
+
+#ifndef CONFIG_IP_PROG_H_
+#define CONFIG_IP_PROG_H_
+
+/**
+ * \brief set an IP configuration for a camera identified by its ID
+ *
+ * Starts the VmbC API. Writes the IP configuration into the camera's IP configuration registers.
+ * The new configuration will be retained and applied after a power-cycle of the camera.
+ *
+ * \param[in] cameraId ID of the desired camera whose IP configuration is to be updated
+ * \param[in] ip       For setting the IP configuration to:
+                                    1. a persistent IP: the desired IP address
+                                    2.            DHCP: the string "dhcp"
+                                    3.             LLA: a NULL pointer
+ * \param[in] subnet   The desired subnet mask in the case of setting a persistent IP, otherwise a NULL pointer
+ * \param[in] gateway  The desired gateway in the case of setting a persistent IP. Optional, can be a NULL pointer.
+ *
+ * \return a code to return from main()
+*/
+int ConfigIpProg(const char* const cameraId, const char* const ip, const char* const subnet, const char* const gateway);
+
+#endif // CONFIG_IP_PROG_H_
diff --git a/VimbaX/api/examples/VmbC/ConfigIp/main.c b/VimbaX/api/examples/VmbC/ConfigIp/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..e2602525c6c7cac0b06a60e24c32045522593c65
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ConfigIp/main.c
@@ -0,0 +1,65 @@
+/**
+ * \date 2022
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Entry point of the Config IP example using the VmbC API
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "ConfigIpProg.h"
+
+int main(int argc, char* argv[])
+{
+    printf("\n/////////////////////////////////////////\n");
+    printf("/// VmbC API IP Configuration Example ///\n");
+    printf("/////////////////////////////////////////\n\n");
+
+    if (argc == 2)
+    {
+        return ConfigIpProg(argv[1], NULL, NULL, NULL);
+    }
+    else if (argc == 3 && strcmp(argv[2], "dhcp") == 0)
+    {
+        return ConfigIpProg(argv[1], argv[2], NULL, NULL);
+    }
+    else if (argc == 4 || argc == 5)
+    {
+        return ConfigIpProg(argv[1], argv[2], argv[3], argc == 5 ? argv[4] : NULL);
+    }
+    else
+    {
+        printf("Usage: ConfigIp_VmbC <cameraId> [dhcp | <IP> <Subnet> [<Gateway>]]\n\n");
+        printf("Parameters:\n");
+        printf("<cameraId> The ID of the camera whose IP configuration shall be changed. The camera must be on the hosts subnet.\n");
+        printf("dhcp       Enable DHCP in the camera.\n");
+        printf("<IP>       For enabling persistent IP: The new IPv4 address of the camera in numbers and dots notation.\n");
+        printf("<Subnet>   For enabling persistent IP: The new network mask of the camera in numbers and dots notation.\n");
+        printf("<Gateway>  For enabling persistent IP: The address of a possible gateway if the camera is not connected\n");
+        printf("                                       to the host PC directly.\n\n");
+        printf("For example, to enable persistent IP with the IP address of a camera with the camera ID DEV_000F315B91EF\n");
+        printf("set to 169.254.1.1 in a class B network call:\n\n");
+        printf("ConfigIp_VmbC DEV_000F315B91EF 169.254.1.1 255.255.0.0\n\n");
+        printf("To enable DHCP in the same camera call:\n\n");
+        printf("ConfigIp_VmbC DEV_000F315B91EF dhcp\n\n");
+        printf("To disable both DHCP and Persistent IP (in which case LLA will be used) call:\n\n");
+        printf("ConfigIp_VmbC DEV_000F315B91EF\n\n");
+
+        return 1;
+    }
+}
diff --git a/VimbaX/api/examples/VmbC/ForceIp/CMakeLists.txt b/VimbaX/api/examples/VmbC/ForceIp/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..51e38752c511cdf5caf39b3768dff089ec4fd0e6
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ForceIp/CMakeLists.txt
@@ -0,0 +1,42 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(ForceIp LANGUAGES C)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS C)
+
+if(NOT TARGET VmbCExamplesCommon)
+    add_subdirectory(../Common VmbCExamplesCommon_build)
+endif()
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(ForceIp_VmbC
+    main.c
+    ForceIp.c
+    ForceIp.h
+    ForceIpProg.c
+    ForceIpProg.h
+    ${COMMON_SOURCES}
+)
+
+source_group(Common FILES ${COMMON_SOURCES})
+
+target_compile_definitions(ForceIp_VmbC PRIVATE _LITTLE_ENDIAN)
+
+target_link_libraries(ForceIp_VmbC PRIVATE Vmb::C VmbCExamplesCommon)
+
+if (WIN32)
+    target_link_libraries(ForceIp_VmbC PRIVATE Ws2_32)
+endif()
+
+set_target_properties(ForceIp_VmbC PROPERTIES
+    C_STANDARD 11
+    VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};$ENV{PATH}"
+)
diff --git a/VimbaX/api/examples/VmbC/ForceIp/ForceIp.c b/VimbaX/api/examples/VmbC/ForceIp/ForceIp.c
new file mode 100644
index 0000000000000000000000000000000000000000..0a50ee1e133ca93579f0cd362cdc79d43709ddeb
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ForceIp/ForceIp.c
@@ -0,0 +1,665 @@
+/**
+ * \date 2022
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of the function which implements the force ip configuration
+ */
+
+#define _CRT_SECURE_NO_WARNINGS // disable sscanf warning for Windows
+
+#include "ForceIpProg.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <arpa/inet.h>
+#include <time.h>
+#endif
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCExamplesCommon/AccessModeToString.h>
+#include <VmbCExamplesCommon/ArrayAlloc.h>
+#include <VmbCExamplesCommon/ErrorCodeToMessage.h>
+#include <VmbCExamplesCommon/ListCameras.h>
+#include <VmbCExamplesCommon/ListInterfaces.h>
+#include <VmbCExamplesCommon/ListTransportLayers.h>
+#include <VmbCExamplesCommon/IpAddressToHostByteOrderedInt.h>
+
+
+
+/**
+ * \brief Converts a hexadecimal MAC address into its decimal representation.
+ * \param[in] strMAC    The hexadecimal (with preceding 0x) or decimal representation of the MAC
+ *
+ * \return 0 in case of error, otherwise the decimal representation of the MAC address as integer
+*/
+unsigned long long MacAddr(const char* const strMAC)
+{
+    unsigned long long nMAC;
+
+    if (sscanf(strMAC, "0x%llx", &nMAC)
+        || sscanf(strMAC, "%lld", &nMAC))
+    {
+        return nMAC;
+    }
+    else
+    {
+        return 0;
+    }
+}
+
+
+/*
+ * Macros used to control the print out of the progress and any errors.
+ * Define _VMB_FORCE_IP_NO_PRINT to disable the print out
+ */
+#ifdef _VMB_FORCE_IP_NO_PRINT
+    #define VMB_PRINT(text, ...)
+#else
+    #define VMB_PRINT(...) printf(__VA_ARGS__)
+#endif
+
+
+
+ /*
+  * Helper macros used for cleaner error handling
+  */
+#define _ON_ERROR(op, onError)  {\
+                                    VmbError_t error = op; \
+                                    if(error != VmbErrorSuccess) \
+                                    { \
+                                        onError; \
+                                    } \
+                                }
+
+#define _ON_ERROR_WITH_PRINT(op, onError) _ON_ERROR(op, VMB_PRINT("%s failed. %s Error code: %d. \n", #op, ErrorCodeToMessage(error), error); onError)
+
+#define RETURN_ON_ERROR(op)                             _ON_ERROR(op, return error;)
+#define CONTINUE_ON_ERROR(op)                           _ON_ERROR(op, continue;)
+
+#define RETURN_SPECIFIC_AND_PRINT_ON_ERROR(op, retVal)  _ON_ERROR_WITH_PRINT(op, return retVal;)
+#define RETURN_AND_PRINT_ON_ERROR(op)                   _ON_ERROR_WITH_PRINT(op, return error;)
+
+#define CONTINUE_AND_PRINT_ON_ERROR(op)                 _ON_ERROR_WITH_PRINT(op, continue;)
+#define BREAK_AND_PRINT_ON_ERROR(op)                    _ON_ERROR_WITH_PRINT(op, break;)
+
+/*
+ * Helper structs
+ */
+
+/**
+ * \brief Helper struct used to store information about a found interface
+ */
+typedef struct InterfaceSearchResult
+{
+    VmbInterfaceInfo_t  info;           //!< Information about the found interface
+    char*               cameraId;       //!< Camera ID as reported by the interface
+    VmbInt64_t          deviceSelector; //!< The configured DeviceSelector the camera was found with
+} InterfaceSearchResult;
+
+/**
+ * \brief Helper struct used to store information about a found transport layer
+ */
+typedef struct TlSearchResult
+{
+    VmbTransportLayerInfo_t info;           //!< Information about the found transport layer
+    VmbInt64_t              interfaceCount; //!< Number of interfaces of the transport layer
+} TlSearchResult;
+
+/*
+ * Helper functions
+ */
+
+/**
+ * \brief Send a force ip command to a camera with the given mac address via an interface that the camera is connected to.
+ * Each found interface will be used until success, otherwise an error is returned.
+ * The new configuration will be lost after a power-cycle of the camera.
+ *
+ * \param[in] interfaceHandle Handle of the interface that should be used to send the command
+ * \param[in] mac             The mac address of the camera
+ * \param[in] ip              The desired ip address
+ * \param[in] subnetMask      The desired subnet mask
+ * \param[in] gateway         The desired gateway
+ *
+ * \return Result of the operation
+*/
+VmbError_t ForceIpViaInterface(const VmbInt64_t macValue, const VmbInt64_t ipValue, const VmbInt64_t subnetMaskValue, const VmbInt64_t gatewayValue);
+
+ /**
+  * \brief Send a force ip command to a camera with the given mac address via a transport layer.
+  * Each found Vimba X transport layer will be used until success, otherwise an error is returned.
+  * The new configuration will be lost after a power-cycle of the camera.
+  *
+  * \param[in] interfaceHandle Handle of the transport layer that should be used to send the command
+  * \param[in] mac             The mac address of the camera
+  * \param[in] ip              The desired ip address
+  * \param[in] subnetMask      The desired subnet mask
+  * \param[in] gateway         The desired gateway
+  *
+  * \return Result of the operation
+ */
+VmbError_t ForceIpViaTl(const VmbInt64_t macValue, const VmbInt64_t ipValue, const VmbInt64_t subnetMaskValue, const VmbInt64_t gatewayValue);
+
+/**
+ * \brief Search for interfaces to which a camera with the given mac address is connected
+ *
+ * \param[in] mac                          The camera's mac address
+ * \param[out] interfaceSearchResults      The interfaces to which the camera is connected.
+ *                                         The first one will be an interface of a Vimba X transport layer, if available,
+ *                                         and the second one that of a Vimba one, if available
+ * \param[out] interfaceSearchResultsCount The number of interfaces to which the camera is connected
+ *
+ * \return Result of the operation
+*/
+VmbError_t SearchCamerasInterface(const VmbInt64_t mac, InterfaceSearchResult** interfaceSearchResults, VmbUint32_t* interfaceSearchResultsCount);
+
+/**
+ * \brief Search for transport layers to which a camera with the given mac address is connected
+ *
+ * \param[in]  tls                        The available transport layers
+ * \param[in]  tlCount                    The number of available transport layers
+ * \param[out] tlVimbaXSearchResults      The Vimba X transport layers to which the camera is connected.
+ * \param[out] tlVimbaXSearchResultsCount The number of Vimba X transport layers to which the camera is connected
+ * \param[out] tlVimbaSearchResults       The Vimba transport layers to which the camera is connected.
+ * \param[out] tlVimbaSearchResultsCount  The number of Vimba transport layers to which the camera is connected
+ *
+ * \return Result of the operation
+*/
+VmbError_t GetRelatedTls(const VmbTransportLayerInfo_t* const tls, const VmbUint32_t tlCount, TlSearchResult** tlVimbaXSearchResult, VmbUint32_t* tlVimbaXSearchResultsCount, TlSearchResult** tlVimbaSearchResult, VmbUint32_t* tlVimbaSearchResultsCount);
+
+/**
+ * \brief Send a force ip command to a camera with the given mac address using an interface.
+ * A check that the camera's mac is found by the interface is performed first.
+ * The new configuration will be lost after a power-cycle of the camera.
+ *
+ * \param[in] interfaceData   Information about the interface that should be used to send the command
+ * \param[in] mac             The mac address of the camera
+ * \param[in] ip              The desired ip address
+ * \param[in] subnetMask      The desired subnet mask
+ * \param[in] gateway         The desired gateway
+ *
+ * \return Result of the operation
+*/
+VmbError_t SendForceIpViaInterface(const InterfaceSearchResult* interfaceData, const VmbInt64_t mac, const VmbInt64_t ip, const VmbInt64_t subnetMask, const VmbInt64_t gateway);
+
+/**
+ * \brief Send a force ip command to a camera with the given mac address using a transport layer.
+ * The camera's mac is first communicated to the transport layer.
+ * The new configuration will be lost after a power-cycle of the camera.
+ *
+ * \param[in] tlHande    Handle of the interface that should be used to send the command
+ * \param[in] mac        The mac address of the camera
+ * \param[in] ip         The desired ip address
+ * \param[in] subnetMask The desired subnet mask
+ * \param[in] gateway    The desired gateway
+ *
+ * \return Result of the operation
+*/
+VmbError_t SendForceIpViaTl(const VmbHandle_t tlHandle, const VmbInt64_t mac, const VmbInt64_t ip, const VmbInt64_t subnetMask, const VmbInt64_t gateway);
+
+/**
+ * \brief Send a force ip command to a camera once the camera's mac is known to the entity.
+ *  The new configuration will be lost after a power-cycle of the camera.
+ *
+ * \param[in] hande      Handle of the entity that should be used to send the command
+ * \param[in] ip         The desired ip address
+ * \param[in] subnetMask The desired subnet mask
+ * \param[in] gateway    The desired gateway
+ *
+ * \return Result of the operation
+*/
+VmbError_t SendForceIp(const VmbHandle_t hande, const VmbInt64_t ip, const VmbInt64_t subnetMask, const VmbInt64_t gateway);
+
+
+
+/*
+ * ForceIp implementation
+ */
+
+VmbError_t ForceIp(const char* const mac, const char* const ip, const char* const subnet, const char* const gateway)
+{
+    /*
+     * Convert the string parameters into the needed integer values in host byte order
+     */
+    const VmbInt64_t macValue         = MacAddr(mac);
+    const VmbInt64_t ipValue          = (VmbInt64_t)IpAddressToHostByteOrderedInt(ip);
+    const VmbInt64_t subnetMaskValue  = (VmbInt64_t)IpAddressToHostByteOrderedInt(subnet);
+    const VmbInt64_t gatewayValue     = (gateway) ? (VmbInt64_t)IpAddressToHostByteOrderedInt(gateway) : 0;
+
+    const VmbBool_t invalidConfiguration = ((macValue == 0) || (ipValue == INADDR_NONE) || (subnetMaskValue == INADDR_NONE) || (gatewayValue == INADDR_NONE));
+    if (invalidConfiguration)
+    {
+        VMB_PRINT("One or more invalid parameters: %s %s %s %s.\n", mac, ip, subnet, gateway);
+        return 1;
+    }
+
+    VmbError_t error = ForceIpViaInterface(macValue, ipValue, subnetMaskValue, gatewayValue);
+
+    if(error != VmbErrorSuccess)
+    {
+        VMB_PRINT("ForceIp using interfaces failed, trying transport layers.\n\n");
+        error = ForceIpViaTl(macValue, ipValue, subnetMaskValue, gatewayValue);
+    }
+
+    return error;
+}
+
+VmbError_t ForceIpViaInterface(const VmbInt64_t macValue, const VmbInt64_t ipValue, const VmbInt64_t subnetMaskValue, const VmbInt64_t gatewayValue)
+{
+    /*
+     * Get a list of currently connected cameras.
+     * Forces the used transport layers to update their internal camera lists.
+     */
+    {
+        VmbCameraInfo_t* cameras = 0;
+        VmbUint32_t cameraCount = 0;
+        RETURN_ON_ERROR(ListCameras(&cameras, &cameraCount));
+        free(cameras);
+    }
+
+    /*
+     * Get the interfaces to which the camera is connected.
+     */
+    InterfaceSearchResult* interfaceSearchResults = 0;
+    VmbUint32_t interfaceSearchResultsCount = 0;
+    RETURN_AND_PRINT_ON_ERROR(SearchCamerasInterface(macValue, &interfaceSearchResults, &interfaceSearchResultsCount));
+
+    for(VmbUint32_t interfaceSearchResultsIndex = 0; interfaceSearchResultsIndex < interfaceSearchResultsCount; interfaceSearchResultsIndex++)
+    {
+        VMB_PRINT("Found related device \"%s\" connected to interface \"%s\"\n", interfaceSearchResults[interfaceSearchResultsIndex].cameraId, interfaceSearchResults[interfaceSearchResultsIndex].info.interfaceName);
+    }
+
+    /*
+     * Send a force ip command using the first of the previously found interfaces for which the operation succeeds.
+     */
+    VmbError_t error = VmbErrorSuccess;
+    for (VmbUint32_t interfaceSearchResultsIndex = 0; interfaceSearchResultsIndex < interfaceSearchResultsCount; interfaceSearchResultsIndex++)
+    {
+        error = SendForceIpViaInterface(&(interfaceSearchResults[interfaceSearchResultsIndex]), macValue, ipValue, subnetMaskValue, gatewayValue);
+        if (error == VmbErrorSuccess)
+        {
+            VMB_PRINT("Operation succeeded using interface \"%s\"\n", interfaceSearchResults[interfaceSearchResultsIndex].info.interfaceName);
+            break;
+        }
+    }
+
+    return error;
+}
+
+VmbError_t ForceIpViaTl(const VmbInt64_t macValue, const VmbInt64_t ipValue, const VmbInt64_t subnetMaskValue, const VmbInt64_t gatewayValue)
+{
+    /*
+     * Get a list of all available transport layers.
+     */
+    VmbTransportLayerInfo_t* tls = 0;
+    VmbUint32_t              tlCount = 0;
+    RETURN_AND_PRINT_ON_ERROR(ListTransportLayers(&tls, &tlCount));
+
+    /*
+     * Get the Vimba X and Vimba transport layers.
+     */
+    TlSearchResult* tlVimbaXSearchResults = 0;
+    VmbUint32_t tlVimbaXSearchResultsCount = 0;
+    TlSearchResult* tlVimbaSearchResults = 0;
+    VmbUint32_t tlVimbaSearchResultsCount = 0;
+    RETURN_AND_PRINT_ON_ERROR(GetRelatedTls(tls, tlCount, &tlVimbaXSearchResults, &tlVimbaXSearchResultsCount, &tlVimbaSearchResults, &tlVimbaSearchResultsCount); free(tls));
+
+    for (VmbUint32_t tlSearchResultsIndex = 0; tlSearchResultsIndex < tlVimbaXSearchResultsCount; tlSearchResultsIndex++)
+    {
+        VMB_PRINT("%lld interface(s) belonging to Vimba X transport layer \"%s\"\n", tlVimbaXSearchResults[tlSearchResultsIndex].interfaceCount, tlVimbaXSearchResults[tlSearchResultsIndex].info.transportLayerName);
+    }
+
+    for (VmbUint32_t tlSearchResultsIndex = 0; tlSearchResultsIndex < tlVimbaSearchResultsCount; tlSearchResultsIndex++)
+    {
+        VMB_PRINT("%lld interface(s) belonging to Vimba transport layer \"%s\"\n", tlVimbaSearchResults[tlSearchResultsIndex].interfaceCount, tlVimbaSearchResults[tlSearchResultsIndex].info.transportLayerName);
+    }
+
+    /*
+     * Send a force ip command using the first of the previously found Vimba X transport layers for which the operation succeeds.
+     */
+    VmbError_t error;
+    for (VmbUint32_t tlSearchResultsIndex = 0; tlSearchResultsIndex < tlVimbaXSearchResultsCount; tlSearchResultsIndex++)
+    {
+        error = SendForceIpViaTl(tlVimbaXSearchResults[tlSearchResultsIndex].info.transportLayerHandle, macValue, ipValue, subnetMaskValue, gatewayValue);
+        if (error == VmbErrorSuccess)
+        {
+            VMB_PRINT("Operation succeeded using transport layer \"%s\"\n", tlVimbaXSearchResults[tlSearchResultsIndex].info.transportLayerName);
+            break;
+        }
+    }
+
+    if (error != VmbErrorSuccess)
+    {
+        VmbError_t error;
+        for (VmbUint32_t tlSearchResultsIndex = 0; tlSearchResultsIndex < tlVimbaSearchResultsCount; tlSearchResultsIndex++)
+        {
+            error = SendForceIpViaTl(tlVimbaSearchResults[tlSearchResultsIndex].info.transportLayerHandle, macValue, ipValue, subnetMaskValue, gatewayValue);
+            if (error == VmbErrorSuccess)
+            {
+                VMB_PRINT("Operation succeeded using transport layer \"%s\"\n", tlVimbaSearchResults[tlSearchResultsIndex].info.transportLayerName);
+                break;
+            }
+        }
+    }
+
+    return error;
+}
+
+/**
+ * \brief Get the value of the string feature DeviceID
+ *
+ * \param[in]  interfaceHandle Handle of the interface the feature should be queried from
+ * \param[out] deviceId        Target pointer which points to the allocated memory after the call. Must be freed later
+ *
+ * \return Error code reported during feature access
+*/
+VmbError_t QueryDeviceIdFeature(const VmbHandle_t interfaceHandle, char** deviceId)
+{
+    /*
+     * Get the device ID reported by the interface
+     */
+    VmbUint32_t deviceIdLength = 0;
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureStringGet(interfaceHandle, "DeviceID", 0, 0, &deviceIdLength));
+
+    *deviceId = VMB_MALLOC_ARRAY(char, deviceIdLength);
+
+    const VmbError_t error = VmbFeatureStringGet(interfaceHandle, "DeviceID", *deviceId, deviceIdLength, &deviceIdLength);
+    if (error != VmbErrorSuccess)
+    {
+        free(*deviceId);
+        *deviceId = NULL;
+    }
+
+    return error;
+}
+
+VmbError_t SearchCamerasInterface(const VmbInt64_t mac, InterfaceSearchResult** interfaceSearchResults, VmbUint32_t* interfaceSearchResultsCount)
+{
+    /*
+     * Get a list of all available interfaces.
+     */
+    VmbInterfaceInfo_t* interfaces = 0;
+    VmbUint32_t         interfaceCount = 0;
+    RETURN_AND_PRINT_ON_ERROR(ListInterfaces(&interfaces, &interfaceCount));
+
+    /*
+     * Count the interfaces to which the camera is connected.
+     * Multiple transport layers can enumerate the same physical interface.
+     */
+    *interfaceSearchResultsCount = 0;
+    for (VmbUint32_t interfaceIndex = 0; interfaceIndex < interfaceCount; interfaceIndex++)
+    {
+        const VmbInterfaceInfo_t* const currentInterface = (interfaces + interfaceIndex);
+
+        /*
+         * Ignore interfaces whose interface technology is not based on the GigE Vision standard
+         */
+        const VmbBool_t ignoreInterface = (currentInterface->interfaceType != VmbTransportLayerTypeGEV);
+        if (ignoreInterface)
+        {
+            continue;
+        }
+
+        const VmbHandle_t currentInterfaceHandle = currentInterface->interfaceHandle;
+
+        /*
+         * Get the number of cameras connected to the interface.
+         * The feature DeviceSelector is not available if no camera is connected to the interface.
+         * A reported range [0;0] means that only a single camera is connected to the interface.
+         */
+        VmbInt64_t deviceSelectorMin;
+        VmbInt64_t deviceSelectorMax;
+        CONTINUE_ON_ERROR(VmbFeatureIntRangeQuery(currentInterfaceHandle, "DeviceSelector", &deviceSelectorMin, &deviceSelectorMax));
+
+        /*
+         * Check based on the mac if the desired camera is connected to the current interface
+         */
+        for (VmbInt64_t deviceIndex = 0; deviceIndex <= deviceSelectorMax; deviceIndex++)
+        {
+            CONTINUE_AND_PRINT_ON_ERROR(VmbFeatureIntSet(currentInterfaceHandle, "DeviceSelector", deviceIndex));
+
+            VmbInt64_t currentMAC = 0;
+            CONTINUE_AND_PRINT_ON_ERROR(VmbFeatureIntGet(currentInterfaceHandle, "GevDeviceMACAddress", &currentMAC));
+
+            if (currentMAC == mac)
+            {
+                /*
+                 * Camera is connected, add the interface.
+                 */
+                ++(*interfaceSearchResultsCount);
+            }
+        }
+    }
+
+    *interfaceSearchResults = VMB_MALLOC_ARRAY(InterfaceSearchResult, *interfaceSearchResultsCount);
+
+    VmbError_t error = VmbErrorNotFound;
+
+    /*
+     * Store the interfaces to which the camera is connected.
+     */
+    VmbUint32_t interfaceSearchResultIndex = 0;
+    for (VmbUint32_t interfaceIndex = 0; interfaceIndex < interfaceCount; interfaceIndex++)
+    {
+        const VmbInterfaceInfo_t* const currentInterface = (interfaces + interfaceIndex);
+
+        const VmbBool_t ignoreInterface = (currentInterface->interfaceType != VmbTransportLayerTypeGEV);
+        if (ignoreInterface)
+        {
+            continue;
+        }
+
+        const VmbHandle_t currentInterfaceHandle = currentInterface->interfaceHandle;
+
+        VMB_PRINT("Searching for camera on interface %s\n", currentInterface->interfaceName);
+
+        VmbInt64_t deviceSelectorMin;
+        VmbInt64_t deviceSelectorMax;
+        CONTINUE_ON_ERROR(VmbFeatureIntRangeQuery(currentInterfaceHandle, "DeviceSelector", &deviceSelectorMin, &deviceSelectorMax));
+
+        for (VmbInt64_t deviceIndex = 0; deviceIndex <= deviceSelectorMax; deviceIndex++)
+        {
+            CONTINUE_AND_PRINT_ON_ERROR(VmbFeatureIntSet(currentInterfaceHandle, "DeviceSelector", deviceIndex));
+
+            VmbInt64_t currentMAC = 0;
+            CONTINUE_AND_PRINT_ON_ERROR(VmbFeatureIntGet(currentInterfaceHandle, "GevDeviceMACAddress", &currentMAC));
+
+            if (currentMAC == mac)
+            {
+                char* cameraId = NULL;
+                CONTINUE_ON_ERROR(QueryDeviceIdFeature(currentInterfaceHandle, &cameraId));
+
+                (*interfaceSearchResults)[interfaceSearchResultIndex].cameraId = cameraId;
+                (*interfaceSearchResults)[interfaceSearchResultIndex].info = *currentInterface;
+                (*interfaceSearchResults)[interfaceSearchResultIndex].deviceSelector = deviceIndex;
+                ++interfaceSearchResultIndex;
+                error = VmbErrorSuccess;
+                VMB_PRINT("Camera found on interface %s\n", currentInterface->interfaceName);
+            }
+        }
+    }
+
+    free(interfaces);
+
+    return error;
+}
+
+VmbError_t GetRelatedTls( const VmbTransportLayerInfo_t* const tls, const VmbUint32_t tlCount, TlSearchResult** tlVimbaXSearchResult, VmbUint32_t* tlVimbaXSearchResultsCount, TlSearchResult** tlVimbaSearchResult, VmbUint32_t* tlVimbaSearchResultsCount)
+{
+    /*
+     * The transport layer names used for Vimba X and Vimba transport layers
+     */
+    const char vimbaXTlName[] = "AVT GigE Transport Layer";
+    const char vimbaTlName[] = "Vimba GigE Transport Layer";
+
+    /*
+     * Count the Vimba X and Vimba transport layers to which the camera is connected.
+     * Multiple transport layers can enumerate the same physical interface.
+     */
+    *tlVimbaXSearchResultsCount = 0;
+    *tlVimbaSearchResultsCount = 0;
+    for (VmbUint32_t tlIndex = 0; tlIndex < tlCount; tlIndex++)
+    {
+        const VmbTransportLayerInfo_t* const currentTl = (tls + tlIndex);
+
+        /*
+         * Ignore interfaces whose transport layer is neither Vimba X nor Vimba
+         */
+        if ((strcmp(currentTl->transportLayerName, vimbaXTlName) != 0) && (strcmp(currentTl->transportLayerName, vimbaTlName) != 0))
+        {
+            continue;
+        }
+
+        /*
+         * Add the transport layer if Vimba X or Vimba.
+         */
+        if (strcmp(currentTl->transportLayerName, vimbaXTlName) == 0)
+        {
+            ++(*tlVimbaXSearchResultsCount);
+        }
+        else if (strcmp(currentTl->transportLayerName, vimbaTlName) == 0)
+        {
+            ++(*tlVimbaSearchResultsCount);
+        }
+    }
+
+    *tlVimbaXSearchResult = VMB_MALLOC_ARRAY(TlSearchResult, *tlVimbaXSearchResultsCount);
+
+    *tlVimbaSearchResult = VMB_MALLOC_ARRAY(TlSearchResult, *tlVimbaSearchResultsCount);
+
+    VmbError_t error = VmbErrorNotFound;
+
+    /*
+     * Store the Vimba X and Vimba GigE Vision transport layers to which the camera is connected.
+     */
+    VmbUint32_t tlVimbaXSearchResultsIndex = 0;
+    VmbUint32_t tlVimbaSearchResultsIndex = 0;
+    for (VmbUint32_t tlIndex = 0; tlIndex < tlCount; tlIndex++)
+    {
+        const VmbTransportLayerInfo_t* const currentTl = (tls + tlIndex);
+
+        if (strcmp(currentTl->transportLayerName, vimbaXTlName) == 0)
+        {
+            VmbInt64_t interfaceCount;
+            RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntGet(currentTl->transportLayerHandle, "InterfaceCount", &interfaceCount));
+            (*tlVimbaXSearchResult)[tlVimbaXSearchResultsIndex].interfaceCount = interfaceCount;
+            (*tlVimbaXSearchResult)[tlVimbaXSearchResultsIndex].info = *currentTl;
+            ++tlVimbaXSearchResultsIndex;
+            error = VmbErrorSuccess;
+        }
+        else if (strcmp(currentTl->transportLayerName, vimbaTlName) == 0)
+        {
+            VmbInt64_t interfaceCount;
+            RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntGet(currentTl->transportLayerHandle, "InterfaceCount", &interfaceCount));
+            (*tlVimbaSearchResult)[tlVimbaSearchResultsIndex].interfaceCount = interfaceCount;
+            (*tlVimbaSearchResult)[tlVimbaSearchResultsIndex].info = *currentTl;
+            ++tlVimbaSearchResultsIndex;
+            error = VmbErrorSuccess;
+        }
+    }
+
+    return error;
+}
+
+VmbError_t SendForceIpViaInterface(const InterfaceSearchResult* interfaceData, const VmbInt64_t mac, const VmbInt64_t ip, const VmbInt64_t subnetMask, const VmbInt64_t gateway)
+{
+    VmbHandle_t interfaceHandle = interfaceData->info.interfaceHandle;
+    /*
+     * The force ip features are related to the DeviceSelector.
+     * Ensure that the stored selector value still selects the desired camera.
+     */
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntSet(interfaceHandle, "DeviceSelector", interfaceData->deviceSelector));
+
+    VmbInt64_t selectedMAC = 0;
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntGet(interfaceHandle, "GevDeviceMACAddress", &selectedMAC));
+
+    if (selectedMAC != mac)
+    {
+        return VmbErrorNotFound;
+    }
+
+    RETURN_AND_PRINT_ON_ERROR(SendForceIp(interfaceHandle, ip, subnetMask, gateway));
+
+    return VmbErrorSuccess;
+}
+
+VmbError_t SendForceIpViaTl(const VmbHandle_t tlHandle, const VmbInt64_t mac, const VmbInt64_t ip, const VmbInt64_t subnetMask, const VmbInt64_t gateway)
+{
+    /*
+     * The force ip features are related to the DeviceSelector.
+     * Set the current selector value to that of the desired camera.
+     */
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntSet(tlHandle, "GevDeviceForceMACAddress", mac));
+
+    RETURN_AND_PRINT_ON_ERROR(SendForceIp(tlHandle, ip, subnetMask, gateway));
+
+    return VmbErrorSuccess;
+}
+
+/**
+ * \brief Suspend the execution of the current thread for 100 milliseconds
+ */
+void Sleep100Ms()
+{
+#ifdef WIN32
+    Sleep(100);
+#else
+    struct timespec duration;
+    duration.tv_sec  = 0;
+    duration.tv_nsec = 100000000;
+    nanosleep(&duration, NULL);
+#endif
+}
+
+VmbError_t SendForceIp(const VmbHandle_t handle, const VmbInt64_t ip, const VmbInt64_t subnetMask, const VmbInt64_t gateway)
+{
+    /*
+     * Set the force ip features and send the force ip command
+     */
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntSet(handle, "GevDeviceForceIPAddress", ip));
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntSet(handle, "GevDeviceForceSubnetMask", subnetMask));
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureIntSet(handle, "GevDeviceForceGateway", gateway));
+    RETURN_AND_PRINT_ON_ERROR(VmbFeatureCommandRun(handle, "GevDeviceForceIP"));
+
+    VMB_PRINT("Force ip command sent. Waiting for completion...\n");
+
+    /*
+     * Wait for the force ip command to be completed
+     */
+    VmbBool_t  completedForceIp = VmbBoolFalse;
+    VmbInt16_t retriesLeft      = 25;
+    do
+    {
+        BREAK_AND_PRINT_ON_ERROR(VmbFeatureCommandIsDone(handle, "GevDeviceForceIP", &completedForceIp));
+        if (!completedForceIp)
+        {
+            Sleep100Ms();
+            retriesLeft -= 1;
+        }
+    } while ((!completedForceIp) && (retriesLeft > 0));
+
+    const char* const commandStatus = (completedForceIp) ? "completed" : "not completed";
+    VMB_PRINT("Force ip command %s.\n", commandStatus);
+
+    return completedForceIp ? VmbErrorSuccess : VmbErrorRetriesExceeded;
+}
diff --git a/VimbaX/api/examples/VmbC/ForceIp/ForceIp.h b/VimbaX/api/examples/VmbC/ForceIp/ForceIp.h
new file mode 100644
index 0000000000000000000000000000000000000000..9c5e7e98bdb86c4b552a1f57e00fd89538f628e4
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ForceIp/ForceIp.h
@@ -0,0 +1,47 @@
+/**
+ * \date 2022
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Declaration of the function which implements the force ip configuration
+ */
+
+#ifndef FORCE_IP_H_
+#define FORCE_IP_H_
+
+#include <VmbC/VmbC.h>
+
+/**
+ * \brief modifies the IP configuration for a camera identified by the given mac address
+ *
+ * Sends a force IP command to apply the given ip configuration.
+ * The operation is performed on each interface that the camera is connected to until success,
+ * but if the operation fails on all these interfaces then the operation tries each Vimba X and Vimba GigE transport layer until success.
+ * The configuration will be lost after a power-cycle of the camera.
+ * Assumes that the VmbC API is already started.
+ *
+ * By default the progress and error messages are printed out. Define _VMB_FORCE_IP_NO_PRINT to disable the print out.
+ *
+ * \param[in] mac     The desired mac address
+ * \param[in] ip      The desired ip address
+ * \param[in] subnet  The desired subnet mask
+ * \param[in] gateway The desired gateway. Optional, can be 0.
+ *
+ * \return error code reporting the success of the operation
+*/
+VmbError_t ForceIp(const char* const mac, const char* const ip, const char* const subnet, const char* const gateway);
+
+#endif // FORCE_IP_H_
diff --git a/VimbaX/api/examples/VmbC/ForceIp/ForceIpProg.c b/VimbaX/api/examples/VmbC/ForceIp/ForceIpProg.c
new file mode 100644
index 0000000000000000000000000000000000000000..5acfd1238c3237b794e3c4f1e8e0f85ce31855e2
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ForceIp/ForceIpProg.c
@@ -0,0 +1,52 @@
+/**
+ * \date 2022
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Definition of the function which implements the force ip example
+ */
+
+#include <stdio.h>
+
+#include "ForceIpProg.h"
+#include "ForceIp.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCExamplesCommon/PrintVmbVersion.h>
+#include <VmbCExamplesCommon/ErrorCodeToMessage.h>
+
+int ForceIpProg(const char* const strMAC, const char* const strIP, const char* const strSubnet, const char* const strGateway)
+{
+    /*
+     * Initialize the VmbC API
+     */
+    VmbError_t err = VmbStartup(NULL);
+    const VmbBool_t apiStartFailed = (VmbErrorSuccess != err);
+    if (apiStartFailed)
+    {
+        printf("VmbStartup failed. %s Error code: %d.", ErrorCodeToMessage(err), err);
+        return 1;
+    }
+
+    PrintVmbVersion();
+
+    err = ForceIp(strMAC, strIP, strSubnet, strGateway);
+
+    VmbShutdown();
+
+    return (err == VmbErrorSuccess) ? 0 : 1;
+}
diff --git a/VimbaX/api/examples/VmbC/ForceIp/ForceIpProg.h b/VimbaX/api/examples/VmbC/ForceIp/ForceIpProg.h
new file mode 100644
index 0000000000000000000000000000000000000000..91dc3cbfeb742c5d3a4c9db04cf0f134a7055e9b
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ForceIp/ForceIpProg.h
@@ -0,0 +1,42 @@
+/**
+ * \date 2022
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Declaration of the function which implements the force ip example
+ */
+
+#ifndef FORCE_IP_PROG_H_
+#define FORCE_IP_PROG_H_
+
+/**
+ * \brief modifies the IP configuration for a camera identified by the given mac address
+ *
+ * Sends a force IP command to apply the given ip configuration.
+ * The operation is performed on each interface that the camera is connected to until success,
+ * but if the operation fails on all these interfaces then the operation tries each Vimba X and Vimba GigE transport layer until success.
+ * The configuration will be lost after a power-cycle of the camera.
+ *
+ * \param[in] mac     The mac address of the desired camera whose ip configuration is to be updated
+ * \param[in] ip      The desired ip address
+ * \param[in] subnet  The desired subnet mask
+ * \param[in] gateway The desired gateway. Optional, can be 0.
+ *
+ * \return a code to return from main()
+*/
+int ForceIpProg(const char* const strMAC, const char* const strIP, const char* const strSubnet, const char* const strGateway);
+
+#endif // FORCE_IP_PROG_H_
diff --git a/VimbaX/api/examples/VmbC/ForceIp/main.c b/VimbaX/api/examples/VmbC/ForceIp/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..1e95e3db3c638ffa8e3a3243039edd0b3f27e7e3
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ForceIp/main.c
@@ -0,0 +1,50 @@
+/**
+ * \date 2022
+ * \copyright Allied Vision Technologies.  All Rights Reserved.
+ *
+ * \copyright Redistribution of this file, in original or modified form, without
+ *            prior written consent of Allied Vision Technologies is prohibited.
+ *
+ * \warning THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+ * NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+ *
+ * \brief Entry point of the Force IP example using the VmbC API
+ */
+
+#include <stdio.h>
+
+#include "ForceIpProg.h"
+
+int main( int argc, char* argv[] )
+{
+    printf("\n/////////////////////////////////\n");
+    printf("/// VmbC API Force IP Example ///\n");
+    printf("/////////////////////////////////\n\n");
+
+    if (4 > argc
+        || 5 < argc)
+    {
+        printf("Usage: ForceIp_VmbC <MAC> <IP> <Subnet> [<Gateway>]\n\n");
+        printf("Parameters:\n");
+        printf("<MAC>      The MAC address of the camera whose IP address shall be changed.\n");
+        printf("           Either hexadecimal with preceding 0x or decimal.\n");
+        printf("<IP>       The new IPv4 address of the camera in numbers and dots notation.\n");
+        printf("<Subnet>   The new network mask of the camera in numbers and dots notation.\n");
+        printf("<Gateway>  The address of a possible gateway if the camera is not connected\n");
+        printf("           to the host PC directly.\n\n");
+        printf("For example to change the IP address of a camera with the MAC address 0x0F3101D540\nto 169.254.1.1 in a class B network call:\n\n");
+        printf("ForceIp_VmbC 0x0F3101D540 169.254.1.1 255.255.0.0\n\n");
+
+        return 1;
+    }
+
+    return ForceIpProg(argv[1], argv[2], argv[3], (argc == 5) ? argv[4] : NULL);
+}
diff --git a/VimbaX/api/examples/VmbC/ListCameras/CMakeLists.txt b/VimbaX/api/examples/VmbC/ListCameras/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1d68d618d4994861ee28589a0244f053bb9975a0
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ListCameras/CMakeLists.txt
@@ -0,0 +1,33 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(ListCameras LANGUAGES C)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS C)
+
+if(NOT TARGET VmbCExamplesCommon)
+    add_subdirectory(../Common VmbCExamplesCommon_build)
+endif()
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(ListCameras_VmbC
+    main.c
+    ListCamerasProg.c
+    ListCamerasProg.h
+    ${COMMON_SOURCES}
+)
+
+source_group(Common FILES ${COMMON_SOURCES})
+
+target_link_libraries(ListCameras_VmbC PRIVATE Vmb::C VmbCExamplesCommon)
+set_target_properties(ListCameras_VmbC PROPERTIES
+    C_STANDARD 11
+    VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};$ENV{PATH}"
+)
diff --git a/VimbaX/api/examples/VmbC/ListCameras/ListCamerasProg.c b/VimbaX/api/examples/VmbC/ListCameras/ListCamerasProg.c
new file mode 100644
index 0000000000000000000000000000000000000000..3e98ae8c972e2580fbc2db7809ebe681b9ed5b94
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ListCameras/ListCamerasProg.c
@@ -0,0 +1,185 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListCamerasProg.c
+
+  Description: The ListCameras example will list all available cameras that
+               are found by VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include "ListCamerasProg.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCExamplesCommon/ArrayAlloc.h>
+#include <VmbCExamplesCommon/ListCameras.h>
+#include <VmbCExamplesCommon/ListInterfaces.h>
+#include <VmbCExamplesCommon/ListTransportLayers.h>
+#include <VmbCExamplesCommon/PrintVmbVersion.h>
+
+void printAccessModes(VmbAccessMode_t accessMode)
+{
+    bool printSeparator = false;
+    if (accessMode == VmbAccessModeNone)
+    {
+        printf("No access\n");
+        return;
+    }
+    if (accessMode & VmbAccessModeFull)
+    {
+        printf("Full access");
+        printSeparator = true;
+    }
+    if (accessMode & VmbAccessModeRead)
+    {
+        if (printSeparator == true)
+        {
+            printf(", ");
+        }
+        printf("Read access");
+        printSeparator = true;
+    }
+    if (accessMode & VmbAccessModeUnknown)
+    {
+        if (printSeparator == true)
+        {
+            printf(", ");
+        }
+        printf("Unknown access");
+        printSeparator = true;
+    }
+    if (accessMode & VmbAccessModeExclusive)
+    {
+        if (printSeparator == true)
+        {
+            printf(", ");
+        }
+        printf("Exclusive access");
+        printSeparator = true;
+    }
+    printf("\n");
+}
+
+int ListCamerasProg()
+{
+    PrintVmbVersion();
+    VmbError_t err = VmbStartup(NULL);
+
+    if (VmbErrorSuccess == err)
+    {
+        VmbCameraInfo_t* cameras = NULL;
+        VmbUint32_t cameraCount;
+        VmbInterfaceInfo_t* interfaces = NULL;
+        VmbUint32_t interfaceCount;
+        VmbTransportLayerInfo_t* transportLayers = NULL;
+        VmbUint32_t transportLayerCount;
+
+        err  = ListTransportLayers(&transportLayers, &transportLayerCount);
+        if (err == VmbErrorSuccess) printf("TransportLayers found: %u\n", transportLayerCount);
+        err |= ListInterfaces(&interfaces, &interfaceCount);
+        if (err == VmbErrorSuccess) printf("Interfaces found: %u\n", interfaceCount);
+        err |= ListCameras(&cameras, &cameraCount);
+
+        if (err == VmbErrorSuccess)
+        {
+            printf("Cameras found: %u\n\n", cameraCount);
+
+            VmbCameraInfo_t* const camerasEnd = cameras + cameraCount;
+            VmbInterfaceInfo_t* const interfacesEnd = interfaces + interfaceCount;
+            VmbTransportLayerInfo_t* const tlsEnd = transportLayers + transportLayerCount;
+
+            for (VmbCameraInfo_t* cam = cameras; cam != camerasEnd; ++cam)
+            {
+                printf("/// Camera Name            : %s\n"
+                       "/// Model Name             : %s\n"
+                       "/// Camera ID              : %s\n"
+                       "/// Serial Number          : %s\n",
+                       cam->cameraName,
+                       cam->modelName,
+                       cam->cameraIdString,
+                       cam->serialString
+                );
+
+                printf("/// Permitted Access Modes : ");
+                printAccessModes(cam->permittedAccess);
+
+                // find corresponding interface
+                VmbInterfaceInfo_t* foundIFace = NULL;
+                for (VmbInterfaceInfo_t* iFace = interfaces; foundIFace == NULL && iFace != interfacesEnd; ++iFace)
+                {
+                    if (cam->interfaceHandle == iFace->interfaceHandle)
+                    {
+                        foundIFace = iFace;
+                    }
+                }
+
+                if (foundIFace == NULL)
+                {
+                    printf("corresponding interface not found\n");
+                }
+                else
+                {
+                    printf("/// @ Interface ID         : %s\n", foundIFace->interfaceIdString);
+                }
+
+                // find corresponding transport layer
+                VmbTransportLayerInfo_t* foundTl = NULL;
+                for (VmbTransportLayerInfo_t* tl = transportLayers; foundTl == NULL && tl != tlsEnd; ++tl)
+                {
+                    if (cam->transportLayerHandle == tl->transportLayerHandle)
+                    {
+                        foundTl = tl;
+                    }
+                }
+
+                if (foundTl == NULL)
+                {
+                    printf("corresponding transport layer not found\n");
+                }
+                else
+                {
+                    printf("/// @ Transport Layer ID   : %s\n", foundTl->transportLayerIdString);
+                    printf("/// @ Transport Layer Path : %s\n\n\n", foundTl->transportLayerPath);
+                }
+            }
+        }
+        else
+        {
+            printf("listing the modules failed\n");
+        }
+
+        free(cameras);
+        free(interfaces);
+        free(transportLayers);
+        
+        VmbShutdown();
+    }
+    else
+    {
+        printf( "Could not start system. Error code: %d\n", err );
+    }
+    return err == VmbErrorSuccess ? 0 : 1;
+}
diff --git a/VimbaX/api/examples/VmbC/ListCameras/ListCamerasProg.h b/VimbaX/api/examples/VmbC/ListCameras/ListCamerasProg.h
new file mode 100644
index 0000000000000000000000000000000000000000..d33a91e6ae748deede92b1c3048c06b1e7738e9d
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ListCameras/ListCamerasProg.h
@@ -0,0 +1,38 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListCamerasProg.h
+
+  Description: The ListCameras example will list all available cameras that
+               are found by VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 LIST_CAMERAS_PROG_H_
+#define LIST_CAMERAS_PROG_H_
+
+/**
+ * Starts Vmb, gets all connected cameras, and prints out information about the camera name,
+ * model name, serial number, ID and the corresponding interface and transport layer IDs
+ */
+int ListCamerasProg();
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/ListCameras/main.c b/VimbaX/api/examples/VmbC/ListCameras/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..8b5d69fce3fd90577c08cbbf2523e7225d44563e
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ListCameras/main.c
@@ -0,0 +1,44 @@
+/*=============================================================================
+  Copyright (C) 2012-2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        main.c
+
+  Description: Main entry point of ListCameras example of VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <stdio.h>
+
+#include "ListCamerasProg.h"
+
+int main( int argc, char* argv[] )
+{
+    printf( "////////////////////////////////////\n" );
+    printf( "/// Vmb API List Cameras Example ///\n" );
+    printf( "////////////////////////////////////\n\n" );
+
+    if ( 1 < argc )
+    {
+        printf( "No parameters expected. Execution will not be affected by the provided parameter(s).\n\n" );
+    }
+    
+    return ListCamerasProg();
+}
diff --git a/VimbaX/api/examples/VmbC/ListFeatures/CMakeLists.txt b/VimbaX/api/examples/VmbC/ListFeatures/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e2ae9250718414ff7699fbb4c3bcb5a0b2585893
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ListFeatures/CMakeLists.txt
@@ -0,0 +1,33 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(ListFeatures LANGUAGES C)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS C)
+
+if(NOT TARGET VmbCExamplesCommon)
+    add_subdirectory(../Common VmbCExamplesCommon_build)
+endif()
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(ListFeatures_VmbC
+    main.c
+    ListFeatures.c
+    ListFeatures.h
+    ${COMMON_SOURCES}
+)
+
+source_group(Common FILES ${COMMON_SOURCES})
+
+target_link_libraries(ListFeatures_VmbC PRIVATE Vmb::C VmbCExamplesCommon)
+set_target_properties(ListFeatures_VmbC PROPERTIES
+    C_STANDARD 11
+    VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};$ENV{PATH}"
+)
diff --git a/VimbaX/api/examples/VmbC/ListFeatures/ListFeatures.c b/VimbaX/api/examples/VmbC/ListFeatures/ListFeatures.c
new file mode 100644
index 0000000000000000000000000000000000000000..b598cb16f6f30e36fb42987b2e53f521066e8477
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ListFeatures/ListFeatures.c
@@ -0,0 +1,458 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListFeatures.cpp
+
+  Description: The ListFeatures example will list all available features of a
+               module that are found by VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "ListFeatures.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCExamplesCommon/ArrayAlloc.h>
+#include <VmbCExamplesCommon/ErrorCodeToMessage.h>
+#include <VmbCExamplesCommon/ListCameras.h>
+#include <VmbCExamplesCommon/ListInterfaces.h>
+#include <VmbCExamplesCommon/ListTransportLayers.h>
+#include <VmbCExamplesCommon/TransportLayerTypeToString.h>
+
+/**
+ * \return \p string or an empty string, if \p string is null  
+ */
+char const* PrintableString(char const* string)
+{
+    return string == NULL ? "" : string;
+}
+
+/**
+ * Prints out all features and their values and details of a given handle.
+ *
+ * \param[in] moduleHandle The handle to print the features for
+ */
+VmbError_t ListFeatures(VmbHandle_t const moduleHandle, VmbFeatureVisibility_t printedFeatureMaximumVisibility)
+{
+    VmbUint32_t featureCount = 0;
+
+    // Get the number of features
+    VmbError_t err = VmbFeaturesList(moduleHandle,
+                                     NULL,
+                                     0,
+                                     &featureCount,
+                                     sizeof(VmbFeatureInfo_t));
+    if (VmbErrorSuccess == err
+        && 0 < featureCount)
+    {
+        VmbFeatureInfo_t* features = VMB_MALLOC_ARRAY(VmbFeatureInfo_t, featureCount);
+
+        if (NULL != features)
+        {
+            // Get the feature info
+            err = VmbFeaturesList(moduleHandle,
+                                  features,
+                                  featureCount,
+                                  &featureCount,
+                                  sizeof(VmbFeatureInfo_t));
+
+            if (VmbErrorSuccess == err)
+            {
+                // buffer to reuse for string feature retrieval
+                char* stringBuffer = NULL;
+                size_t stringBufferSize = 0;
+
+                
+                VmbFeatureInfo_t* const end = features + featureCount;
+
+                for (VmbFeatureInfo_t* feature = features; feature != end; ++feature)
+                {
+                    if (feature->visibility > printedFeatureMaximumVisibility)
+                    {
+                        // ignore feature with visibility that shouldn't be printed
+                        continue;
+                    }
+                    printf("/// Feature Name: %s\n", PrintableString(feature->name));
+                    printf("/// Display Name: %s\n", PrintableString(feature->displayName));
+                    printf("/// Tooltip: %s\n", PrintableString(feature->tooltip));
+                    printf("/// Description: %s\n", PrintableString(feature->description));
+                    printf("/// SNFC Namespace: %s\n", PrintableString(feature->sfncNamespace));
+                    printf("/// Value: ");
+
+                    VmbBool_t readable;
+                    if (VmbFeatureAccessQuery(moduleHandle, feature->name, &readable, NULL) != VmbErrorSuccess)
+                    {
+                        printf("Unable to determine, if the feature is readable\n");
+                    }
+                    else if (!readable)
+                    {
+                        printf("The feature is not readable\n");
+                    }
+                    else
+                    {
+                        switch (feature->featureDataType)
+                        {
+                        case VmbFeatureDataBool:
+                        {
+                            VmbBool_t value;
+                            err = VmbFeatureBoolGet(moduleHandle, feature->name, &value);
+                            if (VmbErrorSuccess == err)
+                            {
+                                printf("%d\n", value);
+                            }
+                            break;
+                        }
+                        case VmbFeatureDataEnum:
+                        {
+                            char const* value = NULL;
+                            err = VmbFeatureEnumGet(moduleHandle, feature->name, &value);
+                            if (VmbErrorSuccess == err)
+                            {
+                                printf("%s\n", value);
+                            }
+                            break;
+                        }
+                        case VmbFeatureDataFloat:
+                        {
+                            double value;
+                            err = VmbFeatureFloatGet(moduleHandle, feature->name, &value);
+                            if (err == VmbErrorSuccess)
+                            {
+                                printf("%f\n", value);
+                            }
+                            break;
+                        }
+                        case VmbFeatureDataInt:
+                        {
+                            VmbInt64_t value;
+                            err = VmbFeatureIntGet(moduleHandle, feature->name, &value);
+                            if (err == VmbErrorSuccess)
+                            {
+                                printf("%lld\n", value);
+                            }
+                            break;
+                        }
+                        case VmbFeatureDataString:
+                        {
+                            VmbUint32_t size = 0;
+                            err = VmbFeatureStringGet(moduleHandle, feature->name, NULL, 0, &size);
+                            if (VmbErrorSuccess == err
+                                && size > 0)
+                            {
+                                if (stringBufferSize < size)
+                                {
+                                    char* newBuffer = realloc(stringBuffer, size);
+                                    if (newBuffer != NULL)
+                                    {
+                                        stringBuffer = newBuffer;
+                                        stringBufferSize = size;
+                                    }
+                                }
+
+                                if (stringBufferSize >= size)
+                                {
+                                    err = VmbFeatureStringGet(moduleHandle, feature->name, stringBuffer, size, &size);
+                                    if (VmbErrorSuccess == err)
+                                    {
+                                        printf("%s\n", stringBuffer);
+                                    }
+                                }
+                                else
+                                {
+                                    printf("Could not allocate sufficient memory for string.\n");
+                                }
+                            }
+                            break;
+                        }
+                        case VmbFeatureDataCommand:
+                        default:
+                            printf("[None]\n");
+                            break;
+                        }
+                    }
+                            
+                    if (VmbErrorSuccess != err)
+                    {
+                        printf("Could not get feature value. Error code: %s\n", ErrorCodeToMessage(err));
+                    }
+                            
+                    printf("\n");
+                }
+
+                free(stringBuffer);
+                err = VmbErrorSuccess; // reset error to state prior to error on individual feature
+            }
+            else
+            {
+                printf("Could not get features. Error code: %d\n", err);
+            }
+
+            free(features);
+        }
+        else
+        {
+            printf("Could not allocate feature list.\n");
+            err = VmbErrorResources;
+        }
+    }
+    else
+    {
+        printf("Could not get features or the module does not provide any. Error code: %d\n", err);
+    }
+    return VmbErrorSuccess;
+}
+
+int ListTransportLayerFeatures(size_t tlIndex, VmbFeatureVisibility_t printedFeatureMaximumVisibility)
+{
+    VmbError_t err = VmbStartup(NULL);
+    if (err == VmbErrorSuccess)
+    {
+        VmbUint32_t count = 0;
+        VmbTransportLayerInfo_t* tls = NULL;
+
+        err = ListTransportLayers(&tls, &count);
+        if (err == VmbErrorSuccess)
+        {
+            size_t index = tlIndex;
+            if (index >= count)
+            {
+                printf("Transport layer index out of bounds; using index %zu instead\n", (index = count - 1));
+            }
+            VmbTransportLayerInfo_t* tl = tls + index;
+
+            printf("Transport layer id     : %s\n"
+                    "Transport layer model  : %s\n"
+                    "Transport layer name   : %s\n"
+                    "Transport layer path   : %s\n"
+                    "Transport layer type   : %s\n"
+                    "Transport layer vendor : %s\n"
+                    "Transport layer version: %s\n\n",
+                    PrintableString(tl->transportLayerIdString),
+                    PrintableString(tl->transportLayerModelName),
+                    PrintableString(tl->transportLayerName),
+                    PrintableString(tl->transportLayerPath),
+                    TransportLayerTypeToString(tl->transportLayerType),
+                    PrintableString(tl->transportLayerVendor),
+                    PrintableString(tl->transportLayerVersion));
+
+            err = ListFeatures(tl->transportLayerHandle, printedFeatureMaximumVisibility);
+            free(tls);
+        }
+        else
+        {
+            printf("Error listing the transport layers: %d\n", err);
+        }
+
+        VmbShutdown();
+    }
+    return (err == VmbErrorSuccess ? 0 : 1);
+}
+
+int ListInterfaceFeatures(size_t interfaceIndex, VmbFeatureVisibility_t printedFeatureMaximumVisibility)
+{
+    VmbError_t err = VmbStartup(NULL);
+    if (err == VmbErrorSuccess)
+    {
+        VmbUint32_t count = 0;
+        VmbInterfaceInfo_t* interfaces = NULL;
+        err = ListInterfaces(&interfaces, &count);
+        if (err == VmbErrorSuccess)
+        {
+            size_t index = interfaceIndex;
+            if (index >= count)
+            {
+                printf("Interface index out of bounds; using index %zu instead\n", (index = count - 1));
+            }
+            VmbInterfaceInfo_t* iFace = interfaces + index;
+            printf("Interface id  : %s\n"
+                    "Interface name: %s\n"
+                    "Interface type: %s\n\n",
+                    PrintableString(iFace->interfaceIdString),
+                    PrintableString(iFace->interfaceName),
+                    TransportLayerTypeToString(iFace->interfaceType));
+            err = ListFeatures(iFace->interfaceHandle, printedFeatureMaximumVisibility);
+            free(interfaces);
+        }
+        else if (count == 0)
+        {
+            printf("No interfaces found\n");
+        }
+        else
+        {
+            printf("Error listing the interfaces: %d\n", err);
+        }
+
+        VmbShutdown();
+    }
+    return (err == VmbErrorSuccess ? 0 : 1);
+}
+
+VmbCameraInfo_t* GetCameraByIndex(VmbCameraInfo_t* cameraInfos, size_t cameraCount, size_t index)
+{
+    size_t usedIndex = index;
+    if (index >= cameraCount)
+    {
+        usedIndex = cameraCount - 1;
+        printf("Camera index out of range: %zu; using camera at index %zu instead\n", index, usedIndex);
+    }
+    return cameraInfos + usedIndex;
+}
+
+
+typedef VmbHandle_t (*FeatureModuleExtractor)(VmbHandle_t remoteDevice, VmbCameraInfo_t* cameraInfo, size_t param);
+
+VmbHandle_t CameraModuleExtractor(VmbHandle_t remoteDevice, VmbCameraInfo_t* cameraInfo, size_t param)
+{
+    return (param == 0) ? cameraInfo->localDeviceHandle : remoteDevice;
+}
+
+/**
+ * \brief list the features of a module determined based on remote device handle, VmbCameraInfo_t struct and \p featureExtractorParam. 
+ */
+VmbError_t ListCameraRelatedFeatures(char const* cameraId, FeatureModuleExtractor featureExtractor, size_t featureExtractorParam, VmbFeatureVisibility_t printedFeatureMaximumVisibility)
+{
+    VmbHandle_t remoteDeviceHandle;
+
+    VmbError_t err = VmbCameraOpen(cameraId, VmbAccessModeRead, &remoteDeviceHandle);
+    if (err == VmbErrorSuccess)
+    {
+        VmbCameraInfo_t cameraInfo;
+        err = VmbCameraInfoQuery(cameraId, &cameraInfo, sizeof(VmbCameraInfo_t));
+        if (err == VmbErrorSuccess)
+        {
+            printf("Camera id    : %s\n"
+                   "Camera name  : %s\n"
+                   "Model name   : %s\n"
+                   "Serial string: %s\n\n",
+                   PrintableString(cameraInfo.cameraIdString),
+                   PrintableString(cameraInfo.cameraName),
+                   PrintableString(cameraInfo.modelName),
+                   PrintableString(cameraInfo.serialString));
+
+            VmbHandle_t handle = featureExtractor(remoteDeviceHandle, &cameraInfo, featureExtractorParam);
+            if (handle != NULL)
+            {
+                err = ListFeatures(handle, printedFeatureMaximumVisibility);
+            }
+            else
+            {
+                err = VmbErrorNotFound;
+            }
+        }
+        else
+        {
+            printf("Error retrieving info for the camera\n");
+        }
+
+        VmbCameraClose(remoteDeviceHandle);
+    }
+    else
+    {
+        printf("Error opening camera: %d\n", err);
+    }
+    return err;
+}
+
+int ListCameraFeaturesAtIndex(size_t index, bool remoteDevice, VmbFeatureVisibility_t printedFeatureMaximumVisibility)
+{
+    printf("Printing %s features of the camera at index %zu\n\n", remoteDevice ? "remote device" : "local device", index);
+    VmbError_t err = VmbStartup(NULL);
+    if (err == VmbErrorSuccess)
+    {
+        VmbUint32_t cameraCount = 0;
+        VmbCameraInfo_t* cameras = NULL;
+
+        err = ListCameras(&cameras, &cameraCount);
+        if (err == VmbErrorSuccess)
+        {
+            VmbCameraInfo_t* camera = GetCameraByIndex(cameras, cameraCount, index);
+            err = ListCameraRelatedFeatures(camera->cameraIdString, &CameraModuleExtractor, remoteDevice ? 1 : 0, printedFeatureMaximumVisibility);
+            free(cameras);
+        }
+        VmbShutdown();
+    }
+    return (err == VmbErrorSuccess ? 0 : 1);
+}
+
+int ListCameraFeaturesAtId(char const* id, bool remoteDevice, VmbFeatureVisibility_t printedFeatureMaximumVisibility)
+{
+    printf("Printing %s features of the camera with id %s\n\n", remoteDevice ? "remote device" : "local device", id);
+    VmbError_t err = VmbStartup(NULL);
+    if (err == VmbErrorSuccess)
+    {
+        err = ListCameraRelatedFeatures(id, &CameraModuleExtractor, remoteDevice ? 1 : 0, printedFeatureMaximumVisibility);
+        VmbShutdown();
+    }
+    return (err == VmbErrorSuccess ? 0 : 1);
+}
+
+VmbHandle_t StreamModuleExtractor(VmbHandle_t remoteDevice, VmbCameraInfo_t* cameraInfo, size_t streamIndex)
+{
+    if (cameraInfo->streamCount == 0)
+    {
+        printf("Camera does not provide streams\n");
+        return NULL;
+    }
+    size_t usedStreamIndex = streamIndex;
+    if (streamIndex >= cameraInfo->streamCount)
+    {
+        printf("Stream index out of range; using index %zu instead\n", (usedStreamIndex = cameraInfo->streamCount - 1));
+    }
+    printf("Printing features of stream %zu\n\n", usedStreamIndex);
+    return cameraInfo->streamHandles[usedStreamIndex];
+}
+
+int ListStreamFeaturesAtIndex(size_t cameraIndex, size_t streamIndex, VmbFeatureVisibility_t printedFeatureMaximumVisibility)
+{
+    printf("Printing features of stream %zu of the camera at index %zu\n\n", streamIndex, cameraIndex);
+    VmbError_t err = VmbStartup(NULL);
+    if (err == VmbErrorSuccess)
+    {
+        VmbUint32_t cameraCount = 0;
+        VmbCameraInfo_t* cameras = NULL;
+
+        err = ListCameras(&cameras, &cameraCount);
+        if (err == VmbErrorSuccess)
+        {
+            VmbCameraInfo_t* camera = GetCameraByIndex(cameras, cameraCount, cameraIndex);
+            err = ListCameraRelatedFeatures(camera->cameraIdString, &StreamModuleExtractor, streamIndex, printedFeatureMaximumVisibility);
+            free(cameras);
+        }
+        VmbShutdown();
+    }
+    return (err == VmbErrorSuccess ? 0 : 1);
+}
+
+int ListStreamFeaturesAtId(char const* cameraId, size_t streamIndex, VmbFeatureVisibility_t printedFeatureMaximumVisibility)
+{
+    printf("Printing features of stream %zu of the camera with id %s\n\n", streamIndex, cameraId);
+
+    VmbError_t err = VmbStartup(NULL);
+    if (err == VmbErrorSuccess)
+    {
+        err = ListCameraRelatedFeatures(cameraId, &StreamModuleExtractor, streamIndex, printedFeatureMaximumVisibility);
+        VmbShutdown();
+    }
+    return (err == VmbErrorSuccess ? 0 : 1);
+}
diff --git a/VimbaX/api/examples/VmbC/ListFeatures/ListFeatures.h b/VimbaX/api/examples/VmbC/ListFeatures/ListFeatures.h
new file mode 100644
index 0000000000000000000000000000000000000000..06cbccca68fbf8969482d6d3eea92aa4a55eba7f
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ListFeatures/ListFeatures.h
@@ -0,0 +1,100 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListFeatures.h
+
+  Description: The ListFeatures example will list all available features of a
+               camera that are found by VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 LIST_FEATURES_H_
+#define LIST_FEATURES_H_
+
+#include <stdbool.h>
+#include <stddef.h>
+
+#include "VmbC/VmbCTypeDefinitions.h"
+
+/**
+ * \brief list the features of a transport layer at a given index
+ *
+ * \param[in] tlIndex the zero based index of the transport layer
+ * 
+ * \return a code to return from main()
+ */
+int ListTransportLayerFeatures(size_t tlIndex, VmbFeatureVisibility_t printedFeatureMaximumVisibility);
+
+/**
+ * \brief list the features of a interface at a given index
+ *
+ * \param[in] interfaceIndex the zero based index of the transport layer
+ * \param[in] printedFeatureMaximumVisibility   the maximum visibility of features to be printed
+ * 
+ * \return a code to return from main()
+ */
+int ListInterfaceFeatures(size_t interfaceIndex, VmbFeatureVisibility_t printedFeatureMaximumVisibility);
+
+/**
+ * \brief list the features for the camera at a given index
+ * 
+ * \param[in] index                             the zero based index of the camera
+ * \param[in] remoteDevice                      true, if the remote device features should be printed, false otherwise
+ * \param[in] printedFeatureMaximumVisibility   the maximum visibility of features to be printed
+ * 
+ * \return a code to return from main()
+ */
+int ListCameraFeaturesAtIndex(size_t index, bool remoteDevice, VmbFeatureVisibility_t printedFeatureMaximumVisibility);
+
+/**
+ * \brief list the features for a camera with a given id
+ *
+ * \param[in] id            the camera id
+ * \param[in] remoteDevice  true, if the remote device features should be printed, false otherwise
+ * \param[in] printedFeatureMaximumVisibility   the maximum visibility of features to be printed
+ * 
+ * \return a code to return from main()
+ */
+int ListCameraFeaturesAtId(char const* id, bool remoteDevice, VmbFeatureVisibility_t printedFeatureMaximumVisibility);
+
+/**
+ * \brief list the stream features of a camera at a given index
+ * 
+ * \param[in] cameraIndex   the zero based index of the camera providing the stream
+ * \param[in] streamIndex   the index of the stream to print
+ * \param[in] printedFeatureMaximumVisibility   the maximum visibility of features to be printed
+ * 
+ * \return a code to return from main()
+ */
+int ListStreamFeaturesAtIndex(size_t cameraIndex, size_t streamIndex, VmbFeatureVisibility_t printedFeatureMaximumVisibility);
+
+/**
+ * \brief list the stream features of a camera at a given index
+ *
+ * \param[in] cameraId      the id of the camera providing the stream
+ * \param[in] streamIndex   the index of the stream to print
+ * \param[in] printedFeatureMaximumVisibility   the maximum visibility of features to be printed
+ * 
+ * \return a code to return from main()
+ */
+int ListStreamFeaturesAtId(char const* cameraId, size_t streamIndex, VmbFeatureVisibility_t printedFeatureMaximumVisibility);
+
+#endif
diff --git a/VimbaX/api/examples/VmbC/ListFeatures/main.c b/VimbaX/api/examples/VmbC/ListFeatures/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..cac7b48ed29d1327f81a0d4f62ba1ab30fc21360
--- /dev/null
+++ b/VimbaX/api/examples/VmbC/ListFeatures/main.c
@@ -0,0 +1,347 @@
+/*=============================================================================
+  Copyright (C) 2021-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        main.c
+
+  Description: Main entry point of ListFeatures example of VmbC.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <assert.h>
+#include <ctype.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <VmbC/VmbCTypeDefinitions.h>
+
+#include <VmbCExamplesCommon/PrintVmbVersion.h>
+
+#include "ListFeatures.h"
+
+#define VMB_PARAM_TL                    "/t"
+#define VMB_PARAM_INTERFACE             "/i"
+#define VMB_PARAM_REMOTE_DEVICE         "/c"
+#define VMB_PARAM_LOCAL_DEVICE          "/l"
+#define VMB_PARAM_FEATURE_VISIBILITY    "/v"
+#define VMB_PARAM_STREAM                "/s"
+#define VMB_PARAM_USAGE                 "/?"
+
+typedef struct VisibilityOption
+{
+    char const* m_fullName;
+    char m_shortName;
+    VmbFeatureVisibility_t m_enumValue;
+} VisibilityOption;
+
+static VisibilityOption const VisibilityOptions[4] =
+{
+    { "beginner",   'b', VmbFeatureVisibilityBeginner   },
+    { "expert",     'e', VmbFeatureVisibilityExpert     },
+    { "guru",       'g', VmbFeatureVisibilityGuru       },
+    { "invisible",  'i', VmbFeatureVisibilityInvisible  },
+};
+
+/**
+ * Try finding the visibility option as string
+ * 
+ * \return the visibility or VmbFeatureVisibilityUnknown, if it isn't found
+ */
+VmbFeatureVisibility_t FindVisibilityByFullName(char const* value)
+{
+    VisibilityOption const* pos = VisibilityOptions;
+    VisibilityOption const* const end = VisibilityOptions + sizeof(VisibilityOptions) / sizeof(*VisibilityOptions);
+    for (; pos != end; ++pos)
+    {
+        if (strcmp(value, pos->m_fullName) == 0)
+        {
+            return pos->m_enumValue;
+        }
+    }
+    return VmbFeatureVisibilityUnknown;
+}
+
+/**
+ * Try finding the visibility option as string
+ * 
+ * \return the visibility or VmbFeatureVisibilityUnknown, if it isn't found
+ */
+VmbFeatureVisibility_t FindVisibilityByShortName(char const* value)
+{
+    VisibilityOption const* pos = VisibilityOptions;
+    VisibilityOption const* const end = VisibilityOptions + sizeof(VisibilityOptions) / sizeof(*VisibilityOptions);
+
+    if ((*value == '\0') || (value[1] != '\0'))
+    {
+        return VmbFeatureVisibilityUnknown; // the input is not a single char
+    }
+
+    char c = *value;
+    for (; pos != end; ++pos)
+    {
+        if (c == pos->m_shortName)
+        {
+            return pos->m_enumValue;
+        }
+    }
+    return VmbFeatureVisibilityUnknown;
+}
+
+/**
+ * Try finding the visibility option as string
+ * 
+ * \return the visibility, if parsed successfully or VmbFeatureVisibilityUnknown
+ */
+VmbFeatureVisibility_t FindVisibilityByEnumConstant(char const* value)
+{
+    char* parseEnd;
+    unsigned long intValue = strtoul(value, &parseEnd, 10);
+
+    if ((*parseEnd != '\0') || (intValue < VmbFeatureVisibilityBeginner) || (intValue > VmbFeatureVisibilityInvisible))
+    {
+        // input is not a valid integral version of the enum
+        return VmbFeatureVisibilityUnknown;
+    }
+    return intValue;
+}
+
+void PrintUsage()
+{
+    printf("Usage:\n\n"
+           "  ListFeatures %s                                                    Print this usage information\n"
+           "  ListFeatures <Options>                                             Print the remote device features of the first camera\n"
+           "  ListFeatures <Options> %s TransportLayerIndex                      Show Transport Layer features\n"
+           "  ListFeatures <Options> %s InterfaceIndex                           Show interface features\n"
+           "  ListFeatures <Options> %s (CameraIndex | CameraId)                 Show the remote device features of the specified camera\n"
+           "  ListFeatures <Options> %s (CameraIndex | CameraId)                 Show the local device features of the specified camera\n"
+           "  ListFeatures <Options> %s (CameraIndex | CameraId) [StreamIndex]   Show the features of a stream for the specified camera\n"
+           "Options:\n",
+           VMB_PARAM_USAGE, VMB_PARAM_TL, VMB_PARAM_INTERFACE, VMB_PARAM_REMOTE_DEVICE, VMB_PARAM_LOCAL_DEVICE, VMB_PARAM_STREAM);
+
+    // print options for visibility
+    printf("  %s (", VMB_PARAM_FEATURE_VISIBILITY);
+
+    for (int i = 0; i != (sizeof(VisibilityOptions) / sizeof(*VisibilityOptions)); ++i)
+    {
+        VisibilityOption const* const option = VisibilityOptions + i;
+        printf("%c|%s|", option->m_shortName, option->m_fullName);
+    }
+    printf("[1-4])\n");
+
+    // print visibility option descriptions
+    for (int i = 0; i != (sizeof(VisibilityOptions) / sizeof(*VisibilityOptions)); ++i)
+    {
+        VisibilityOption const* const option = VisibilityOptions + i;
+        assert(option->m_enumValue == (i + 1)); // array value should match the array index
+        printf("     %c, %s, %u %*s: list features up to visibility %c%s\n",
+               option->m_shortName,
+               option->m_fullName,
+               (unsigned) option->m_enumValue,
+               (int)(sizeof("invisible") - 1 - strlen(option->m_fullName)), "",
+               toupper(*(option->m_fullName)), option->m_fullName + 1
+        );
+    }
+}
+
+/**
+ * Try to apply a locale that allows for UTF-8 string output 
+ */
+void TrySetUtf8CompatibleLocale()
+{
+    if (
+        (setlocale(LC_CTYPE, ".UTF8") == NULL)      // should work for Windows
+        && (setlocale(LC_CTYPE, "C.UTF8") == NULL)  // may work for Linux
+        )
+    {
+        // Maybe the user preferred locale supports UTF-8
+        setlocale(LC_CTYPE, "");
+
+        fprintf(stderr, "WARNING: could not set UTF-8 compatible locale; Strings containing non-ASCII characters may be displayed incorrectly\n");
+    }
+}
+
+int main(int argc, char* argv[])
+{
+    printf( "\n" );
+    printf( "///////////////////////////////////////\n" );
+    printf( "/// Vmb API List Features Example   ///\n" );
+    printf( "///////////////////////////////////////\n" );
+    printf( "\n" );
+
+    PrintVmbVersion();
+    printf("\n");
+
+    TrySetUtf8CompatibleLocale();
+
+    VmbFeatureVisibility_t printedFeatureMaximumVisibility = VmbFeatureVisibilityGuru;
+
+    // parse visibility (optional parameter)
+    if (argc >= 2)
+    {
+        if (strcmp(argv[1], VMB_PARAM_FEATURE_VISIBILITY) == 0)
+        {
+            if (argc == 2)
+            {
+                printf("the value of the %s command line option is missing\n", VMB_PARAM_FEATURE_VISIBILITY);
+                PrintUsage();
+                return 1;
+            }
+            // parse visibility
+            char const* visibilityParam = argv[2];
+            printedFeatureMaximumVisibility = FindVisibilityByFullName(visibilityParam);
+            if (printedFeatureMaximumVisibility == VmbFeatureVisibilityUnknown)
+            {
+                printedFeatureMaximumVisibility = FindVisibilityByShortName(visibilityParam);
+                if (printedFeatureMaximumVisibility == VmbFeatureVisibilityUnknown)
+                {
+                    printedFeatureMaximumVisibility = FindVisibilityByEnumConstant(visibilityParam);
+                    if (printedFeatureMaximumVisibility == VmbFeatureVisibilityUnknown)
+                    {
+                        // none of the attempts to parse the visibility was successful -> error
+                        printf("invalid visibility specified as command line parameter: %s\n", visibilityParam);
+                        PrintUsage();
+                        return 1;
+                    }
+                }
+            }
+
+            argc -= 2;
+            argv += 2;
+        }
+    }
+
+    if(argc < 2)
+    {
+        return ListCameraFeaturesAtIndex(0, true, printedFeatureMaximumVisibility);
+    }
+    else
+    {
+        char const* const moduleCommand = argv[1];
+        if (strcmp(moduleCommand, VMB_PARAM_TL) == 0)
+        {
+            if (argc < 3)
+            {
+                printf("transport layer index missing but required for option %s\n", VMB_PARAM_TL);
+            }
+            else
+            {
+                char* end = argv[2];
+                unsigned long index = strtoul(argv[2], &end, 10);
+                if (*end != '\0')
+                {
+                    printf("transport layer index required but found %s\n", argv[2]);
+                }
+                else
+                {
+                    return ListTransportLayerFeatures(index, printedFeatureMaximumVisibility);
+                }
+            }
+        }
+        else if (strcmp(moduleCommand, VMB_PARAM_INTERFACE) == 0)
+        {
+            if (argc < 3)
+            {
+                printf("interface index missing but required for option %s\n", VMB_PARAM_INTERFACE);
+            }
+            else
+            {
+                char* end = argv[2];
+                unsigned long index = strtoul(argv[2], &end, 10);
+                if (*end != '\0')
+                {
+                    printf("interface index required but found %s\n", argv[2]);
+                }
+                else
+                {
+                    return ListInterfaceFeatures(index, printedFeatureMaximumVisibility);
+                }
+            }
+        }
+        else if (strcmp(moduleCommand, VMB_PARAM_REMOTE_DEVICE) == 0
+                 || strcmp(moduleCommand, VMB_PARAM_LOCAL_DEVICE) == 0)
+        {
+            bool remoteDevice = (strcmp(moduleCommand, VMB_PARAM_REMOTE_DEVICE) == 0);
+            if (argc < 3)
+            {
+                printf("listing device features requires the index or the id of the camera to be provided\n");
+            }
+            else
+            {
+                char* end = argv[2];
+                unsigned long index = strtoul(argv[2], &end, 10);
+                if (*end != '\0')
+                {
+                    // no an index -> try using the parameter as id
+                    return ListCameraFeaturesAtId(argv[2], remoteDevice, printedFeatureMaximumVisibility);
+                }
+                else
+                {
+                    return ListCameraFeaturesAtIndex(index, remoteDevice, printedFeatureMaximumVisibility);
+                }
+            }
+        }
+        else if (strcmp(moduleCommand, VMB_PARAM_STREAM) == 0)
+        {
+            if (argc < 3)
+            {
+                printf("listing stream feature requires the index or the id of the camera to be provided\n");
+            }
+            else
+            {
+                unsigned long streamIndex = 0;
+                if (argc >= 4)
+                {
+                    char* end = argv[2];
+                    streamIndex = strtoul(argv[3], &end, 10);
+                    if (*end != '\0')
+                    {
+                        printf("the index of the stream needs to be valid, but found %s\n", argv[3]);
+                        return 1;
+                    }
+                }
+                char* end = argv[2];
+                unsigned long cameraIndex = strtoul(argv[2], &end, 10);
+                if (*end != '\0')
+                {
+                    // no an index -> try using the parameter as camers id
+                    return ListStreamFeaturesAtId(argv[2], streamIndex, printedFeatureMaximumVisibility);
+                }
+                else
+                {
+                    return ListStreamFeaturesAtIndex(cameraIndex, streamIndex, printedFeatureMaximumVisibility);
+                }
+            }
+        }
+        else if(strcmp(moduleCommand, VMB_PARAM_USAGE) == 0)
+        {
+            PrintUsage();
+            return 0;
+        }
+        else
+        {
+            printf("invalid parameter: %s\n\n", argv[1]);
+            PrintUsage();
+        }
+        return 1;
+    }
+
+}
diff --git a/VimbaX/api/examples/VmbCPP/AsynchronousGrab/AcquisitionHelper.cpp b/VimbaX/api/examples/VmbCPP/AsynchronousGrab/AcquisitionHelper.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..05c11aaa0b09611cf108902502793f6bcc53f0f3
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/AsynchronousGrab/AcquisitionHelper.cpp
@@ -0,0 +1,195 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        AcquisitionHelper.cpp
+
+  Description: Helper class for acquiring images with VmbCPP
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "AcquisitionHelper.h"
+
+#include <VmbCPP/VmbCPP.h>
+
+#include <exception>
+#include <iostream>
+
+
+namespace VmbCPP {
+namespace Examples {
+
+/**
+ * \brief IFrameObserver implementation for asynchronous image acquisition
+ */
+class FrameObserver : public IFrameObserver
+{
+public:
+    FrameObserver(CameraPtr camera) : IFrameObserver(camera) {};
+
+    void FrameReceived(const FramePtr frame)
+    {
+        std::cout << "." << std::flush;
+        m_pCamera->QueueFrame(frame);
+    };
+};
+
+AcquisitionHelper::AcquisitionHelper() :
+    AcquisitionHelper(nullptr)
+{
+}
+
+/**
+ * \brief Helper function to adjust the packet size for Allied vision GigE cameras
+ */
+void GigEAdjustPacketSize(CameraPtr camera)
+{
+    StreamPtrVector streams;
+    VmbErrorType err = camera->GetStreams(streams);
+
+    if (err != VmbErrorSuccess || streams.empty())
+    {
+        throw std::runtime_error("Could not get stream modules, err=" + std::to_string(err));
+    }
+
+    FeaturePtr feature;
+    err = streams[0]->GetFeatureByName("GVSPAdjustPacketSize", feature);
+
+    if (err == VmbErrorSuccess)
+    {
+        err = feature->RunCommand();
+        if (err == VmbErrorSuccess)
+        {
+            bool commandDone = false;
+            do
+            {
+                if (feature->IsCommandDone(commandDone) != VmbErrorSuccess)
+                {
+                    break;
+                }
+            } while (commandDone == false);
+        }
+        else
+        {
+            std::cout << "Error while executing GVSPAdjustPacketSize, err=" + std::to_string(err) << std::endl;
+        }
+    }
+}
+
+AcquisitionHelper::AcquisitionHelper(const char* cameraId) :
+    m_vmbSystem(VmbSystem::GetInstance())
+{
+    VmbErrorType err = m_vmbSystem.Startup();
+
+    if (err != VmbErrorSuccess)
+    {
+        throw std::runtime_error("Could not start API, err=" + std::to_string(err));
+    }
+
+    CameraPtrVector cameras;
+    err = m_vmbSystem.GetCameras(cameras);
+    if (err != VmbErrorSuccess)
+    {
+        m_vmbSystem.Shutdown();
+        throw std::runtime_error("Could not get cameras, err=" + std::to_string(err));
+    }
+
+    if (cameras.empty())
+    {
+        m_vmbSystem.Shutdown();
+        throw std::runtime_error("No cameras found.");
+    }
+
+    if (cameraId != nullptr)
+    {
+        err = m_vmbSystem.GetCameraByID(cameraId, m_camera);
+        if (err != VmbErrorSuccess)
+        {
+            m_vmbSystem.Shutdown();
+            throw std::runtime_error("No camera found with ID=" + std::string(cameraId) + ", err = " + std::to_string(err));
+        }
+    }
+    else
+    {
+        m_camera = cameras[0];
+    }
+
+    err = m_camera->Open(VmbAccessModeFull);
+    if (err != VmbErrorSuccess)
+    {
+        m_vmbSystem.Shutdown();
+        throw std::runtime_error("Could not open camera, err=" + std::to_string(err));
+    }
+
+    std::string name;
+    if (m_camera->GetName(name) == VmbErrorSuccess)
+    {
+        std::cout << "Opened Camera " << name << std::endl;
+    }
+
+    try
+    {
+        GigEAdjustPacketSize(m_camera);
+    }
+    catch (std::runtime_error& e)
+    {
+        m_vmbSystem.Shutdown();
+        throw e;
+    }
+}
+
+AcquisitionHelper::~AcquisitionHelper()
+{
+    try
+    {
+        Stop();
+    }
+    catch(std::runtime_error& e)
+    {
+        std::cout << e.what() << std::endl;
+    }
+    catch (...)
+    {
+        // ignore
+    }
+
+    m_vmbSystem.Shutdown();
+}
+
+void AcquisitionHelper::Start()
+{
+    VmbErrorType err = m_camera->StartContinuousImageAcquisition(5, IFrameObserverPtr(new FrameObserver(m_camera)));
+    if (err != VmbErrorSuccess)
+    {
+        throw std::runtime_error("Could not start acquisition, err=" + std::to_string(err));
+    }
+}
+
+void AcquisitionHelper::Stop()
+{
+    VmbErrorType err = m_camera->StopContinuousImageAcquisition();
+    if (err != VmbErrorSuccess)
+    {
+        throw std::runtime_error("Could not stop acquisition, err=" + std::to_string(err));
+    }
+}
+
+} // namespace Examples
+} // namespace VmbCPP
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbCPP/AsynchronousGrab/AcquisitionHelper.h b/VimbaX/api/examples/VmbCPP/AsynchronousGrab/AcquisitionHelper.h
new file mode 100644
index 0000000000000000000000000000000000000000..d81629815301b4986378a235d5503605a64cdab1
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/AsynchronousGrab/AcquisitionHelper.h
@@ -0,0 +1,73 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        AcquisitionHelper.h
+
+  Description: Helper class for acquiring images with VmbCPP
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 ASYNCHRONOUS_GRAB_H_
+#define ASYNCHRONOUS_GRAB_H_
+
+#include <VmbCPP/VmbCPP.h>
+
+namespace VmbCPP {
+namespace Examples {
+
+class AcquisitionHelper
+{
+private:
+    VmbSystem&  m_vmbSystem;
+    CameraPtr   m_camera;
+
+public:
+    /**
+     * \brief The constructor will initialize the API and open the given camera
+     *
+     * \param[in] pCameraId  zero terminated C string with the camera id for the camera to be used
+     */
+    AcquisitionHelper(const char* cameraId);
+
+    /**
+     * \brief The constructor will initialize the API and open the first available camera
+     */
+    AcquisitionHelper();
+
+    /**
+     * \brief The destructor will stop the acquisition and shutdown the API
+     */
+    ~AcquisitionHelper();
+
+    /**
+     * \brief Start the acquisition.
+     */
+    void Start();
+
+    /**
+     * \brief Stop the acquisition.
+     */
+    void Stop();
+};
+
+}} // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/examples/VmbCPP/AsynchronousGrab/CMakeLists.txt b/VimbaX/api/examples/VmbCPP/AsynchronousGrab/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4cb1d5aec3ada083fd3e6255229d09d374bf7b4f
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/AsynchronousGrab/CMakeLists.txt
@@ -0,0 +1,26 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(AsynchronousGrab LANGUAGES CXX)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS CPP)
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(AsynchronousGrab_VmbCPP
+    main.cpp
+    AcquisitionHelper.cpp
+    AcquisitionHelper.h   
+)
+
+target_link_libraries(AsynchronousGrab_VmbCPP PRIVATE Vmb::CPP)
+set_target_properties(AsynchronousGrab_VmbCPP PROPERTIES
+    CXX_STANDARD 11
+    VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};$ENV{PATH}"
+)
diff --git a/VimbaX/api/examples/VmbCPP/AsynchronousGrab/main.cpp b/VimbaX/api/examples/VmbCPP/AsynchronousGrab/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1ca64737b120da537ef0e211e1eb1bcb153c4967
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/AsynchronousGrab/main.cpp
@@ -0,0 +1,57 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        main.c
+
+  Description: Implementation of main entry point of AsynchronousGrab example
+               of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "AcquisitionHelper.h"
+
+#include <exception>
+#include <iostream>
+
+int main()
+{
+    std::cout << "////////////////////////////////////////\n";
+    std::cout << "/// VmbCPP Asynchronous Grab Example ///\n";
+    std::cout << "////////////////////////////////////////\n\n";
+
+    try
+    {
+        VmbCPP::Examples::AcquisitionHelper acquisitionHelper;
+
+        acquisitionHelper.Start();
+
+        std::cout << "Press <enter> to stop acquisition...\n";
+        getchar();
+    }
+    catch (std::runtime_error& e)
+    {
+        std::cout << e.what() << std::endl;
+        return 1;
+    }
+
+    return 0;
+    // AcquisitionHelper's destructor will stop the acquisition and shutdown the VmbCPP API
+}
diff --git a/VimbaX/api/examples/VmbCPP/CMakeLists.txt b/VimbaX/api/examples/VmbCPP/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6963f5fa3837340733305c5b06c2e4f7b19c90d9
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/CMakeLists.txt
@@ -0,0 +1,48 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(VmbCPPExamples)
+
+set(VMB_CPP_EXAMPLES_LIST IGNORE CACHE STRING
+    "a semicolon separated list of examples to configure; takes precedence over other settings to enable or disable examples"
+)
+
+set(VMB_CPP_ALL_EXAMPLES)
+
+# function takes the directory and optionally aliases other than the directory the example can be refered by
+function(vmb_cpp_example DIRECTORY)
+    set(VMB_CPP_EXAMPLE_IGNORE_${DIRECTORY} False CACHE BOOL "Ignore the ${DIRECTORY} example; VMB_CPP_EXAMPLES_LIST takes precedence over this property")
+    foreach(_ALIAS IN LISTS DIRECTORY ARGN)
+        set(VMB_CPP_ALIAS_${_ALIAS} ${DIRECTORY} PARENT_SCOPE)
+    endforeach()
+    if (NOT VMB_CPP_EXAMPLE_IGNORE_${DIRECTORY})
+        set(VMB_CPP_ALL_EXAMPLES ${VMB_CPP_ALL_EXAMPLES} ${DIRECTORY} PARENT_SCOPE)
+    endif()
+endfunction()
+
+# Actual examples list
+vmb_cpp_example(AsynchronousGrab)
+vmb_cpp_example(SynchronousGrab)
+vmb_cpp_example(ChunkAccess)
+vmb_cpp_example(ListCameras)
+
+# overwrite list of examples set based on individual ignores
+if(VMB_CPP_EXAMPLES_LIST)
+    set(VMB_CPP_ALL_EXAMPLES)
+    foreach(_EXAMPLE IN LISTS VMB_CPP_EXAMPLES_LIST)
+        set(_DIR ${VMB_CPP_ALIAS_${_EXAMPLE}})
+        if (NOT _DIR)
+            message(FATAL_ERROR "${_EXAMPLE} found in VMB_CPP_EXAMPLES_LIST is not a known example")
+        endif()
+    endforeach()
+endif()
+
+# finally add the necessary subdirectories
+list(REMOVE_DUPLICATES VMB_CPP_ALL_EXAMPLES)
+
+if (NOT VMB_CPP_ALL_EXAMPLES)
+    message(FATAL_ERROR "no active examples")
+endif()
+
+foreach(_EXAMPLE IN LISTS VMB_CPP_ALL_EXAMPLES)
+    add_subdirectory(${_EXAMPLE})
+endforeach()
diff --git a/VimbaX/api/examples/VmbCPP/ChunkAccess/AcquisitionHelperChunk.cpp b/VimbaX/api/examples/VmbCPP/ChunkAccess/AcquisitionHelperChunk.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b12c35051a5ffa51136ba36705a9bfc35a39d702
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/ChunkAccess/AcquisitionHelperChunk.cpp
@@ -0,0 +1,377 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:         AcquisitionHelperChunk.cpp
+
+  Description:  Helper class for acquiring images with VmbCPP
+                and accessing Chunk data
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "AcquisitionHelperChunk.h"
+
+#include <VmbCPP/VmbCPP.h>
+
+#include <exception>
+#include <iostream>
+
+
+namespace VmbCPP {
+namespace Examples {
+
+/**
+ * \brief Helper function to adjust the packet size for Allied vision GigE cameras
+ */
+void GigEAdjustPacketSize(CameraPtr camera)
+{
+    StreamPtrVector streams;
+    VmbErrorType err = camera->GetStreams(streams);
+
+    if (err != VmbErrorSuccess || streams.empty())
+    {
+        throw std::runtime_error("Could not get stream modules, err=" + std::to_string(err));
+    }
+
+    FeaturePtr feature;
+    err = streams[0]->GetFeatureByName("GVSPAdjustPacketSize", feature);
+
+    if (err == VmbErrorSuccess)
+    {
+        err = feature->RunCommand();
+        if (err == VmbErrorSuccess)
+        {
+            bool commandDone = false;
+            do
+            {
+                if (feature->IsCommandDone(commandDone) != VmbErrorSuccess)
+                {
+                    break;
+                }
+            } while (commandDone == false);
+        }
+        else
+        {
+            std::cout << "Error while executing GVSPAdjustPacketSize, err=" + std::to_string(err) << std::endl;
+        }
+    }
+}
+
+/**
+ * \brief Helper function to retrieve a feature value as std::string
+ * 
+ * \param[in]  feat Feature to query the value from
+ * \param[out] val  Value as string
+ */
+VmbErrorType GetFeatureValueAsString(FeaturePtr feat, std::string& val)
+{
+    VmbErrorType err;
+    VmbFeatureDataType type;
+
+    err = feat->GetDataType(type);
+
+    if (err != VmbErrorSuccess)
+    {
+        return err;
+    }        
+
+    switch (type)
+    {
+    case VmbFeatureDataBool:
+        VmbBool_t boolVal;
+        if (feat->GetValue(boolVal) == VmbErrorSuccess)
+        {
+            val = boolVal ? "true" : "false";
+            return VmbErrorSuccess;
+        }
+        break;
+    case VmbFeatureDataInt:
+        VmbInt64_t intVal;
+        if (feat->GetValue(intVal) == VmbErrorSuccess)
+        {
+            val = std::to_string(intVal);
+            return VmbErrorSuccess;
+        }
+        break;
+    case VmbFeatureDataFloat:
+        double floatVal;
+        if (feat->GetValue(floatVal) == VmbErrorSuccess)
+        {
+            val = std::to_string(floatVal);
+            return VmbErrorSuccess;
+        }
+        break;
+    case VmbFeatureDataEnum:
+    case VmbFeatureDataString:
+        std::string stringVal;
+        if (feat->GetValue(stringVal) == VmbErrorSuccess)
+        {
+            val = stringVal;
+            return VmbErrorSuccess;
+        }
+        break;
+    }
+
+    return VmbErrorNotSupported;
+}
+
+/**
+ * \brief IFrameObserver implementation for asynchronous image acquisition and Chunk data access
+ */
+class FrameObserverChunk : public IFrameObserver
+{
+private:
+    std::vector<std::string> m_chunkFeatures;
+
+public:
+    FrameObserverChunk(CameraPtr camera, std::vector<std::string> chunkFeatures) :
+        IFrameObserver(camera),
+        m_chunkFeatures(chunkFeatures)
+    {}
+
+    void FrameReceived(const FramePtr frame)
+    {
+        std::cout << "Frame Received" << std::endl;
+
+        VmbFrameStatusType frameStatus;
+        if (frame->GetReceiveStatus(frameStatus) == VmbErrorSuccess
+            && frameStatus == VmbFrameStatusComplete)
+        {
+            // Access the Chunk data of the incoming frame. Chunk data accesible inside lambda function
+            VmbErrorType err = frame->AccessChunkData([this](ChunkFeatureContainerPtr& chunkFeatures) -> VmbErrorType
+                {
+                    FeaturePtr feat;
+                    VmbErrorType err;
+
+                    // Try to access all Chunk features that were passed to the FrameObserverChunk instance
+                    for (auto& chunkFeature : m_chunkFeatures)
+                    {
+                        std::cout << "\t";
+
+                        // Get a specific Chunk feature via the FeatureContainer chunkFeatures
+                        err = chunkFeatures->GetFeatureByName(chunkFeature.c_str(), feat);
+                        if (err != VmbErrorSuccess)
+                        {
+                            std::cout << "Could not get Chunk feature \"" << chunkFeature << "\", err=" << std::to_string(err);
+                            continue;
+                        }
+
+                        // The Chunk feature can be read like any other feature
+                        std::string val;
+                        err = GetFeatureValueAsString(feat, val);
+                        if (err == VmbErrorSuccess)
+                        {
+                            std::cout << "" << chunkFeature << "=" << val;
+                        }
+                        else
+                        {
+                            std::cout << "Could not get value of Chunk feature \"" << chunkFeature << "\", err=" << std::to_string(err);
+                        }
+
+                        std::cout << std::endl;
+                    }
+
+                    // The return value of this function will passed to be the return value of Frame::AccessChunkData()
+                    return VmbErrorSuccess;
+                });
+          
+            if (err != VmbErrorSuccess)
+            {
+                std::cout << "Error accessing Chunk data: " << err << std::endl;
+            }
+        }
+        else
+        {
+            std::cout << "Invalid frame" << std::endl;
+        }
+
+        std::cout << std::endl;
+        m_pCamera->QueueFrame(frame);
+    }
+};
+
+AcquisitionHelperChunk::AcquisitionHelperChunk() :
+    AcquisitionHelperChunk(nullptr)
+{
+}
+
+AcquisitionHelperChunk::AcquisitionHelperChunk(const char* cameraId) :
+    m_vmbSystem(VmbSystem::GetInstance())
+{
+    VmbErrorType err = m_vmbSystem.Startup();
+
+    if (err != VmbErrorSuccess)
+    {
+        throw std::runtime_error("Could not start API, err=" + std::to_string(err));
+    }
+
+    CameraPtrVector cameras;
+    err = m_vmbSystem.GetCameras(cameras);
+    if (err != VmbErrorSuccess)
+    {
+        m_vmbSystem.Shutdown();
+        throw std::runtime_error("Could not get cameras, err=" + std::to_string(err));
+    }
+
+    if (cameras.empty())
+    {
+        m_vmbSystem.Shutdown();
+        throw std::runtime_error("No cameras found.");
+    }
+
+    if (cameraId != nullptr)
+    {
+        err = m_vmbSystem.GetCameraByID(cameraId, m_camera);
+        if (err != VmbErrorSuccess)
+        {
+            m_vmbSystem.Shutdown();
+            throw std::runtime_error("No camera found with ID=" + std::string(cameraId) + ", err = " + std::to_string(err));
+        }
+    }
+    else
+    {
+        m_camera = cameras[0];
+    }
+
+    err = m_camera->Open(VmbAccessModeFull);
+    if (err != VmbErrorSuccess)
+    {
+        m_vmbSystem.Shutdown();
+        throw std::runtime_error("Could not open camera, err=" + std::to_string(err));
+    }
+
+    std::string name;
+    if (m_camera->GetName(name) == VmbErrorSuccess)
+    {
+        std::cout << "Opened Camera " << name << std::endl;
+    }
+
+    try
+    {
+        GigEAdjustPacketSize(m_camera);
+    }
+    catch (std::runtime_error& e)
+    {
+        m_vmbSystem.Shutdown();
+        throw e;
+    }
+}
+
+AcquisitionHelperChunk::~AcquisitionHelperChunk()
+{
+    try
+    {
+        Stop();
+    }
+    catch (std::runtime_error& e)
+    {
+        std::cout << e.what() << std::endl;
+    }
+    catch (...)
+    {
+        // ignore
+    }
+
+    m_vmbSystem.Shutdown();
+}
+
+void AcquisitionHelperChunk::EnableChunk()
+{
+    static std::vector<std::string> const defaultChunkFeatures
+    {
+        "ChunkFrameID",
+        "ChunkTimestamp",
+        "ChunkExposureTime",
+        "ChunkGain"
+    };
+
+    FeaturePtr feat;
+
+    if (!( (m_camera->GetFeatureByName("ChunkModeActive", feat) == VmbErrorSuccess)
+           && (feat->SetValue(false) == VmbErrorSuccess) ))
+    {
+        std::cout << "Could not set ChunkModeActive. Does the camera provide Chunk Data?" << std::endl;
+        return;
+    }
+    else {
+        for (const auto& chunkFeature : defaultChunkFeatures)
+        {
+            static const std::string chunkPrefix = "Chunk";
+            std::string chunkEnumEntry = chunkFeature.substr(chunkPrefix.size());
+
+            if (m_camera->GetFeatureByName("ChunkSelector", feat) == VmbErrorSuccess)
+            {
+                if (feat->SetValue(chunkEnumEntry.c_str()) == VmbErrorSuccess)
+                {
+                    if (m_camera->GetFeatureByName("ChunkEnable", feat) == VmbErrorSuccess)
+                    {
+                        if (feat->SetValue(true) == VmbErrorSuccess)
+                        {
+                            m_chunkFeatures.push_back(chunkFeature);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    if (!m_chunkFeatures.empty())
+    {
+        std::cout << "Enabled the following Chunk features: " << std::endl;
+        for (const auto& chunkFeature : m_chunkFeatures)
+        {
+            std::cout << "\t-" << chunkFeature << std::endl;
+        }
+        std::cout << std::endl;
+    }
+    else
+    {
+        std::cout << "Could not enable Chunk features. Does the camera provide Chunk Data?" << std::endl;
+        return;
+    }
+
+    if (!( (m_camera->GetFeatureByName("ChunkModeActive", feat) == VmbErrorSuccess)
+           && (feat->SetValue(true) == VmbErrorSuccess) ))
+    {
+        std::cout << "Could not set ChunkModeActive. Does the camera provide Chunk Data?" << std::endl;
+        return;
+    }
+}
+
+void AcquisitionHelperChunk::Start()
+{
+    VmbErrorType err = m_camera->StartContinuousImageAcquisition(5, IFrameObserverPtr(new FrameObserverChunk(m_camera, m_chunkFeatures)));
+    if (err != VmbErrorSuccess)
+    {
+        throw std::runtime_error("Could not start acquisition, err=" + std::to_string(err));
+    }
+}
+
+void AcquisitionHelperChunk::Stop()
+{
+    VmbErrorType err = m_camera->StopContinuousImageAcquisition();
+    if (err != VmbErrorSuccess)
+    {
+        throw std::runtime_error("Could not stop acquisition, err=" + std::to_string(err));
+    }
+}
+
+} // namespace Examples
+} // namespace VmbCPP
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbCPP/ChunkAccess/AcquisitionHelperChunk.h b/VimbaX/api/examples/VmbCPP/ChunkAccess/AcquisitionHelperChunk.h
new file mode 100644
index 0000000000000000000000000000000000000000..3ba1f1d60cc7571b60ec127df4fb2b0a0806e120
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/ChunkAccess/AcquisitionHelperChunk.h
@@ -0,0 +1,79 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:         AcquisitionHelperChunk.h
+
+  Description:  Helper class for acquiring images with VmbCPP
+                and accessing Chunk data
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#pragma once
+
+#include <VmbCPP/VmbCPP.h>
+#include <vector>
+#include <mutex>
+
+namespace VmbCPP {
+namespace Examples {
+
+class AcquisitionHelperChunk
+{
+private:
+    VmbSystem&                  m_vmbSystem;
+    CameraPtr                   m_camera;
+    std::vector<std::string>    m_chunkFeatures;
+
+public:
+    /**
+     * \brief The constructor will initialize the API and open the given camera
+     * 
+     * \param[in] pCameraId  zero terminated C string with the camera id for the camera to be used
+     */
+    AcquisitionHelperChunk(const char* cameraId);
+
+    /**
+     * \brief The constructor will initialize the API and open the first available camera
+     */
+    AcquisitionHelperChunk();
+
+    /**
+     * \brief The destructor will stop the acquisition and shutdown the API
+     */
+    ~AcquisitionHelperChunk();
+
+    /**
+     * \brief Enable the default Chunk features
+     */
+    void EnableChunk();
+
+    /**
+     * \brief Start the acquisition. Chunk features of incoming frames will be printed to console.
+     */
+    void Start();
+
+    /**
+     * \brief Stop the acquisition
+     */
+    void Stop();
+};
+
+}} // namespace VmbCPP::Examples
diff --git a/VimbaX/api/examples/VmbCPP/ChunkAccess/CMakeLists.txt b/VimbaX/api/examples/VmbCPP/ChunkAccess/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e3acc1e165c8e3d9c7229408cbe6df95c1f8eb61
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/ChunkAccess/CMakeLists.txt
@@ -0,0 +1,26 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(ChunkAccess LANGUAGES CXX)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS CPP)
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(ChunkAccess_VmbCPP
+    main.cpp
+    AcquisitionHelperChunk.cpp
+    AcquisitionHelperChunk.h
+)
+
+target_link_libraries(ChunkAccess_VmbCPP PRIVATE Vmb::CPP )
+set_target_properties(ChunkAccess_VmbCPP PROPERTIES
+    CXX_STANDARD 11
+    VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};$ENV{PATH}"
+)
diff --git a/VimbaX/api/examples/VmbCPP/ChunkAccess/main.cpp b/VimbaX/api/examples/VmbCPP/ChunkAccess/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5dd76cf49f1303122a0a0680d5c3e60fae118671
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/ChunkAccess/main.cpp
@@ -0,0 +1,58 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        main.c
+
+  Description: Implementation of main entry point of ChunkAccess example
+               of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "AcquisitionHelperChunk.h"
+
+#include <exception>
+#include <iostream>
+
+int main()
+{
+    std::cout << "///////////////////////////////////\n";
+    std::cout << "/// VmbCPP Chunk Access Example ///\n";
+    std::cout << "///////////////////////////////////\n\n";
+
+    try
+    {
+        VmbCPP::Examples::AcquisitionHelperChunk acquisitionHelper;
+
+        acquisitionHelper.EnableChunk();
+        acquisitionHelper.Start();
+
+        std::cout << "Press <enter> to stop acquisition...\n";
+        getchar();
+    }
+    catch (std::runtime_error& e)
+    {
+        std::cout << e.what() << std::endl;
+        return 1;
+    }
+
+    return 0;
+    // AcquisitionHelperChunk's destructor will stop the acquisition and shutdown the VmbCPP API
+}
diff --git a/VimbaX/api/examples/VmbCPP/ListCameras/CMakeLists.txt b/VimbaX/api/examples/VmbCPP/ListCameras/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..91fc3a4a486e38821024ee74344f14d98ae2e34f
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/ListCameras/CMakeLists.txt
@@ -0,0 +1,26 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(ListCameras LANGUAGES CXX)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS CPP)
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(ListCameras_VmbCPP
+    main.cpp
+    ListCameras.cpp
+    ListCameras.h   
+)
+
+target_link_libraries(ListCameras_VmbCPP PRIVATE Vmb::CPP )
+set_target_properties(ListCameras_VmbCPP PROPERTIES
+    CXX_STANDARD 11
+    VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};$ENV{PATH}"
+)
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbCPP/ListCameras/ListCameras.cpp b/VimbaX/api/examples/VmbCPP/ListCameras/ListCameras.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fb8ac8b6a9c73fb555d0ce00f21043d431f62e03
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/ListCameras/ListCameras.cpp
@@ -0,0 +1,167 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListCameras.cpp
+
+  Description: The ListCameras example will list all available cameras that
+               are found by VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <sstream>
+#include <iostream>
+#include <vector>
+#include <algorithm>
+
+#include "ListCameras.h"
+
+#include <VmbCPP/VmbCPP.h>
+
+
+namespace VmbCPP {
+    namespace Examples {
+
+        /**printing camera info for a camera.
+        *\note this function is used with for_each and is called for each camera in range cameras.begin(), cameras.end()
+        */
+        void PrintCameraInfo(const CameraPtr& camera)
+        {
+            std::string strID;
+            std::string strName;
+            std::string strModelName;
+            std::string strSerialNumber;
+            std::string strInterfaceID;
+            TransportLayerPtr pTransportLayer;
+            std::string strTransportLayerID;
+            std::string strTransportLayerPath;
+
+            std::ostringstream ErrorStream;
+
+            VmbErrorType err = camera->GetID(strID);
+            if (VmbErrorSuccess != err)
+            {
+                ErrorStream << "[Could not get camera ID. Error code: " << err << "]";
+                strID = ErrorStream.str();
+            }
+
+            err = camera->GetName(strName);
+            if (VmbErrorSuccess != err)
+            {
+                ErrorStream << "[Could not get camera name. Error code: " << err << "]";
+                strName = ErrorStream.str();
+            }
+
+            err = camera->GetModel(strModelName);
+            if (VmbErrorSuccess != err)
+            {
+                ErrorStream << "[Could not get camera mode name. Error code: " << err << "]";
+                strModelName = ErrorStream.str();
+            }
+
+            err = camera->GetSerialNumber(strSerialNumber);
+            if (VmbErrorSuccess != err)
+            {
+                ErrorStream << "[Could not get camera serial number. Error code: " << err << "]";
+                strSerialNumber = ErrorStream.str();
+            }
+
+            err = camera->GetInterfaceID(strInterfaceID);
+            if (VmbErrorSuccess != err)
+            {
+                ErrorStream << "[Could not get interface ID. Error code: " << err << "]";
+                strInterfaceID = ErrorStream.str();
+            }
+
+            err = camera->GetTransportLayer(pTransportLayer);
+            err = pTransportLayer->GetID(strTransportLayerID);
+            if (VmbErrorSuccess != err)
+            {
+                ErrorStream << "[Could not get transport layer ID. Error code: " << err << "]";
+                strTransportLayerID = ErrorStream.str();
+            }
+            err = pTransportLayer->GetPath(strTransportLayerPath);
+            if (VmbErrorSuccess != err)
+            {
+                ErrorStream << "[Could not get transport layer path. Error code: " << err << "]";
+                strTransportLayerPath = ErrorStream.str();
+            }
+
+            std::cout 
+                << "/// Camera Name           : " << strName << "\n"
+                << "/// Model Name            : " << strModelName << "\n"
+                << "/// Camera ID             : " << strID << "\n"
+                << "/// Serial Number         : " << strSerialNumber << "\n"
+                << "/// @ Interface ID        : " << strInterfaceID << "\n"
+                << "/// @ TransportLayer ID   : " << strTransportLayerID << "\n"
+                << "/// @ TransportLayer Path : " << strTransportLayerPath << "\n\n";
+        }
+
+        //
+        // Starts Vimba
+        // Gets all connected cameras
+        // And prints out information about the camera name, model name, serial number, ID and the corresponding interface ID
+        //
+        void ListCameras::Print()
+        {
+            VmbSystem& sys = VmbSystem::GetInstance();  // Get a reference to the VimbaSystem singleton
+
+            VmbVersionInfo_t versionInfo;
+            sys.QueryVersion(versionInfo);
+            std::cout << "Vmb Version Major: " << versionInfo.major << " Minor: " << versionInfo.minor << " Patch: " << versionInfo.patch << "\n\n";
+
+            VmbErrorType err = sys.Startup();           // Initialize the Vmb API
+            if (VmbErrorSuccess == err)
+            {
+
+                TransportLayerPtrVector transportlayers;             // A vector of std::shared_ptr<AVT::VmbAPI::TransportLayer> objects
+                err = sys.GetTransportLayers(transportlayers);       // Fetch all transport layers
+                if (VmbErrorSuccess == err) std::cout << "TransportLayers found: " << transportlayers.size() << "\n";
+
+                InterfacePtrVector interfaces;             // A vector of std::shared_ptr<AVT::VmbAPI::Interface> objects
+                err = sys.GetInterfaces(interfaces);       // Fetch all interfaces
+                if (VmbErrorSuccess == err) std::cout << "Interfaces found: " << interfaces.size() << "\n";
+
+                CameraPtrVector cameras;                // A vector of std::shared_ptr<AVT::VmbAPI::Camera> objects
+                err = sys.GetCameras(cameras);          // Fetch all cameras
+                if (VmbErrorSuccess == err)
+                {
+                    std::cout << "Cameras found: " << cameras.size() << "\n\n";
+
+                    // Query all static details of all known cameras and print them out.
+                    // We don't have to open the cameras for that.
+                    std::for_each(cameras.begin(), cameras.end(), PrintCameraInfo);
+                }
+                else
+                {
+                    std::cout << "Could not list cameras. Error code: " << err << "\n";
+                }
+
+                sys.Shutdown();                           // Close Vimba
+            }
+            else
+            {
+                std::cout << "Could not start system. Error code: " << err << "\n";
+            }
+        }
+
+    }
+}
+
diff --git a/VimbaX/api/examples/VmbCPP/ListCameras/ListCameras.h b/VimbaX/api/examples/VmbCPP/ListCameras/ListCameras.h
new file mode 100644
index 0000000000000000000000000000000000000000..a35a1cba2ca75bb4bcfa7f20e91ed5506f9f6e4c
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/ListCameras/ListCameras.h
@@ -0,0 +1,49 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ListCameras.h
+
+  Description: The ListCameras example will list all available cameras that
+               are found by VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 AVT_VMBAPI_EXAMPLES_LISTCAMERAS
+#define AVT_VMBAPI_EXAMPLES_LISTCAMERAS
+
+namespace VmbCPP {
+    namespace Examples {
+
+        class ListCameras
+        {
+        public:
+            //
+            // Starts Vimba
+            // Gets all connected cameras
+            // And prints out information about the camera name, model name, serial number, ID and the corresponding interface ID
+            //
+            static void Print();
+        };
+
+    }
+}
+
+#endif
diff --git a/VimbaX/api/examples/VmbCPP/ListCameras/main.cpp b/VimbaX/api/examples/VmbCPP/ListCameras/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2a075e0a74470bc4af0c903f7bd48dcd3a686bb5
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/ListCameras/main.cpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        program.cpp
+
+  Description: Main entry point of ListCameras example of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <iostream>
+
+#include "ListCameras.h"
+
+int main(int argc, char* argv[])
+{
+    std::cout << "\n";
+    std::cout << "///////////////////////////////////\n";
+    std::cout << "/// VmbCPP List Cameras Example ///\n";
+    std::cout << "///////////////////////////////////\n\n";
+
+    if (1 < argc)
+    {
+        std::cout << "No parameters expected. Execution will not be affected by the provided parameter(s).\n\n";
+    }
+
+    VmbCPP::Examples::ListCameras::Print();
+
+    std::cout << "\n";
+}
diff --git a/VimbaX/api/examples/VmbCPP/SynchronousGrab/CMakeLists.txt b/VimbaX/api/examples/VmbCPP/SynchronousGrab/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3c8b6bcf7c7537da911dd5b82b16be6d7740774a
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/SynchronousGrab/CMakeLists.txt
@@ -0,0 +1,26 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(SynchronousGrab LANGUAGES CXX)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake")
+    # read hardcoded package location information, if the example is still located in the original install location
+    include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/vmb_cmake_prefix_paths.cmake)
+endif()
+
+find_package(Vmb REQUIRED COMPONENTS CPP)
+
+if(NOT WIN32)
+    list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,'\$ORIGIN'")
+endif()
+
+add_executable(SynchronousGrab_VmbCPP
+    main.cpp
+    SynchronousGrab.cpp
+    SynchronousGrab.h   
+)
+
+target_link_libraries(SynchronousGrab_VmbCPP PRIVATE Vmb::CPP )
+set_target_properties(SynchronousGrab_VmbCPP PROPERTIES
+    CXX_STANDARD 11
+    VS_DEBUGGER_ENVIRONMENT "PATH=${VMB_BINARY_DIRS};$ENV{PATH}"
+)
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbCPP/SynchronousGrab/SynchronousGrab.cpp b/VimbaX/api/examples/VmbCPP/SynchronousGrab/SynchronousGrab.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..43d8c357fb587aabdf62e5ed5724c84d7bb15359
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/SynchronousGrab/SynchronousGrab.cpp
@@ -0,0 +1,163 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        SynchronousGrab.cpp
+
+  Description: Acquiring image with VmbCPP
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "SynchronousGrab.h"
+
+#include <VmbCPP/VmbCPP.h>
+
+#include <exception>
+#include <iostream>
+
+
+namespace VmbCPP {
+namespace Examples {
+
+SynchronousGrab::SynchronousGrab() :
+    SynchronousGrab(nullptr)
+{
+}
+
+/**
+ * \brief Helper function to adjust the packet size for Allied vision GigE cameras
+ */
+void GigEAdjustPacketSize(CameraPtr camera)
+{
+    StreamPtrVector streams;
+    VmbErrorType err = camera->GetStreams(streams);
+
+    if (err != VmbErrorSuccess || streams.empty())
+    {
+        throw std::runtime_error("Could not get stream modules, err=" + std::to_string(err));
+    }
+
+    FeaturePtr feature;
+    err = streams[0]->GetFeatureByName("GVSPAdjustPacketSize", feature);
+
+    if (err == VmbErrorSuccess)
+    {
+        err = feature->RunCommand();
+        if (err == VmbErrorSuccess)
+        {
+            bool commandDone = false;
+            do
+            {
+                if (feature->IsCommandDone(commandDone) != VmbErrorSuccess)
+                {
+                    break;
+                }
+            } while (commandDone == false);
+        }
+        else
+        {
+            std::cout << "Error while executing GVSPAdjustPacketSize, err=" + std::to_string(err) << std::endl;
+        }
+    }
+}
+
+SynchronousGrab::SynchronousGrab(const char* cameraId) :
+    m_vmbSystem(VmbSystem::GetInstance())
+{
+    VmbErrorType err = m_vmbSystem.Startup();
+
+    if (err != VmbErrorSuccess)
+    {
+        throw std::runtime_error("Could not start API, err=" + std::to_string(err));
+    }
+
+    CameraPtrVector cameras;
+    err = m_vmbSystem.GetCameras(cameras);
+    if (err != VmbErrorSuccess)
+    {
+        m_vmbSystem.Shutdown();
+        throw std::runtime_error("Could not get cameras, err=" + std::to_string(err));
+    }
+
+    if (cameras.empty())
+    {
+        m_vmbSystem.Shutdown();
+        throw std::runtime_error("No cameras found.");
+    }
+
+    if (cameraId != nullptr)
+    {
+        err = m_vmbSystem.GetCameraByID(cameraId, m_camera);
+        if (err != VmbErrorSuccess)
+        {
+            m_vmbSystem.Shutdown();
+            throw std::runtime_error("No camera found with ID=" + std::string(cameraId) + ", err = " + std::to_string(err));
+        }
+    }
+    else
+    {
+        m_camera = cameras[0];
+    }
+
+    err = m_camera->Open(VmbAccessModeFull);
+    if (err != VmbErrorSuccess)
+    {
+        m_vmbSystem.Shutdown();
+        throw std::runtime_error("Could not open camera, err=" + std::to_string(err));
+    }
+
+    std::string name;
+    err = m_camera->GetName(name);
+    if (err == VmbErrorSuccess)
+    {
+        std::cout << "Opened Camera " << name << std::endl;
+    }
+
+    try
+    {
+        GigEAdjustPacketSize(m_camera);
+    }
+    catch (std::runtime_error& e)
+    {
+        m_vmbSystem.Shutdown();
+        throw e;
+    }
+}
+
+SynchronousGrab::~SynchronousGrab()
+{
+    m_vmbSystem.Shutdown();
+}
+
+void SynchronousGrab::AcquireImage()
+{
+    VmbErrorType err = m_camera->AcquireSingleImage(frame, 5000);
+    if (err != VmbErrorSuccess)
+    {
+        throw std::runtime_error("Could not acquire image, err=" + std::to_string(err));
+    }
+    else
+    {
+        std::cout << std::endl << "Single image acquired.";
+    }
+}
+
+} // namespace Examples
+} // namespace VmbCPP
\ No newline at end of file
diff --git a/VimbaX/api/examples/VmbCPP/SynchronousGrab/SynchronousGrab.h b/VimbaX/api/examples/VmbCPP/SynchronousGrab/SynchronousGrab.h
new file mode 100644
index 0000000000000000000000000000000000000000..6fa3f1457fd3315d3122009ab74e8b44d2b7ebe7
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/SynchronousGrab/SynchronousGrab.h
@@ -0,0 +1,70 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        SynchronousGrab.h
+
+  Description: Acquiring images with VmbCPP
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 AVT_VMBAPI_EXAMPLES_SYNCHRONOUS_GRAB
+#define AVT_VMBAPI_EXAMPLES_SYNCHRONOUS_GRAB
+
+#include <VmbCPP/VmbCPP.h>
+
+namespace VmbCPP {
+    namespace Examples {
+
+        class SynchronousGrab
+        {
+        private:
+            VmbSystem& m_vmbSystem;
+            CameraPtr  m_camera;
+            FramePtr   frame;
+
+        public:
+            /**
+             * \brief The constructor will initialize the API and open the given camera
+             *
+             * \param[in] pCameraId zero terminated C string with the camera id for the camera to be used
+             */
+            SynchronousGrab(const char* cameraId);
+
+            /**
+             * \brief The constructor will initialize the API and open the first available camera
+             */
+            SynchronousGrab();
+
+            /**
+             * \brief The destructor will shutdown the API
+             */
+            ~SynchronousGrab();
+
+            /**
+             * \brief Aquire single image.
+             */
+            void AcquireImage();
+        };
+
+    }
+} // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/examples/VmbCPP/SynchronousGrab/main.cpp b/VimbaX/api/examples/VmbCPP/SynchronousGrab/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7570ef529f9053d41ff6de534592e420304c2fda
--- /dev/null
+++ b/VimbaX/api/examples/VmbCPP/SynchronousGrab/main.cpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+  Copyright (C) 2013 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        main.cpp
+
+  Description: Implementation of main entry point of SynchronousGrab example
+               of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <string>
+#include <cstring>
+#include <iostream>
+
+#include "SynchronousGrab.h"
+#include <VmbCPP/VmbCPP.h>
+#include <exception>
+
+int main(int argc, char* argv[])
+{
+    std::cout << "\n";
+    std::cout << "///////////////////////////////////////\n";
+    std::cout << "/// VmbCPP Synchronous Grab Example ///\n";
+    std::cout << "///////////////////////////////////////\n\n";
+
+    try
+    {
+        VmbCPP::Examples::SynchronousGrab synchronousGrab;
+        synchronousGrab.AcquireImage();
+    }
+    catch (std::runtime_error& e)
+    {
+        std::cout << e.what() << std::endl;
+    }    
+
+    std::cout << std::endl;
+}
+
diff --git a/VimbaX/api/examples/VmbPy/action_commands.py b/VimbaX/api/examples/VmbPy/action_commands.py
new file mode 100644
index 0000000000000000000000000000000000000000..b72f9ca38a85803fb09d2ace1c6757cfba119b31
--- /dev/null
+++ b/VimbaX/api/examples/VmbPy/action_commands.py
@@ -0,0 +1,160 @@
+"""BSD 2-Clause License
+
+Copyright (c) 2022, Allied Vision Technologies GmbH
+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.
+
+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 HOLDER 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.
+"""
+
+import sys
+from typing import Optional
+from vmbpy import *
+
+
+def print_preamble():
+    print('/////////////////////////////////////')
+    print('/// VmbPy Action Commands Example ///')
+    print('/////////////////////////////////////\n')
+
+
+def print_usage():
+    print('Usage:')
+    print('    python action_commands.py <camera_id>')
+    print('    python action_commands.py [/h] [-h]')
+    print()
+    print('Parameters:')
+    print('    camera_id      ID of the camera to be used')
+    print()
+
+
+def abort(reason: str, return_code: int = 1, usage: bool = False):
+    print(reason + '\n')
+
+    if usage:
+        print_usage()
+
+    sys.exit(return_code)
+
+
+def parse_args() -> Optional[str]:
+    args = sys.argv[1:]
+    argc = len(args)
+
+    cam_id = ""
+    for arg in args:
+        if arg in ('/h', '-h'):
+            print_usage()
+            sys.exit(0)
+        elif not cam_id:
+            cam_id = arg
+
+    if argc > 1:
+        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
+
+    return cam_id if cam_id else None
+
+
+def get_input() -> str:
+    prompt = 'Press \'a\' to send action command. Press \'q\' to stop example. Enter:'
+    print(prompt, flush=True)
+    return input()
+
+
+def get_camera(camera_id: Optional[str]) -> Camera:
+    with VmbSystem.get_instance() as vmb:
+        if camera_id:
+            try:
+                return vmb.get_camera_by_id(camera_id)
+
+            except VmbCameraError:
+                abort('Failed to access camera \'{}\'. Abort.'.format(camera_id))
+
+        else:
+            cams = vmb.get_all_cameras()
+            if not cams:
+                abort('No cameras accessible. Abort.')
+
+            return cams[0]
+
+
+def frame_handler(cam: Camera, stream: Stream, frame: Frame):
+    if frame.get_status() == FrameStatus.Complete:
+        print('Frame(ID: {}) has been received.'.format(frame.get_id()), flush=True)
+
+    cam.queue_frame(frame)
+
+
+def main():
+    print_preamble()
+    camera_id = parse_args()
+
+    with VmbSystem.get_instance():
+        cam = get_camera(camera_id)
+        inter = cam.get_interface()
+
+        with cam:
+            # Prepare camera for ActionCommand - trigger
+            device_key = 1
+            group_key = 1
+            group_mask = 1
+
+            # Try to adjust GeV packet size. This feature is only available for GigE - cameras.
+            try:
+                stream = cam.get_streams()[0]
+                stream.GVSPAdjustPacketSize.run()
+                while not stream.GVSPAdjustPacketSize.is_done():
+                    pass
+            except (AttributeError, VmbFeatureError):
+                pass
+
+            try:
+                cam.TriggerSelector.set('FrameStart')
+                cam.TriggerSource.set('Action0')
+                cam.TriggerMode.set('On')
+                cam.ActionDeviceKey.set(device_key)
+                cam.ActionGroupKey.set(group_key)
+                cam.ActionGroupMask.set(group_mask)
+            except (AttributeError, VmbFeatureError):
+                abort('The selected camera does not seem to support action commands')
+
+            # Enter streaming mode and wait for user input.
+            try:
+                cam.start_streaming(frame_handler)
+
+                while True:
+                    ch = get_input()
+
+                    if ch == 'q':
+                        break
+
+                    elif ch == 'a':
+                        inter.ActionDeviceKey.set(device_key)
+                        inter.ActionGroupKey.set(group_key)
+                        inter.ActionGroupMask.set(group_mask)
+                        inter.ActionCommand.run()
+
+            finally:
+                cam.stop_streaming()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/VimbaX/api/examples/VmbPy/asynchronous_grab.py b/VimbaX/api/examples/VmbPy/asynchronous_grab.py
new file mode 100644
index 0000000000000000000000000000000000000000..cc1e3baaf13841312f2978ba4423b2a487d59f82
--- /dev/null
+++ b/VimbaX/api/examples/VmbPy/asynchronous_grab.py
@@ -0,0 +1,139 @@
+"""BSD 2-Clause License
+
+Copyright (c) 2022, Allied Vision Technologies GmbH
+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.
+
+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 HOLDER 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.
+"""
+import sys
+from typing import Optional, Tuple
+
+from vmbpy import *
+
+
+def print_preamble():
+    print('///////////////////////////////////////')
+    print('/// VmbPy Asynchronous Grab Example ///')
+    print('///////////////////////////////////////\n')
+
+
+def print_usage():
+    print('Usage:')
+    print('    python asynchronous_grab.py [/x] [-x] [camera_id]')
+    print('    python asynchronous_grab.py [/h] [-h]')
+    print()
+    print('Parameters:')
+    print('    /x, -x      If set, use AllocAndAnnounce mode of buffer allocation')
+    print('    camera_id   ID of the camera to use (using first camera if not specified)')
+    print()
+
+
+def abort(reason: str, return_code: int = 1, usage: bool = False):
+    print(reason + '\n')
+
+    if usage:
+        print_usage()
+
+    sys.exit(return_code)
+
+
+def parse_args() -> Tuple[Optional[str], AllocationMode]:
+    args = sys.argv[1:]
+    argc = len(args)
+
+    allocation_mode = AllocationMode.AnnounceFrame
+    cam_id = ""
+    for arg in args:
+        if arg in ('/h', '-h'):
+            print_usage()
+            sys.exit(0)
+        elif arg in ('/x', '-x'):
+            allocation_mode = AllocationMode.AllocAndAnnounceFrame
+        elif not cam_id:
+            cam_id = arg
+
+    if argc > 2:
+        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
+
+    return (cam_id if cam_id else None, allocation_mode)
+
+
+def get_camera(camera_id: Optional[str]) -> Camera:
+    with VmbSystem.get_instance() as vmb:
+        if camera_id:
+            try:
+                return vmb.get_camera_by_id(camera_id)
+
+            except VmbCameraError:
+                abort('Failed to access Camera \'{}\'. Abort.'.format(camera_id))
+
+        else:
+            cams = vmb.get_all_cameras()
+            if not cams:
+                abort('No Cameras accessible. Abort.')
+
+            return cams[0]
+
+
+def setup_camera(cam: Camera):
+    with cam:
+        # Try to adjust GeV packet size. This Feature is only available for GigE - Cameras.
+        try:
+            stream = cam.get_streams()[0]
+            stream.GVSPAdjustPacketSize.run()
+
+            while not stream.GVSPAdjustPacketSize.is_done():
+                pass
+
+        except (AttributeError, VmbFeatureError):
+            pass
+
+
+def frame_handler(cam: Camera, stream: Stream, frame: Frame):
+    print('{} acquired {}'.format(cam, frame), flush=True)
+
+    cam.queue_frame(frame)
+
+
+def main():
+    print_preamble()
+    cam_id, allocation_mode = parse_args()
+
+    with VmbSystem.get_instance():
+        with get_camera(cam_id) as cam:
+
+            setup_camera(cam)
+            print('Press <enter> to stop Frame acquisition.')
+
+            try:
+                # Start Streaming with a custom a buffer of 10 Frames (defaults to 5)
+                cam.start_streaming(handler=frame_handler,
+                                    buffer_count=10,
+                                    allocation_mode=allocation_mode)
+                input()
+
+            finally:
+                cam.stop_streaming()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/VimbaX/api/examples/VmbPy/asynchronous_grab_opencv.py b/VimbaX/api/examples/VmbPy/asynchronous_grab_opencv.py
new file mode 100644
index 0000000000000000000000000000000000000000..2a633cdd7cee275fc26edc39a280f9abe939dfd8
--- /dev/null
+++ b/VimbaX/api/examples/VmbPy/asynchronous_grab_opencv.py
@@ -0,0 +1,199 @@
+"""BSD 2-Clause License
+
+Copyright (c) 2022, Allied Vision Technologies GmbH
+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.
+
+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 HOLDER 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.
+"""
+import sys
+import threading
+from typing import Optional
+
+import cv2
+
+from vmbpy import *
+
+# All frames will either be recorded in this format, or transformed to it before being displayed
+opencv_display_format = PixelFormat.Bgr8
+
+
+def print_preamble():
+    print('///////////////////////////////////////////////////')
+    print('/// VmbPy Asynchronous Grab with OpenCV Example ///')
+    print('///////////////////////////////////////////////////\n')
+
+
+def print_usage():
+    print('Usage:')
+    print('    python asynchronous_grab_opencv.py [camera_id]')
+    print('    python asynchronous_grab_opencv.py [/h] [-h]')
+    print()
+    print('Parameters:')
+    print('    camera_id   ID of the camera to use (using first camera if not specified)')
+    print()
+
+
+def abort(reason: str, return_code: int = 1, usage: bool = False):
+    print(reason + '\n')
+
+    if usage:
+        print_usage()
+
+    sys.exit(return_code)
+
+
+def parse_args() -> Optional[str]:
+    args = sys.argv[1:]
+    argc = len(args)
+
+    for arg in args:
+        if arg in ('/h', '-h'):
+            print_usage()
+            sys.exit(0)
+
+    if argc > 1:
+        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
+
+    return None if argc == 0 else args[0]
+
+
+def get_camera(camera_id: Optional[str]) -> Camera:
+    with VmbSystem.get_instance() as vmb:
+        if camera_id:
+            try:
+                return vmb.get_camera_by_id(camera_id)
+
+            except VmbCameraError:
+                abort('Failed to access Camera \'{}\'. Abort.'.format(camera_id))
+
+        else:
+            cams = vmb.get_all_cameras()
+            if not cams:
+                abort('No Cameras accessible. Abort.')
+
+            return cams[0]
+
+
+def setup_camera(cam: Camera):
+    with cam:
+        # Enable auto exposure time setting if camera supports it
+        try:
+            cam.ExposureAuto.set('Continuous')
+
+        except (AttributeError, VmbFeatureError):
+            pass
+
+        # Enable white balancing if camera supports it
+        try:
+            cam.BalanceWhiteAuto.set('Continuous')
+
+        except (AttributeError, VmbFeatureError):
+            pass
+
+        # Try to adjust GeV packet size. This Feature is only available for GigE - Cameras.
+        try:
+            stream = cam.get_streams()[0]
+            stream.GVSPAdjustPacketSize.run()
+            while not stream.GVSPAdjustPacketSize.is_done():
+                pass
+
+        except (AttributeError, VmbFeatureError):
+            pass
+
+
+def setup_pixel_format(cam: Camera):
+    # Query available pixel formats. Prefer color formats over monochrome formats
+    cam_formats = cam.get_pixel_formats()
+    cam_color_formats = intersect_pixel_formats(cam_formats, COLOR_PIXEL_FORMATS)
+    convertible_color_formats = tuple(f for f in cam_color_formats
+                                      if opencv_display_format in f.get_convertible_formats())
+
+    cam_mono_formats = intersect_pixel_formats(cam_formats, MONO_PIXEL_FORMATS)
+    convertible_mono_formats = tuple(f for f in cam_mono_formats
+                                     if opencv_display_format in f.get_convertible_formats())
+
+    # if OpenCV compatible color format is supported directly, use that
+    if opencv_display_format in cam_formats:
+        cam.set_pixel_format(opencv_display_format)
+
+    # else if existing color format can be converted to OpenCV format do that
+    elif convertible_color_formats:
+        cam.set_pixel_format(convertible_color_formats[0])
+
+    # fall back to a mono format that can be converted
+    elif convertible_mono_formats:
+        cam.set_pixel_format(convertible_mono_formats[0])
+
+    else:
+        abort('Camera does not support an OpenCV compatible format. Abort.')
+
+
+class Handler:
+    def __init__(self):
+        self.shutdown_event = threading.Event()
+
+    def __call__(self, cam: Camera, stream: Stream, frame: Frame):
+        ENTER_KEY_CODE = 13
+
+        key = cv2.waitKey(1)
+        if key == ENTER_KEY_CODE:
+            self.shutdown_event.set()
+            return
+
+        elif frame.get_status() == FrameStatus.Complete:
+            print('{} acquired {}'.format(cam, frame), flush=True)
+            # Convert frame if it is not already the correct format
+            if frame.get_pixel_format() == opencv_display_format:
+                display = frame
+            else:
+                # This creates a copy of the frame. The original `frame` object can be requeued
+                # safely while `display` is used
+                display = frame.convert_pixel_format(opencv_display_format)
+
+            msg = 'Stream from \'{}\'. Press <Enter> to stop stream.'
+            cv2.imshow(msg.format(cam.get_name()), display.as_opencv_image())
+
+        cam.queue_frame(frame)
+
+
+def main():
+    print_preamble()
+    cam_id = parse_args()
+
+    with VmbSystem.get_instance():
+        with get_camera(cam_id) as cam:
+            # setup general camera settings and the pixel format in which frames are recorded
+            setup_camera(cam)
+            setup_pixel_format(cam)
+            handler = Handler()
+
+            try:
+                # Start Streaming with a custom a buffer of 10 Frames (defaults to 5)
+                cam.start_streaming(handler=handler, buffer_count=10)
+                handler.shutdown_event.wait()
+
+            finally:
+                cam.stop_streaming()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/VimbaX/api/examples/VmbPy/create_trace_log.py b/VimbaX/api/examples/VmbPy/create_trace_log.py
new file mode 100644
index 0000000000000000000000000000000000000000..3915eb34f6d0b9a6958de5aaf1a89084f7802786
--- /dev/null
+++ b/VimbaX/api/examples/VmbPy/create_trace_log.py
@@ -0,0 +1,78 @@
+"""BSD 2-Clause License
+
+Copyright (c) 2022, Allied Vision Technologies GmbH
+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.
+
+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 HOLDER 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.
+"""
+
+import logging  # Only needed for manual logging configuration
+
+from vmbpy import *
+
+
+def main():
+    print('//////////////////////////////////////')
+    print('/// vmbpy Create Trace Log Example ///')
+    print('//////////////////////////////////////\n')
+
+    # Enable logging mechanism, creating a trace log. The log file is
+    # stored at the location this script was executed from.
+    vmb = VmbSystem.get_instance()
+    vmb.enable_log(LOG_CONFIG_TRACE_FILE_ONLY)
+
+    # While entering this scope, feature, camera and interface discovery occurs.
+    # All function calls to VmbC are captured in the log file.
+    with vmb:
+        pass
+
+    vmb.disable_log()
+
+
+def manual_configuration():
+    print('//////////////////////////////////////////////')
+    print('/// vmbpy Manual Log Configuration Example ///')
+    print('//////////////////////////////////////////////\n')
+
+    # By default the vmbpy logger instance will not forward its log messages to any handlers. To
+    # integrate log messages a handler needs to be added to the logger instance. In this example we
+    # log just the message to the console
+    logger = Log.get_instance()
+    # Alternatively the logger instance can also be retrieved by its name: `vmbpyLog`
+    # logger = logging.getLogger('vmbpyLog')
+    handler = logging.StreamHandler()
+    logger.addHandler(handler)
+
+    # By default the level of `logger` is set to the custom level `LogLevel.Trace` defined by VmbPy.
+    # This will create a lot of output. Adjust as needed for your desired log level
+    logger.setLevel(logging.INFO)
+
+    # While entering this scope, feature, camera and interface discovery occurs. Only INFO messages
+    # and higher will be logged since we set the `logger` level to that
+    vmb = VmbSystem.get_instance()
+    with vmb:
+        pass
+
+
+if __name__ == '__main__':
+    main()
+    # manual_configuration()
diff --git a/VimbaX/api/examples/VmbPy/list_cameras.py b/VimbaX/api/examples/VmbPy/list_cameras.py
new file mode 100644
index 0000000000000000000000000000000000000000..e071be61ffedeed736299d1a4ace0f6ffb91409b
--- /dev/null
+++ b/VimbaX/api/examples/VmbPy/list_cameras.py
@@ -0,0 +1,57 @@
+"""BSD 2-Clause License
+
+Copyright (c) 2022, Allied Vision Technologies GmbH
+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.
+
+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 HOLDER 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.
+"""
+
+from vmbpy import *
+
+
+def print_preamble():
+    print('//////////////////////////////////')
+    print('/// VmbPy List Cameras Example ///')
+    print('//////////////////////////////////\n')
+
+
+def print_camera(cam: Camera):
+    print('/// Camera Name   : {}'.format(cam.get_name()))
+    print('/// Model Name    : {}'.format(cam.get_model()))
+    print('/// Camera ID     : {}'.format(cam.get_id()))
+    print('/// Serial Number : {}'.format(cam.get_serial()))
+    print('/// Interface ID  : {}\n'.format(cam.get_interface_id()))
+
+
+def main():
+    print_preamble()
+    with VmbSystem.get_instance() as vmb:
+        cams = vmb.get_all_cameras()
+
+        print('Cameras found: {}'.format(len(cams)))
+
+        for cam in cams:
+            print_camera(cam)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/VimbaX/api/examples/VmbPy/list_features.py b/VimbaX/api/examples/VmbPy/list_features.py
new file mode 100644
index 0000000000000000000000000000000000000000..0f84070ed2461ee3f9611b3ed28eab39efc77103
--- /dev/null
+++ b/VimbaX/api/examples/VmbPy/list_features.py
@@ -0,0 +1,188 @@
+"""BSD 2-Clause License
+
+Copyright (c) 2022, Allied Vision Technologies GmbH
+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.
+
+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 HOLDER 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.
+"""
+import argparse
+import sys
+
+from vmbpy import *
+
+
+def print_preamble():
+    print('///////////////////////////////////')
+    print('/// VmbPy List Features Example ///')
+    print('///////////////////////////////////\n')
+
+
+def abort(reason: str, return_code: int = 1):
+    print(reason + '\n')
+
+    sys.exit(return_code)
+
+
+def parse_args() -> argparse.Namespace:
+    parser = argparse.ArgumentParser()
+    parser.add_argument('-v',
+                        type=str,
+                        help='The maximum visibility level of features that should be printed '
+                             '(default = %(default)s)',
+                        # Allow all visibility levels except 'Unknown'
+                        choices=list(map(lambda x: x.name,
+                                         filter(lambda x: x != FeatureVisibility.Unknown,
+                                                FeatureVisibility))),
+                        default=FeatureVisibility.Guru.name)
+    group = parser.add_mutually_exclusive_group()
+    group.add_argument('-t',
+                       type=int,
+                       metavar='TransportLayerIndex',
+                       help='Show transport layer features')
+    group.add_argument('-i',
+                       type=int,
+                       metavar='InterfaceIndex',
+                       help='Show interface features')
+    group.add_argument('-c',
+                       type=str,
+                       default='0',
+                       metavar='(CameraIndex | CameraId)',
+                       help='Show the remote device features of the specified camera')
+    group.add_argument('-l',
+                       type=str,
+                       metavar='(CameraIndex | CameraId)',
+                       help='Show the local device features of the specified camera')
+    group.add_argument('-s',
+                       type=str,
+                       nargs=2,
+                       metavar=('(CameraIndex | CameraId)', 'StreamIndex'),
+                       help='Show the features of a stream for the specified camera')
+
+    return parser.parse_args()
+
+
+def print_all_features(module: FeatureContainer, max_visibility_level: FeatureVisibility):
+    for feat in module.get_all_features():
+        if feat.get_visibility() <= max_visibility_level:
+            print_feature(feat)
+
+
+def print_feature(feature: FeatureTypes):
+    try:
+        value = feature.get()
+
+    except (AttributeError, VmbFeatureError):
+        value = None
+
+    print('/// Feature name   : {}'.format(feature.get_name()))
+    print('/// Display name   : {}'.format(feature.get_display_name()))
+    print('/// Tooltip        : {}'.format(feature.get_tooltip()))
+    print('/// Description    : {}'.format(feature.get_description()))
+    print('/// SFNC Namespace : {}'.format(feature.get_sfnc_namespace()))
+    print('/// Value          : {}\n'.format(str(value)))
+
+
+def get_transport_layer(index: int) -> TransportLayer:
+    with VmbSystem.get_instance() as vmb:
+        try:
+            return vmb.get_all_transport_layers()[index]
+        except IndexError:
+            abort('Could not find transport layer at index \'{}\'. '
+                  'Only found \'{}\' transport layer(s)'
+                  ''.format(index, len(vmb.get_all_transport_layers())))
+
+
+def get_interface(index: int) -> Interface:
+    with VmbSystem.get_instance() as vmb:
+        try:
+            return vmb.get_all_interfaces()[index]
+        except IndexError:
+            abort('Could not find interface at index \'{}\'. Only found \'{}\' interface(s)'
+                  ''.format(index, len(vmb.get_all_interfaces())))
+
+
+def get_camera(camera_id_or_index: str) -> Camera:
+    camera_index = None
+    camera_id = None
+    try:
+        camera_index = int(camera_id_or_index)
+    except ValueError:
+        # Could not parse `camera_id_or_index` to an integer. It is probably a device ID
+        camera_id = camera_id_or_index
+
+    with VmbSystem.get_instance() as vmb:
+        if camera_index is not None:
+            cams = vmb.get_all_cameras()
+            if not cams:
+                abort('No cameras accessible. Abort.')
+            try:
+                return cams[camera_index]
+            except IndexError:
+                abort('Could not find camera at index \'{}\'. Only found \'{}\' camera(s)'
+                      ''.format(camera_index, len(cams)))
+
+        else:
+            try:
+                return vmb.get_camera_by_id(camera_id)
+
+            except VmbCameraError:
+                abort('Failed to access camera \'{}\'. Abort.'.format(camera_id))
+
+
+def main():
+    print_preamble()
+    args = parse_args()
+    visibility_level = FeatureVisibility[args.v]
+
+    with VmbSystem.get_instance():
+        if args.t is not None:
+            tl = get_transport_layer(args.t)
+            print_all_features(tl, visibility_level)
+        elif args.i is not None:
+            inter = get_interface(args.i)
+            print_all_features(inter, visibility_level)
+        elif args.l is not None:
+            cam = get_camera(args.l)
+            with cam:
+                local_device = cam.get_local_device()
+                print_all_features(local_device, visibility_level)
+        elif args.s is not None:
+            cam = get_camera(args.s[0])
+            with cam:
+                try:
+                    stream_index = int(args.s[1])
+                except ValueError:
+                    abort('Could not parse \'{}\' to a stream index integer'.format(args.s[1]))
+                try:
+                    stream = cam.get_streams()[stream_index]
+                    print_all_features(stream, visibility_level)
+                except IndexError:
+                    abort('Could not get stream at index \'{}\'. Camera provides only \'{}\' '
+                          'stream(s)'.format(stream_index, len(cam.get_streams())))
+        else:
+            cam = get_camera(args.c)
+            with cam:
+                print_all_features(cam, visibility_level)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/VimbaX/api/examples/VmbPy/load_save_settings.py b/VimbaX/api/examples/VmbPy/load_save_settings.py
new file mode 100644
index 0000000000000000000000000000000000000000..b751f7522a62b62173b993fef810f5037c8fb0a8
--- /dev/null
+++ b/VimbaX/api/examples/VmbPy/load_save_settings.py
@@ -0,0 +1,125 @@
+"""BSD 2-Clause License
+
+Copyright (c) 2022, Allied Vision Technologies GmbH
+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.
+
+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 HOLDER 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.
+"""
+import sys
+from typing import Optional
+
+from vmbpy import *
+
+
+def print_preamble():
+    print('////////////////////////////////////////')
+    print('/// VmbPy Load Save Settings Example ///')
+    print('////////////////////////////////////////\n')
+
+
+def print_usage():
+    print('Usage:')
+    print('    python load_save_settings.py [camera_id]')
+    print('    python load_save_settings.py [/h] [-h]')
+    print()
+    print('Parameters:')
+    print('    camera_id   ID of the camera to use (using first camera if not specified)')
+    print()
+
+
+def abort(reason: str, return_code: int = 1, usage: bool = False):
+    print(reason + '\n')
+
+    if usage:
+        print_usage()
+
+    sys.exit(return_code)
+
+
+def parse_args() -> Optional[str]:
+    args = sys.argv[1:]
+    argc = len(args)
+
+    for arg in args:
+        if arg in ('/h', '-h'):
+            print_usage()
+            sys.exit(0)
+
+    if argc > 1:
+        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
+
+    return None if argc == 0 else args[0]
+
+
+def get_camera(camera_id: Optional[str]) -> Camera:
+    with VmbSystem.get_instance() as vmb:
+        if camera_id:
+            try:
+                return vmb.get_camera_by_id(camera_id)
+
+            except VmbCameraError:
+                abort('Failed to access Camera \'{}\'. Abort.'.format(camera_id))
+
+        else:
+            cams = vmb.get_all_cameras()
+            if not cams:
+                abort('No Cameras accessible. Abort.')
+
+            return cams[0]
+
+
+def main():
+    print_preamble()
+    cam_id = parse_args()
+
+    with VmbSystem.get_instance():
+        print("--> VmbSystem context has been entered")
+
+        with get_camera(cam_id) as cam:
+            print("--> Camera has been opened (%s)" % cam.get_id())
+
+            # Save camera settings to file.
+            settings_file = '{}_settings.xml'.format(cam.get_id())
+            cam.save_settings(settings_file, PersistType.All)
+            print("--> Feature values have been saved to '%s'" % settings_file)
+
+            # Restore settings to initial value.
+            try:
+                cam.UserSetSelector.set('Default')
+
+            except (AttributeError, VmbFeatureError):
+                abort('Failed to set Feature \'UserSetSelector\'')
+
+            try:
+                cam.UserSetLoad.run()
+                print("--> All feature values have been restored to default")
+
+            except (AttributeError, VmbFeatureError):
+                abort('Failed to run Feature \'UserSetLoad\'')
+
+            # Load camera settings from file.
+            cam.load_settings(settings_file, PersistType.All)
+            print("--> Feature values have been loaded from given file '%s'" % settings_file)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/VimbaX/api/examples/VmbPy/multithreading_opencv.py b/VimbaX/api/examples/VmbPy/multithreading_opencv.py
new file mode 100644
index 0000000000000000000000000000000000000000..58e01b620c52a045800e0820668c0640749889e0
--- /dev/null
+++ b/VimbaX/api/examples/VmbPy/multithreading_opencv.py
@@ -0,0 +1,298 @@
+"""BSD 2-Clause License
+
+Copyright (c) 2022, Allied Vision Technologies GmbH
+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.
+
+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 HOLDER 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.
+"""
+import copy
+import queue
+import threading
+from typing import Optional
+
+import cv2
+import numpy
+
+from vmbpy import *
+
+FRAME_QUEUE_SIZE = 10
+FRAME_HEIGHT = 480
+FRAME_WIDTH = 480
+
+
+def print_preamble():
+    print('////////////////////////////////////////')
+    print('/// VmbPy Multithreading Example ///////')
+    print('////////////////////////////////////////\n')
+    print(flush=True)
+
+
+def add_camera_id(frame: Frame, cam_id: str) -> Frame:
+    # Helper function inserting 'cam_id' into given frame. This function
+    # manipulates the original image buffer inside frame object.
+    cv2.putText(frame.as_opencv_image(), 'Cam: {}'.format(cam_id), org=(0, 30), fontScale=1,
+                color=255, thickness=1, fontFace=cv2.FONT_HERSHEY_COMPLEX_SMALL)
+    return frame
+
+
+def resize_if_required(frame: Frame) -> numpy.ndarray:
+    # Helper function resizing the given frame, if it has not the required dimensions.
+    # On resizing, the image data is copied and resized, the image inside the frame object
+    # is untouched.
+    cv_frame = frame.as_opencv_image()
+
+    if (frame.get_height() != FRAME_HEIGHT) or (frame.get_width() != FRAME_WIDTH):
+        cv_frame = cv2.resize(cv_frame, (FRAME_WIDTH, FRAME_HEIGHT), interpolation=cv2.INTER_AREA)
+        cv_frame = cv_frame[..., numpy.newaxis]
+
+    return cv_frame
+
+
+def create_dummy_frame() -> numpy.ndarray:
+    cv_frame = numpy.zeros((50, 640, 1), numpy.uint8)
+    cv_frame[:] = 0
+
+    cv2.putText(cv_frame, 'No Stream available. Please connect a Camera.', org=(30, 30),
+                fontScale=1, color=255, thickness=1, fontFace=cv2.FONT_HERSHEY_COMPLEX_SMALL)
+
+    return cv_frame
+
+
+def try_put_frame(q: queue.Queue, cam: Camera, frame: Optional[Frame]):
+    try:
+        q.put_nowait((cam.get_id(), frame))
+
+    except queue.Full:
+        pass
+
+
+def set_nearest_value(cam: Camera, feat_name: str, feat_value: int):
+    # Helper function that tries to set a given value. If setting of the initial value failed
+    # it calculates the nearest valid value and sets the result. This function is intended to
+    # be used with Height and Width Features because not all Cameras allow the same values
+    # for height and width.
+    feat = cam.get_feature_by_name(feat_name)
+
+    try:
+        feat.set(feat_value)
+
+    except VmbFeatureError:
+        min_, max_ = feat.get_range()
+        inc = feat.get_increment()
+
+        if feat_value <= min_:
+            val = min_
+
+        elif feat_value >= max_:
+            val = max_
+
+        else:
+            val = (((feat_value - min_) // inc) * inc) + min_
+
+        feat.set(val)
+
+        msg = ('Camera {}: Failed to set value of Feature \'{}\' to \'{}\': '
+               'Using nearest valid value \'{}\'. Note that, this causes resizing '
+               'during processing, reducing the frame rate.')
+        Log.get_instance().info(msg.format(cam.get_id(), feat_name, feat_value, val))
+
+
+# Thread Objects
+class FrameProducer(threading.Thread):
+    def __init__(self, cam: Camera, frame_queue: queue.Queue):
+        threading.Thread.__init__(self)
+
+        self.log = Log.get_instance()
+        self.cam = cam
+        self.frame_queue = frame_queue
+        self.killswitch = threading.Event()
+
+    def __call__(self, cam: Camera, stream: Stream, frame: Frame):
+        # This method is executed within VmbC context. All incoming frames
+        # are reused for later frame acquisition. If a frame shall be queued, the
+        # frame must be copied and the copy must be sent, otherwise the acquired
+        # frame will be overridden as soon as the frame is reused.
+        if frame.get_status() == FrameStatus.Complete:
+
+            if not self.frame_queue.full():
+                frame_cpy = copy.deepcopy(frame)
+                try_put_frame(self.frame_queue, cam, frame_cpy)
+
+        cam.queue_frame(frame)
+
+    def stop(self):
+        self.killswitch.set()
+
+    def setup_camera(self):
+        set_nearest_value(self.cam, 'Height', FRAME_HEIGHT)
+        set_nearest_value(self.cam, 'Width', FRAME_WIDTH)
+
+        # Try to enable automatic exposure time setting
+        try:
+            self.cam.ExposureAuto.set('Once')
+
+        except (AttributeError, VmbFeatureError):
+            self.log.info('Camera {}: Failed to set Feature \'ExposureAuto\'.'.format(
+                          self.cam.get_id()))
+
+        self.cam.set_pixel_format(PixelFormat.Mono8)
+
+    def run(self):
+        self.log.info('Thread \'FrameProducer({})\' started.'.format(self.cam.get_id()))
+
+        try:
+            with self.cam:
+                self.setup_camera()
+
+                try:
+                    self.cam.start_streaming(self)
+                    self.killswitch.wait()
+
+                finally:
+                    self.cam.stop_streaming()
+
+        except VmbCameraError:
+            pass
+
+        finally:
+            try_put_frame(self.frame_queue, self.cam, None)
+
+        self.log.info('Thread \'FrameProducer({})\' terminated.'.format(self.cam.get_id()))
+
+
+class FrameConsumer(threading.Thread):
+    def __init__(self, frame_queue: queue.Queue):
+        threading.Thread.__init__(self)
+
+        self.log = Log.get_instance()
+        self.frame_queue = frame_queue
+
+    def run(self):
+        IMAGE_CAPTION = 'Multithreading Example: Press <Enter> to exit'
+        KEY_CODE_ENTER = 13
+
+        frames = {}
+        alive = True
+
+        self.log.info('Thread \'FrameConsumer\' started.')
+
+        while alive:
+            # Update current state by dequeuing all currently available frames.
+            frames_left = self.frame_queue.qsize()
+            while frames_left:
+                try:
+                    cam_id, frame = self.frame_queue.get_nowait()
+
+                except queue.Empty:
+                    break
+
+                # Add/Remove frame from current state.
+                if frame:
+                    frames[cam_id] = frame
+
+                else:
+                    frames.pop(cam_id, None)
+
+                frames_left -= 1
+
+            # Construct image by stitching frames together.
+            if frames:
+                cv_images = [resize_if_required(frames[cam_id]) for cam_id in sorted(frames.keys())]
+                cv2.imshow(IMAGE_CAPTION, numpy.concatenate(cv_images, axis=1))
+
+            # If there are no frames available, show dummy image instead
+            else:
+                cv2.imshow(IMAGE_CAPTION, create_dummy_frame())
+
+            # Check for shutdown condition
+            if KEY_CODE_ENTER == cv2.waitKey(10):
+                cv2.destroyAllWindows()
+                alive = False
+
+        self.log.info('Thread \'FrameConsumer\' terminated.')
+
+
+class MainThread(threading.Thread):
+    def __init__(self):
+        threading.Thread.__init__(self)
+
+        self.frame_queue = queue.Queue(maxsize=FRAME_QUEUE_SIZE)
+        self.producers = {}
+        self.producers_lock = threading.Lock()
+
+    def __call__(self, cam: Camera, event: CameraEvent):
+        # New camera was detected. Create FrameProducer, add it to active FrameProducers
+        if event == CameraEvent.Detected:
+            with self.producers_lock:
+                self.producers[cam.get_id()] = FrameProducer(cam, self.frame_queue)
+                self.producers[cam.get_id()].start()
+
+        # An existing camera was disconnected, stop associated FrameProducer.
+        elif event == CameraEvent.Missing:
+            with self.producers_lock:
+                producer = self.producers.pop(cam.get_id())
+                producer.stop()
+                producer.join()
+
+    def run(self):
+        log = Log.get_instance()
+        consumer = FrameConsumer(self.frame_queue)
+
+        vmb = VmbSystem.get_instance()
+        vmb.enable_log(LOG_CONFIG_INFO_CONSOLE_ONLY)
+
+        log.info('Thread \'MainThread\' started.')
+
+        with vmb:
+            # Construct FrameProducer threads for all detected cameras
+            for cam in vmb.get_all_cameras():
+                self.producers[cam.get_id()] = FrameProducer(cam, self.frame_queue)
+
+            # Start FrameProducer threads
+            with self.producers_lock:
+                for producer in self.producers.values():
+                    producer.start()
+
+            # Start and wait for consumer to terminate
+            vmb.register_camera_change_handler(self)
+            consumer.start()
+            consumer.join()
+            vmb.unregister_camera_change_handler(self)
+
+            # Stop all FrameProducer threads
+            with self.producers_lock:
+                # Initiate concurrent shutdown
+                for producer in self.producers.values():
+                    producer.stop()
+
+                # Wait for shutdown to complete
+                for producer in self.producers.values():
+                    producer.join()
+
+        log.info('Thread \'MainThread\' terminated.')
+
+
+if __name__ == '__main__':
+    print_preamble()
+    main = MainThread()
+    main.start()
+    main.join()
diff --git a/VimbaX/api/examples/VmbPy/synchronous_grab.py b/VimbaX/api/examples/VmbPy/synchronous_grab.py
new file mode 100644
index 0000000000000000000000000000000000000000..340b6c3d0cc56342c64a7d74755ea7292140b107
--- /dev/null
+++ b/VimbaX/api/examples/VmbPy/synchronous_grab.py
@@ -0,0 +1,117 @@
+"""BSD 2-Clause License
+
+Copyright (c) 2022, Allied Vision Technologies GmbH
+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.
+
+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 HOLDER 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.
+"""
+import sys
+from typing import Optional
+
+from vmbpy import *
+
+
+def print_preamble():
+    print('//////////////////////////////////////')
+    print('/// VmbPy Synchronous Grab Example ///')
+    print('//////////////////////////////////////\n')
+
+
+def print_usage():
+    print('Usage:')
+    print('    python synchronous_grab.py [camera_id]')
+    print('    python synchronous_grab.py [/h] [-h]')
+    print()
+    print('Parameters:')
+    print('    camera_id   ID of the camera to use (using first camera if not specified)')
+    print()
+
+
+def abort(reason: str, return_code: int = 1, usage: bool = False):
+    print(reason + '\n')
+
+    if usage:
+        print_usage()
+
+    sys.exit(return_code)
+
+
+def parse_args() -> Optional[str]:
+    args = sys.argv[1:]
+    argc = len(args)
+
+    for arg in args:
+        if arg in ('/h', '-h'):
+            print_usage()
+            sys.exit(0)
+
+    if argc > 1:
+        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
+
+    return None if argc == 0 else args[0]
+
+
+def get_camera(camera_id: Optional[str]) -> Camera:
+    with VmbSystem.get_instance() as vmb:
+        if camera_id:
+            try:
+                return vmb.get_camera_by_id(camera_id)
+
+            except VmbCameraError:
+                abort('Failed to access Camera \'{}\'. Abort.'.format(camera_id))
+
+        else:
+            cams = vmb.get_all_cameras()
+            if not cams:
+                abort('No Cameras accessible. Abort.')
+
+            return cams[0]
+
+
+def setup_camera(cam: Camera):
+    with cam:
+        # Try to adjust GeV packet size. This Feature is only available for GigE - Cameras.
+        try:
+            stream = cam.get_streams()[0]
+            stream.GVSPAdjustPacketSize.run()
+            while not stream.GVSPAdjustPacketSize.is_done():
+                pass
+
+        except (AttributeError, VmbFeatureError):
+            pass
+
+
+def main():
+    print_preamble()
+    cam_id = parse_args()
+
+    with VmbSystem.get_instance():
+        with get_camera(cam_id) as cam:
+            setup_camera(cam)
+
+            # Acquire 10 frame with a custom timeout (default is 2000ms) per frame acquisition.
+            for frame in cam.get_frame_generator(limit=10, timeout_ms=3000):
+                print('Got {}'.format(frame), flush=True)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/VimbaX/api/examples/VmbPy/user_set.py b/VimbaX/api/examples/VmbPy/user_set.py
new file mode 100644
index 0000000000000000000000000000000000000000..58655e42d601d4a35f0e1b4f1844b147eafb80b9
--- /dev/null
+++ b/VimbaX/api/examples/VmbPy/user_set.py
@@ -0,0 +1,342 @@
+"""BSD 2-Clause License
+
+Copyright (c) 2022, Allied Vision Technologies GmbH
+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.
+
+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 HOLDER 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.
+"""
+import sys
+from typing import Any, Dict, Optional
+
+from vmbpy import *
+
+
+def print_preamble():
+    print('//////////////////////////////')
+    print('/// VmbPy User Set Example ///')
+    print('//////////////////////////////\n')
+
+
+def print_usage():
+    print('Usage:')
+    print('    python user_set.py [camera_id] [/i:Index] [/{h|s|l|i|m|d|or|os|n}]')
+    print()
+    print('Parameters:')
+    print('    camera_id   ID of the camera to use (using first camera if not specified)')
+    print('    /i:index    User set index')
+    print('    /h          Print help')
+    print('    /s          Save user set to flash')
+    print('    /l          Load user set from flash (default if not specified)')
+    print('    /i          Get selected user set index')
+    print('    /m          Make user set default')
+    print('    /d          Is user set default')
+    print('    /or         Get user set operation default.')
+    print('    /os         Get user set operation status.')
+    print('    /n          Get user set count')
+    print()
+    print('Examples:')
+    print('     To load user set 0 (factory set) from flash in order to activate it call:')
+    print('     UserSet /i:0 /l')
+    print()
+    print('     To save the current settings to user set 1 call:')
+    print('     UserSet /i:1 /s')
+    print()
+
+
+def abort(reason: str, return_code: int = 1, usage: bool = False):
+    print(reason + '\n')
+
+    if usage:
+        print_usage()
+
+    sys.exit(return_code)
+
+
+def parse_args() -> Dict[str, Any]:
+    args = sys.argv[1:]
+    argc = len(args)
+
+    result: Dict[str, Any] = {}
+
+    if (argc <= 0) or (4 <= argc):
+        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
+
+    for arg in args:
+        if arg in ('/h'):
+            print_usage()
+            sys.exit(0)
+
+        # Examine command parameters
+        if arg in ('/s', '/l', '/i', '/m', '/d', '/or', '/os', '/n'):
+            if result.get('mode') is None:
+                result['mode'] = arg
+
+            else:
+                abort(reason="Multiple Commands specified. Abort.", return_code=2, usage=True)
+
+        # Examine specified index
+        elif arg.startswith('/i:'):
+            _, set_id = arg.split(':')
+
+            if not set_id:
+                abort(reason="No index specified after /i:. Abort.", return_code=2, usage=True)
+
+            try:
+                set_id_int = int(set_id)
+
+            except ValueError:
+                abort(reason="Number in /i:<no> is no Integer. Abort.", return_code=2, usage=True)
+
+            if set_id_int < 0:
+                abort(reason="Number in /i:<no> is negative. Abort.", return_code=2, usage=True)
+
+            if result.get('set_id') is not None:
+                abort(reason="Multiple /i:<no> specified. Abort.", return_code=2, usage=True)
+
+            result['set_id'] = set_id_int
+
+        # Examine camera id
+        elif result.get('camera_id') is None:
+            result['camera_id'] = arg
+
+        else:
+            abort(reason="Invalid arguments. Abort.", return_code=2, usage=True)
+
+    # Apply defaults
+    if not result.get('mode'):
+        result['mode'] = '/l'
+
+    return result
+
+
+def get_camera(cam_id: Optional[str]):
+    with VmbSystem.get_instance() as vmb:
+        # Lookup Camera if it was specified.
+        if cam_id:
+            try:
+                return vmb.get_camera_by_id(cam_id)
+
+            except VmbCameraError:
+                abort('Failed to access Camera {}. Abort.'.format(cam_id))
+
+        # If no camera was specified, use first detected camera.
+        else:
+            cams = vmb.get_all_cameras()
+            if not cams:
+                abort('No Camera detected. Abort.')
+
+            return cams[0]
+
+
+def select_user_set(camera: Camera, set_id: int):
+    try:
+        camera.get_feature_by_name('UserSetSelector').set(set_id)
+
+    except VmbFeatureError:
+        abort('Failed to select user set with \'{}\'. Abort.'.format(set_id))
+
+
+def load_from_flash(cam: Camera, set_id: int):
+    with cam:
+        print('Loading user set \'{}\' from flash.'.format(set_id))
+
+        select_user_set(cam, set_id)
+
+        try:
+            cmd = cam.get_feature_by_name('UserSetLoad')
+            cmd.run()
+
+            while not cmd.is_done():
+                pass
+
+        except VmbFeatureError:
+            abort('Failed to load user set \'{}\' from flash. Abort.'.format(set_id))
+
+        print('Loaded user set \'{}\' loaded from flash successfully.'.format(set_id))
+
+
+def save_to_flash(cam: Camera, set_id: int):
+    with cam:
+        print('Saving user set \'{}\' to flash.'.format(set_id))
+
+        select_user_set(cam, set_id)
+
+        try:
+            cmd = cam.get_feature_by_name('UserSetSave')
+            cmd.run()
+
+            while not cmd.is_done():
+                pass
+
+        except VmbFeatureError:
+            abort('Failed to save user set \'{}\' to flash. Abort.'.format(set_id))
+
+        print('Saved user set \'{}\' to flash.'.format(set_id))
+
+
+def get_active_user_set(cam: Camera, _: int):
+    with cam:
+        print('Get selected user set id.')
+
+        try:
+            value = cam.get_feature_by_name('UserSetSelector').get()
+
+        except VmbFeatureError:
+            abort('Failed to get user set id. Abort.')
+
+        print('The selected user set id is \'{}\'.'.format(int(value)))
+
+
+def get_number_of_user_sets(cam: Camera, _: int):
+    with cam:
+        print('Get total number of user sets.')
+
+        try:
+            feat = cam.get_feature_by_name('UserSetSelector')
+            value = len(feat.get_available_entries())
+
+        except VmbFeatureError:
+            abort('Failed to get total number of user sets. Abort.')
+
+        print('The total number of user sets is \'{}\''.format(value))
+
+
+def set_default_user_set(cam: Camera, set_id: int):
+    with cam:
+        print('Set user set \'{}\' as default.'.format(set_id))
+
+        try:
+            feat = cam.get_feature_by_name('UserSetDefault')
+
+            try:
+                feat.set(set_id)
+
+            except VmbFeatureError:
+                abort('Failed to set user set id \'{}\' as default user set'.format(set_id))
+
+        except VmbFeatureError:
+            # UserSetDefault was not found. Try the old feature name as fallback
+            try:
+                feat = cam.get_feature_by_name('UserSetDefaultSelector')
+
+                try:
+                    feat.set(set_id)
+
+                except VmbFeatureError:
+                    abort('Failed to set user set id \'{}\' as default user set'.format(set_id))
+
+            except VmbFeatureError:
+                # Try to set mode via UserSetMakeDefault command
+                select_user_set(cam, set_id)
+
+                try:
+                    cmd = cam.get_feature_by_name('UserSetMakeDefault')
+                    cmd.run()
+
+                    while not cmd.is_done():
+                        pass
+
+                except VmbFeatureError:
+                    abort('Failed to set user set id \'{}\' as default user set'.format(set_id))
+
+        print('User set \'{}\' is the new default user set.'.format(set_id))
+
+
+def is_default_user_set(cam: Camera, set_id: int):
+    with cam:
+        print('Is user set \'{}\' the default user set?'.format(set_id))
+
+        try:
+            default_id = int(cam.get_feature_by_name('UserSetDefault').get())
+
+        except VmbFeatureError:
+            try:
+                default_id = int(cam.get_feature_by_name('UserSetDefaultSelector').get())
+
+            except VmbFeatureError:
+                abort('Failed to get default user set id. Abort.')
+
+        msg = 'User set \'{}\' {} the default user set.'
+        print(msg.format(set_id, 'is' if set_id == default_id else 'is not'))
+
+
+def get_operation_result(cam: Camera, set_id: int):
+    with cam:
+        print('Get user set operation result.')
+
+        try:
+            result = cam.get_feature_by_name('UserSetOperationResult').get()
+
+        except VmbFeatureError:
+            abort('Failed to get user set operation result. Abort.')
+
+        print('Operation result was {}.'.format(result))
+
+
+def get_operation_status(cam: Camera, set_id: int):
+    with cam:
+        print('Get user set operation status.')
+
+        try:
+            result = cam.get_feature_by_name('UserSetOperationStatus').get()
+
+        except VmbFeatureError:
+            abort('Failed to get user set operation status. Abort.')
+
+        print('Operation status was {}.'.format(result))
+
+
+def main():
+    print_preamble()
+    args = parse_args()
+
+    with VmbSystem.get_instance():
+        cam = get_camera(args.get('camera_id'))
+        print('Using Camera with ID \'{}\''.format(cam.get_id()))
+
+        with cam:
+            mode = args['mode']
+
+            try:
+                set_id = args.get('set_id', int(cam.get_feature_by_name('UserSetSelector').get()))
+
+            except VmbFeatureError:
+                abort('Failed to get id of current user set. Abort.')
+
+            # Mode -> Function Object mapping
+            mode_to_fn = {
+                '/l': load_from_flash,
+                '/s': save_to_flash,
+                '/i': get_active_user_set,
+                '/n': get_number_of_user_sets,
+                '/m': set_default_user_set,
+                '/d': is_default_user_set,
+                '/or': get_operation_result,
+                '/os': get_operation_status
+            }
+
+            fn = mode_to_fn[mode]
+            fn(cam, set_id)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/VimbaX/api/examples/cmake/vmb_cmake_prefix_paths.cmake b/VimbaX/api/examples/cmake/vmb_cmake_prefix_paths.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..4c54d3fc004d6500575836b9427531d65bd19f7e
--- /dev/null
+++ b/VimbaX/api/examples/cmake/vmb_cmake_prefix_paths.cmake
@@ -0,0 +1,2 @@
+# add hardcoded guesses for the location of Vmb to CMAKE_PREFIX_PATH
+list(APPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR}/../.. ENV{VMB_HOME}/api $ENV{VIMBA_X_HOME}/api)
diff --git a/VimbaX/api/include/VmbC/VmbC.h b/VimbaX/api/include/VmbC/VmbC.h
new file mode 100644
index 0000000000000000000000000000000000000000..8347195d093c4dd42d2e30cb561a855b0d7d6baf
--- /dev/null
+++ b/VimbaX/api/include/VmbC/VmbC.h
@@ -0,0 +1,2182 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this header file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbC.h
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+/**
+ * \file
+ * \brief Main header file for the VmbC API.
+ * 
+ * This file describes all necessary definitions for using Allied Vision's
+ * VmbC API. These type definitions are designed to be portable from other
+ * languages and other operating systems.
+ *
+ * General conventions:
+ * - Method names are composed in the following manner:
+ *    - Vmb"Action"                                        example: ::VmbStartup()
+ *    - Vmb"Entity""Action" or Vmb"ActionTarget""Action"   example: ::VmbCameraOpen()
+ *    - Vmb"Entity""SubEntity/ActionTarget""Action"        example: ::VmbFeatureCommandRun()
+ * 
+ * - Strings (generally declared as "const char *") are assumed to have a trailing 0 character
+ * - All pointer parameters should of course be valid, except if stated otherwise.
+ * - To ensure compatibility with older programs linked against a former version of the API,
+ *   all struct* parameters have an accompanying sizeofstruct parameter.
+ * - Functions returning lists are usually called twice: once with a zero buffer
+ *   to get the length of the list, and then again with a buffer of the correct length.
+ */
+
+#ifndef VMBC_H_INCLUDE_
+#define VMBC_H_INCLUDE_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <VmbC/VmbCommonTypes.h>
+#include <VmbC/VmbCTypeDefinitions.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \brief Timeout parameter signaling a blocking call.
+ */
+#define VMBINFINITE        0xFFFFFFFF
+
+/**
+ * \brief Define for the handle to use for accessing the Vmb system features cast to a given type
+ *
+ * Note: The primary purpose of this macro is the use in the VmbC sources.
+ *       API users should use ::gVmbHandle instead.
+ */
+#define VMB_API_HANDLE(typeName) ((typeName)((((VmbUint64_t)1) << (VmbUint64_t)(sizeof(VmbHandle_t) * 8 - 4)) | ((VmbUint64_t) 1)))
+
+/**
+ * \brief Constant for the Vmb handle to be able to access Vmb system features.
+ */
+static const VmbHandle_t gVmbHandle = VMB_API_HANDLE(VmbHandle_t);
+
+//===== FUNCTION PROTOTYPES ===================================================
+
+/**
+ * \defgroup Functions Vmb C API Functions
+ * \{
+ */
+
+/**
+ * \name API Version
+ * \defgroup Version API Version
+ * \{
+ */
+
+/**
+ * \brief Retrieve the version number of VmbC.
+ * 
+ * This function can be called at anytime, even before the API is
+ * initialized. All other version numbers may be queried via feature access.
+ * 
+ * \param[out]  versionInfo             Pointer to the struct where version information resides
+ * \param[in]   sizeofVersionInfo       Size of structure in bytes
+ * 
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback.
+ * 
+ * \retval ::VmbErrorStructSize         The given struct size is not valid for this version of the API
+ *
+ * \retval ::VmbErrorBadParameter       \p versionInfo is null.
+ * 
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbVersionQuery ( VmbVersionInfo_t*   versionInfo,
+                                                VmbUint32_t         sizeofVersionInfo );
+/**
+ * \}
+ */
+
+/**
+ * \name API Initialization
+ * \{
+ * \defgroup Init API Initialization
+ * \{
+ */
+
+/**
+ * \brief Initializes the VmbC API.
+ * 
+ * Note: This function must be called before any VmbC function other than ::VmbVersionQuery() is run.
+ * 
+ * \param[in]   pathConfiguration       A string containing a semicolon (Windows) or colon (other os) separated list of paths. The paths contain directories to search for .cti files,
+ *                                      paths to .cti files and optionally the path to a configuration xml file. If null is passed the parameter is the cti files found in the paths
+ *                                      the GENICAM_GENTL{32|64}_PATH environment variable are considered
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ * 
+ * \retval ::VmbErrorAlready            This function was called before and call to ::VmbShutdown has been executed on a non-callback thread
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a callback or ::VmbShutdown is currently running
+ * 
+ * \retval ::VmbErrorXml                If parsing the settings xml is unsuccessful; a missing default xml file does not result in this error.
+ * 
+ * \retval ::VmbErrorTLNotFound         A transport layer that was marked as required was not found.
+ * 
+ * \retval ::VmbErrorNoTL               No transport layer was found on the system; note that some of the transport layers may have been filtered out via the settings file.
+ * 
+ * \retval ::VmbErrorIO                 A log file should be written according to the settings xml file, but this log file could not be opened.
+ * 
+ * \retval ::VmbErrorBadParameter       \p pathConfiguration contains only separator and whitespace chars.
+ * 
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbStartup (const VmbFilePathChar_t* pathConfiguration);
+
+/**
+ * \brief Perform a shutdown of the API.
+ * 
+ * This frees some resources and deallocates all physical resources if applicable.
+ * 
+ * The call is silently ignored, if executed from a callback.
+ * 
+ */
+IMEXPORTC void VMB_CALL VmbShutdown ( void );
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Camera Enumeration & Information
+ * \{
+ * \defgroup CameraInfo Camera Enumeration & Information
+ * \{
+ */
+
+/**
+ * List all the cameras that are currently visible to the API.
+ *
+ * Note: This function is usually called twice: once with an empty array to query the length
+ *       of the list, and then again with an array of the correct length.
+ *       If camera lists change between the calls, numFound may deviate from the query return.
+ *
+ * \param[in,out]    cameraInfo             Array of VmbCameraInfo_t, allocated by the caller.
+ *                                          The camera list is copied here. May be null.
+ *
+ * \param[in]        listLength             Number of entries in the callers cameraInfo array.
+ *
+ * \param[in,out]    numFound               Number of cameras found. Can be more than listLength.
+ *
+ * \param[in]        sizeofCameraInfo       Size of one VmbCameraInfo_t entry (if \p cameraInfo is null, this parameter is ignored).
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p numFound is null
+ *
+ * \retval ::VmbErrorStructSize         The given struct size is not valid for this API version and \p cameraInfo is not null
+ *
+ * \retval ::VmbErrorMoreData           The given list length was insufficient to hold all available entries
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbCamerasList ( VmbCameraInfo_t*   cameraInfo,
+                                               VmbUint32_t        listLength,
+                                               VmbUint32_t*       numFound,
+                                               VmbUint32_t        sizeofCameraInfo );
+
+/**
+ * \brief Retrieve information about a single camera given its handle.
+ *
+ * Note: Some information is only filled for opened cameras.
+ *
+ * \param[in]       cameraHandle            The handle of the camera; both remote and local device handles are permitted
+ *
+ * \param[in,out]   info                    Structure where information will be copied
+ *
+ * \param[in]       sizeofCameraInfo        Size of the structure
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorStructSize         The given struct size is not valid for this API version
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ *
+ * \retval ::VmbErrorBadParameter       \p info is null
+ * 
+ * \retval ::VmbErrorBadHandle          The handle does not correspond to a camera
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbCameraInfoQueryByHandle(   VmbHandle_t         cameraHandle,
+                                                            VmbCameraInfo_t*    info,
+                                                            VmbUint32_t         sizeofCameraInfo);
+
+/**
+ * \brief Retrieve information about a single camera given the ID of the camera.
+ *
+ * Note: Some information is only filled for opened cameras.
+ *
+ * \param[in]       idString                ID of the camera
+ *
+ * \param[in,out]   info                    Structure where information will be copied
+ *
+ * \param[in]       sizeofCameraInfo        Size of the structure
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ * 
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p idString or \p info are null or \p idString is the empty string
+ * 
+ * \retval ::VmbErrorNotFound           No camera with the given id is found
+ *
+ * \retval ::VmbErrorStructSize         The given struct size is not valid for this API version
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbCameraInfoQuery ( const char*         idString,
+                                                   VmbCameraInfo_t*    info,
+                                                   VmbUint32_t         sizeofCameraInfo );
+
+/**
+ * \brief Open the specified camera.
+ * 
+ * \param[in]   idString            ID of the camera.
+ * \param[in]   accessMode          The desired access mode.
+ * \param[out]  cameraHandle        The remote device handle of the camera, if opened successfully.
+ * 
+ * A camera may be opened in a specific access mode, which determines
+ * the level of control you have on a camera.
+ * Examples for idString:
+ * 
+ * "DEV_81237473991" for an ID given by a transport layer,
+ * "169.254.12.13" for an IP address,
+ * "000F314C4BE5" for a MAC address or 
+ * "DEV_1234567890" for an ID as reported by Vmb
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorInUse              The camera with the given ID is already opened
+ *
+ * \retval ::VmbErrorInvalidCall        If called from frame callback or chunk access callback
+ *
+ * \retval ::VmbErrorBadParameter       If \p idString or \p cameraHandle are null
+ *
+ * \retval ::VmbErrorInvalidAccess      A camera with the given id was found, but could not be opened
+ * 
+ * \retval ::VmbErrorNotFound           The designated camera cannot be found
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbCameraOpen ( const char*      idString,
+                                              VmbAccessMode_t  accessMode,
+                                              VmbHandle_t*     cameraHandle );
+
+/**
+ * \brief Close the specified camera.
+ * 
+ * Depending on the access mode this camera was opened with, events are killed,
+ * callbacks are unregistered, and camera control is released.
+ * 
+ * \param[in]   cameraHandle        A valid camera handle
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ * 
+ * \retval ::VmbErrorInUse              The camera is currently in use with ::VmbChunkDataAccess
+ * 
+ * \retval ::VmbErrorBadHandle          The handle does not correspond to an open camera
+ *
+ * \retval ::VmbErrorInvalidCall        If called from frame callback or chunk access callback
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbCameraClose ( const VmbHandle_t  cameraHandle );
+
+/**
+ * \} \}
+ */
+
+//----- Features ----------------------------------------------------------
+
+/**
+ * \name General Feature Functions
+ * \{
+ * \defgroup GeneralFeatures General Feature Functions
+ * \{
+ */
+
+/**
+ * \brief List all the features for this entity.
+ * 
+ * This function lists all implemented features, whether they are currently available or not.
+ * The list of features does not change as long as the entity is connected.
+ *
+ * This function is usually called twice: once with an empty list to query the length
+ * of the list, and then again with a list of the correct length.
+ * 
+ * If ::VmbErrorMoreData is returned and \p numFound is non-null, the total number of features has been written to \p numFound.
+ * 
+ * If there are more elements in \p featureInfoList than features available, the remaining elements
+ * are filled with zero-initialized ::VmbFeatureInfo_t structs.
+ * 
+ * \param[in]   handle                  Handle for an entity that exposes features
+ * \param[out]  featureInfoList         An array of ::VmbFeatureInfo_t to be filled by the API. May be null if \p numFund is used for size query.
+ * \param[in]   listLength              Number of ::VmbFeatureInfo_t elements provided
+ * \param[out]  numFound                Number of ::VmbFeatureInfo_t elements found. May be null if \p featureInfoList is not null.
+ * \param[in]   sizeofFeatureInfo       Size of a ::VmbFeatureInfo_t entry
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ * 
+ * \retval ::VmbErrorStructSize         The given struct size of ::VmbFeatureInfo_t is not valid for this version of the API
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       Both \p featureInfoList and \p numFound are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorMoreData           The given list length was insufficient to hold all available entries
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeaturesList ( VmbHandle_t         handle,
+                                                VmbFeatureInfo_t*   featureInfoList,
+                                                VmbUint32_t         listLength,
+                                                VmbUint32_t*        numFound,
+                                                VmbUint32_t         sizeofFeatureInfo );
+
+/**
+ * \brief Query information about the constant properties of a feature.
+ * 
+ * Users provide a pointer to ::VmbFeatureInfo_t, which is then set to the internal representation.
+ * 
+ * \param[in]   handle                  Handle for an entity that exposes features
+ * \param[in]   name                    Name of the feature
+ * \param[out]  featureInfo             The feature info to query
+ * \param[in]   sizeofFeatureInfo       Size of the structure
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorStructSize         The given struct size of ::VmbFeatureInfo_t is not valid for this version of the API
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name or \p featureInfo are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ * 
+ * \retval ::VmbErrorNotFound           A feature with the given name does not exist.
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureInfoQuery ( const VmbHandle_t   handle,
+                                                    const char*         name,
+                                                    VmbFeatureInfo_t*   featureInfo,
+                                                    VmbUint32_t         sizeofFeatureInfo );
+
+/**
+ * \brief List all the features selected by a given feature for this module.
+ *
+ * This function lists all selected features, whether they are currently available or not.
+ * Features with selected features ("selectors") have no direct impact on the camera,
+ * but only influence the register address that selected features point to.
+ * The list of features does not change while the camera/interface is connected.
+ * This function is usually called twice: once with an empty array to query the length
+ * of the list, and then again with an array of the correct length.
+ * 
+ * \param[in]   handle                  Handle for an entity that exposes features
+ * \param[in]   name                    Name of the feature
+ * \param[out]  featureInfoList         An array of ::VmbFeatureInfo_t to be filled by the API. May be null if \p numFound is used for size query.
+ * \param[in]   listLength              Number of ::VmbFeatureInfo_t elements provided
+ * \param[out]  numFound                Number of ::VmbFeatureInfo_t elements found. May be null if \p featureInfoList is not null.
+ * \param[in]   sizeofFeatureInfo       Size of a ::VmbFeatureInfo_t entry
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ * 
+ * \retval ::VmbErrorBadParameter       \p name is null or both \p featureInfoList and \p numFound are null
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorStructSize         The given struct size of ::VmbFeatureInfo_t is not valid for this version of the API
+ *
+ * \retval ::VmbErrorMoreData           The given list length was insufficient to hold all available entries
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureListSelected ( const VmbHandle_t  handle,
+                                                       const char*        name,
+                                                       VmbFeatureInfo_t*  featureInfoList,
+                                                       VmbUint32_t        listLength,
+                                                       VmbUint32_t*       numFound,
+                                                       VmbUint32_t        sizeofFeatureInfo );
+
+/**
+ * \brief Return the dynamic read and write capabilities of this feature.
+ * 
+ * The access mode of a feature may change. For example, if "PacketSize"
+ * is locked while image data is streamed, it is only readable.
+ * 
+ * \param[in]   handle              Handle for an entity that exposes features.
+ * \param[in]   name                Name of the feature.
+ * \param[out]  isReadable          Indicates if this feature is readable. May be null.
+ * \param[out]  isWriteable         Indicates if this feature is writable. May be null.
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name is null or both \p isReadable and \p isWriteable are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureAccessQuery ( const VmbHandle_t   handle,
+                                                      const char*         name,
+                                                      VmbBool_t *         isReadable,
+                                                      VmbBool_t *         isWriteable );
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Integer Feature Access
+ * \{
+ * \defgroup IntAccess Integer Feature Access
+ * \{
+ */
+
+/**
+ * \brief Get the value of an integer feature.
+ * 
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the feature
+ * \param[out]  value       Value to get
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess The call was successful
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name or \p value are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Integer
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureIntGet ( const VmbHandle_t   handle,
+                                                 const char*         name,
+                                                 VmbInt64_t*         value );
+
+/**
+ * \brief Set the value of an integer feature.
+ * 
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the feature
+ * \param[in]   value       Value to set
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorInvalidCall        If called from feature callback
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       If \p name is null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Integer
+ *
+ * \retval ::VmbErrorInvalidAccess      The feature is unavailable or not writable
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ *
+ * \retval ::VmbErrorInvalidValue       If value is either out of bounds or not an increment of the minimum
+ * 
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureIntSet ( const VmbHandle_t   handle,
+                                                 const char*         name,
+                                                 VmbInt64_t          value );
+
+/**
+ * \brief Query the range of an integer feature.
+ * 
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the feature
+ * \param[out]  min         Minimum value to be returned. May be null.
+ * \param[out]  max         Maximum value to be returned. May be null.
+ * 
+ * 
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       If \p name is null or both \p min and \p max are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature name is not Integer
+ *
+ * \retval ::VmbErrorInvalidAccess      The range information is unavailable or not writable
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureIntRangeQuery ( const VmbHandle_t   handle,
+                                                        const char*         name,
+                                                        VmbInt64_t*         min,
+                                                        VmbInt64_t*         max );
+
+/**
+ * \brief Query the increment of an integer feature.
+ * 
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the feature
+ * \param[out]  value       Value of the increment to get.
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       If \p name or \p value are null
+ * 
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ * 
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Integer
+ *
+ * \retval ::VmbErrorInvalidAccess      The information is unavailable or cannot be read
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureIntIncrementQuery ( const VmbHandle_t   handle,
+                                                            const char*         name,
+                                                            VmbInt64_t*         value );
+
+/**
+ * \brief Retrieves info about the valid value set of an integer feature.
+ * 
+ * Retrieves information about the set of valid values of an integer feature. If null is passed as buffer,
+ * only the size of the set is determined and written to bufferFilledCount; Otherwise the largest possible
+ * number of elements of the valid value set is copied to buffer.
+ * 
+ * \param[in]   handle                  The handle for the entity the feature information is retrieved from
+ * \param[in]   name                    The name of the feature to retrieve the info for; if null is passed ::VmbErrorBadParameter is returned
+ * \param[in]   buffer                  The array to copy the valid values to or null if only the size of the set is requested
+ * \param[in]   bufferSize              The size of buffer; if buffer is null, the value is ignored
+ * \param[out]  setSize                 The total number of elements in the set; the value is set, if ::VmbErrorMoreData is returned
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess                        The call was successful 
+ *
+ * \retval ::VmbErrorApiNotStarted                  ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter                   \p name is null or both \p buffer and \p bufferFilledCount are null
+ *
+ * \retval ::VmbErrorBadHandle                      The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound                       The feature was not found
+ * 
+ * \retval ::VmbErrorWrongType                      The type of the feature is not Integer
+ *
+ * \retval ::VmbErrorValidValueSetNotPresent        The feature does not provide a valid value set
+ *
+ * \retval ::VmbErrorMoreData                       Some of data was retrieved successfully, but the size of buffer is insufficient to store all elements
+ *
+ * \retval ::VmbErrorIncomplete                     The module the handle refers to is in a state where it cannot complete the request
+ *
+ * \retval ::VmbErrorOther                          Some other issue occurred
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureIntValidValueSetQuery(const VmbHandle_t   handle,
+                                                              const char*         name,
+                                                              VmbInt64_t*         buffer,
+                                                              VmbUint32_t         bufferSize,
+                                                              VmbUint32_t*        setSize);
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Float Feature Access
+ * \{
+ * \defgroup FloatAccess Float Feature Access
+ * \{
+ */
+
+/**
+ * \brief Get the value of a float feature.
+ * 
+ * \param[in]   handle  Handle for an entity that exposes features
+ * \param[in]   name    Name of the feature
+ * \param[out]  value   Value to get
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful 
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name or \p value are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Float
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ * 
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureFloatGet ( const VmbHandle_t   handle,
+                                                   const char*         name,
+                                                   double*             value );
+
+/**
+ * \brief Set the value of a float feature.
+ * 
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the feature
+ * \param[in]   value       Value to set
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful 
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorInvalidCall        If called from feature callback
+ *
+ * \retval ::VmbErrorBadParameter       \p name is null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Float
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ *
+ * \retval ::VmbErrorInvalidValue       If value is not within valid bounds
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureFloatSet ( const VmbHandle_t   handle,
+                                                   const char*         name,
+                                                   double              value );
+
+/**
+ * \brief Query the range of a float feature.
+ * 
+ * Only one of the values may be queried if the other parameter is set to null,
+ * but if both parameters are null, an error is returned.
+ * 
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the feature
+ * \param[out]  min         Minimum value to be returned. May be null.
+ * \param[out]  max         Maximum value to be returned. May be null.
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful 
+ *
+ * \retval ::VmbErrorBadParameter       \p name is null or both \p min and \p max are null
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Float
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureFloatRangeQuery ( const VmbHandle_t   handle,
+                                                          const char*         name,
+                                                          double*             min,
+                                                          double*             max );
+
+/**
+ * \brief Query the increment of a float feature.
+ * 
+ * \param[in]   handle              Handle for an entity that exposes features
+ * \param[in]   name                Name of the feature
+ * \param[out]  hasIncrement        `true` if this float feature has an increment.
+ * \param[out]  value               Value of the increment to get.
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful 
+ *
+ * \retval ::VmbErrorBadParameter       \p name is null or both \p value and \p hasIncrement are null
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Float
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureFloatIncrementQuery ( const VmbHandle_t   handle,
+                                                              const char*         name,
+                                                              VmbBool_t*          hasIncrement,
+                                                              double*             value );
+
+/**
+ * \} \}
+*/
+
+/**
+ * \name Enum Feature Access
+ * \{
+ * \defgroup EnumAccess Enum Feature Access
+ * \{
+ */
+
+/**
+ * \brief Get the value of an enumeration feature.
+ * 
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the feature
+ * \param[out]  value       The current enumeration value. The returned value is a
+ *                          reference to the API value
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful 
+ *
+ * \retval ::VmbErrorBadParameter       \p name or \p value are null
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature featureName is not Enumeration
+ * 
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature is not available
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumGet ( const VmbHandle_t   handle,
+                                                  const char*         name,
+                                                  const char**        value );
+
+/**
+ * \brief Set the value of an enumeration feature.
+ *
+ * \param[in] handle    Handle for an entity that exposes features
+ * \param[in] name      Name of the feature
+ * \param[in] value     Value to set
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorInvalidCall        If called from feature callback
+ *
+ * \retval ::VmbErrorBadParameter       If \p name or \p value are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Enumeration
+ *
+ * \retval ::VmbErrorNotAvailable       The feature is not available
+ * 
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ *
+ * \retval ::VmbErrorInvalidValue       \p value is not a enum entry for the feature or the existing enum entry is currently not available
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumSet ( const VmbHandle_t   handle,
+                                                  const char*         name,
+                                                  const char*         value );
+
+/**
+ * \brief Query the value range of an enumeration feature.
+ * 
+ * All elements not filled with the names of enum entries by the function are set to null.
+ * 
+ * \param[in]   handle          Handle for an entity that exposes features
+ * \param[in]   name            Name of the feature
+ * \param[out]  nameArray       An array of enumeration value names; may be null if \p numFound is used for size query
+ * \param[in]   arrayLength     Number of elements in the array
+ * \param[out]  numFound        Number of elements found; may be null if \p nameArray is not null
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name is null or both \p nameArray and \p numFound are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ * 
+ * \retval ::VmbErrorNotImplemented     The feature \p name is not implemented
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Enumeration
+ *
+ * \retval ::VmbErrorMoreData           The given array length was insufficient to hold all available entries
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumRangeQuery ( const VmbHandle_t   handle,
+                                                         const char*         name,
+                                                         const char**        nameArray,
+                                                         VmbUint32_t         arrayLength,
+                                                         VmbUint32_t*        numFound );
+
+/**
+ * \brief Check if a certain value of an enumeration is available.
+ * 
+ * \param[in]   handle              Handle for an entity that exposes features
+ * \param[in]   name                Name of the feature
+ * \param[in]   value               Value to check
+ * \param[out]  isAvailable         Indicates if the given enumeration value is available
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name, \p value or \p isAvailable are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Enumeration
+ * 
+ * \retval ::VmbErrorNotImplemented     The feature \p name is not implemented
+ *
+ * \retval ::VmbErrorInvalidValue       There is no enum entry with string representation of \p value for the given enum feature
+ * 
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumIsAvailable ( const VmbHandle_t   handle,
+                                                          const char*         name,
+                                                          const char*         value,
+                                                          VmbBool_t *         isAvailable );
+
+/**
+ * \brief Get the integer value for a given enumeration string value.
+ * 
+ * Converts a name of an enum member into an int value ("Mono12Packed" to 0x10C0006)
+ * 
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the feature
+ * \param[in]   value       The enumeration value to get the integer value for
+ * \param[out]  intVal      The integer value for this enumeration entry
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       If \p name, \p value or \p intVal are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           No feature with the given name was found
+ * 
+ * \retval ::VmbErrorNotImplemented     The feature \p name is not implemented
+ * 
+ * \retval ::VmbErrorInvalidValue       \p value is not the name of a enum entry for the feature
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Enumeration
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumAsInt ( const VmbHandle_t   handle,
+                                                    const char*         name,
+                                                    const char*         value,
+                                                    VmbInt64_t*         intVal );
+
+/**
+ * \brief Get the enumeration string value for a given integer value.
+ * 
+ * Converts an int value to a name of an enum member (e.g. 0x10C0006 to "Mono12Packed")
+ * 
+ * \param[in]   handle              Handle for an entity that exposes features
+ * \param[in]   name                Name of the feature
+ * \param[in]   intValue            The numeric value
+ * \param[out]  stringValue         The string value for the numeric value
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful 
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name or \p stringValue are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           No feature with the given name was found
+ * 
+ * \retval ::VmbErrorNotImplemented     No feature \p name is not implemented
+ * 
+ * \retval ::VmbErrorInvalidValue       \p intValue is not the int value of an enum entry
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Enumeration
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumAsString ( VmbHandle_t   handle,
+                                                       const char*   name,
+                                                       VmbInt64_t    intValue,
+                                                       const char**  stringValue );
+
+/**
+ * \brief Get infos about an entry of an enumeration feature.
+ * 
+ * \param[in]   handle                      Handle for an entity that exposes features
+ * \param[in]   featureName                 Name of the feature
+ * \param[in]   entryName                   Name of the enum entry of that feature
+ * \param[out]  featureEnumEntry            Infos about that entry returned by the API
+ * \param[in]   sizeofFeatureEnumEntry      Size of the structure
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorStructSize         Size of ::VmbFeatureEnumEntry_t is not compatible with the API version
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p featureName, \p entryName or \p featureEnumEntry are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ * 
+ * \retval ::VmbErrorNotImplemented     The feature \p name is not implemented
+ * 
+ * \retval ::VmbErrorInvalidValue       There is no enum entry with a string representation of \p entryName
+ *
+ * \retval ::VmbErrorWrongType          The type of feature featureName is not Enumeration
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumEntryGet ( const VmbHandle_t        handle,
+                                                       const char*              featureName,
+                                                       const char*              entryName,
+                                                       VmbFeatureEnumEntry_t*   featureEnumEntry,
+                                                       VmbUint32_t              sizeofFeatureEnumEntry );
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name String Feature Access
+ * \{
+ * \defgroup StringAccess String Feature Access
+ * \{
+ */
+
+/**
+ * \brief Get the value of a string feature.
+ * 
+ * This function is usually called twice: once with an empty buffer to query the length
+ * of the string, and then again with a buffer of the correct length.
+ *
+ * The value written to \p sizeFilled includes the terminating 0 character of the string.
+ * 
+ * If a \p buffer is provided and there its  insufficient to hold all the data, the longest
+ * possible prefix fitting the buffer is copied to \p buffer; the last element of \p buffer is
+ * set to 0 case.
+ * 
+ * \param[in]   handle          Handle for an entity that exposes features
+ * \param[in]   name            Name of the string feature
+ * \param[out]  buffer          String buffer to fill. May be null if \p sizeFilled is used for size query.
+ * \param[in]   bufferSize      Size of the input buffer
+ * \param[out]  sizeFilled      Size actually filled. May be null if \p buffer is not null.
+ *
+ *
+ * \return An error code indicating the type of error, if any.
+ * 
+ * \retval ::VmbErrorSuccess            The call was successful
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ * 
+ * \retval ::VmbErrorBadParameter       \p name is null, both \p buffer and \p sizeFilled are null or \p buffer is non-null and bufferSize is 0
+ * 
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ * 
+ * \retval ::VmbErrorNotFound           The feature was not found
+ * 
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not String
+ * 
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ * 
+ * \retval ::VmbErrorMoreData           The given buffer size was too small
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureStringGet ( const VmbHandle_t   handle,
+                                                    const char*         name,
+                                                    char*               buffer,
+                                                    VmbUint32_t         bufferSize,
+                                                    VmbUint32_t*        sizeFilled );
+
+/**
+ * \brief Set the value of a string feature.
+ *
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the string feature
+ * \param[in]   value       Value to set
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorInvalidCall        If called from feature callback
+ *
+ * \retval ::VmbErrorBadParameter       \p name or \p value are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           The feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not String
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorInvalidValue       If length of value exceeded the maximum length
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureStringSet ( const VmbHandle_t   handle,
+                                                    const char*         name,
+                                                    const char*         value );
+
+/**
+ * \brief Get the maximum length of a string feature.
+ * 
+ * The length reported does not include the terminating 0 char.
+ * 
+ * Note: For some features the maximum size is not fixed and may change.
+ *
+ * \param[in]   handle          Handle for an entity that exposes features
+ * \param[in]   name            Name of the string feature
+ * \param[out]  maxLength       Maximum length of this string feature
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name or \p maxLength are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not String
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureStringMaxlengthQuery ( const VmbHandle_t   handle,
+                                                               const char*         name,
+                                                               VmbUint32_t*        maxLength );
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Boolean Feature Access
+ * \{
+ * \defgroup BoolAccess Boolean Feature Access
+ * \{
+ */
+
+/**
+ * \brief Get the value of a boolean feature.
+ *
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the boolean feature
+ * \param[out]  value       Value to be read
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name or \p value are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           If feature is not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Boolean
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ * 
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureBoolGet ( const VmbHandle_t   handle,
+                                                  const char*         name,
+                                                  VmbBool_t *         value );
+
+/**
+ * \brief Set the value of a boolean feature.
+ *
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the boolean feature
+ * \param[in]   value       Value to write
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name is null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           If the feature is not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Boolean
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ *
+ * \retval ::VmbErrorInvalidValue       If value is not within valid bounds
+ *
+ * \retval ::VmbErrorInvalidCall        If called from feature callback
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureBoolSet ( const VmbHandle_t   handle,
+                                                  const char*         name,
+                                                  VmbBool_t           value );
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Command Feature Access
+ * \{
+ * \defgroup CmdAccess Command Feature Access
+ * \{
+ */
+
+/**
+ * \brief Run a feature command.
+ *
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the command feature
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ * 
+ * \retval ::VmbErrorInvalidCall        If called from a feature callback or chunk access callback
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name is null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           Feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Command
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureCommandRun ( const VmbHandle_t   handle,
+                                                     const char*         name );
+
+/**
+ * \brief Check if a feature command is done.
+ * 
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the command feature
+ * \param[out]  isDone      State of the command.
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ * 
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ *
+ * \retval ::VmbErrorBadParameter       If \p name or \p isDone are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           Feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Command
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ * 
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureCommandIsDone ( const VmbHandle_t   handle,
+                                                        const char*         name,
+                                                        VmbBool_t *         isDone );
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Raw Feature Access
+ * \{
+ * \defgroup RawAccess Raw Feature Access
+ * \{
+ */
+
+/**
+ * \brief Read the memory contents of an area given by a feature name.
+ * 
+ * This feature type corresponds to a top-level "Register" feature in GenICam.
+ * Data transfer is split up by the transport layer if the feature length is too large.
+ * You can get the size of the memory area addressed by the feature name by ::VmbFeatureRawLengthQuery().
+ *
+ * \param[in]   handle          Handle for an entity that exposes features
+ * \param[in]   name            Name of the raw feature
+ * \param[out]  buffer          Buffer to fill
+ * \param[in]   bufferSize      Size of the buffer to be filled
+ * \param[out]  sizeFilled      Number of bytes actually filled
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p name, \p buffer or \p sizeFilled are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           Feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Register
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureRawGet ( const VmbHandle_t   handle,
+                                                 const char*         name,
+                                                 char*               buffer,
+                                                 VmbUint32_t         bufferSize,
+                                                 VmbUint32_t*        sizeFilled );
+
+/**
+ * \brief Write to a memory area given by a feature name.
+ *
+ * This feature type corresponds to a first-level "Register" node in the XML file.
+ * Data transfer is split up by the transport layer if the feature length is too large.
+ * You can get the size of the memory area addressed by the feature name by ::VmbFeatureRawLengthQuery().
+ *
+ * \param[in]   handle          Handle for an entity that exposes features
+ * \param[in]   name            Name of the raw feature
+ * \param[in]   buffer          Data buffer to use
+ * \param[in]   bufferSize      Size of the buffer
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorInvalidCall        If called from feature callback or a chunk access callback
+ *
+ * \retval ::VmbErrorBadParameter       \p name or \p buffer are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           Feature was not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Register
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureRawSet ( const VmbHandle_t   handle,
+                                                 const char*         name,
+                                                 const char*         buffer,
+                                                 VmbUint32_t         bufferSize );
+
+/**
+ * \brief Get the length of a raw feature for memory transfers.
+ *
+ * This feature type corresponds to a first-level "Register" node in the XML file.
+ *
+ * \param[in]   handle      Handle for an entity that exposes features
+ * \param[in]   name        Name of the raw feature
+ * \param[out]  length      Length of the raw feature area (in bytes)
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       If \p name or \p length are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           Feature not found
+ *
+ * \retval ::VmbErrorWrongType          The type of feature \p name is not Register
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorNotImplemented     The feature isn't implemented
+ * 
+ * \retval ::VmbErrorNotAvailable       The feature isn't available currently
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureRawLengthQuery ( const VmbHandle_t   handle,
+                                                         const char*         name,
+                                                         VmbUint32_t*        length );
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Feature Invalidation
+ * \{
+ * \defgroup FeatureInvalidation Feature Invalidation
+ * \{
+ */
+
+/**
+ * \brief Register a VmbInvalidationCallback callback for feature invalidation signaling.
+ *
+ * Any feature change, either of its value or of its access state, may be tracked
+ * by registering an invalidation callback.
+ * Registering multiple callbacks for one feature invalidation event is possible because
+ * only the combination of handle, name, and callback is used as key. If the same
+ * combination of handle, name, and callback is registered a second time, the callback remains
+ * registered and the context is overwritten with \p userContext.
+ *
+ * \param[in]   handle              Handle for an entity that emits events
+ * \param[in]   name                Name of the event
+ * \param[in]   callback            Callback to be run when invalidation occurs
+ * \param[in]   userContext         User context passed to function
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ * 
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ *
+ * \retval ::VmbErrorBadParameter       If \p name or \p callback are null
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           No feature with \p name was found for the module associated with \p handle
+ * 
+ * \retval ::VmbErrorNotImplemented     The feature \p name is not implemented
+ * 
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureInvalidationRegister ( VmbHandle_t              handle,
+                                                               const char*              name,
+                                                               VmbInvalidationCallback  callback,
+                                                               void*                    userContext );
+
+/**
+ * \brief Unregister a previously registered feature invalidation callback.
+ *
+ * Since multiple callbacks may be registered for a feature invalidation event,
+ * a combination of handle, name, and callback is needed for unregistering, too.
+ *
+ * \param[in] handle          Handle for an entity that emits events
+ * \param[in] name            Name of the event
+ * \param[in] callback        Callback to be removed
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ * 
+ * \retval ::VmbErrorBadParameter       If \p name or \p callback are null
+ * 
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorNotFound           No feature with \p name was found for the module associated with \p handle or there was no listener to unregister
+ * 
+ * \retval ::VmbErrorNotImplemented     The feature \p name is not implemented
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFeatureInvalidationUnregister ( VmbHandle_t              handle,
+                                                                 const char*              name,
+                                                                 VmbInvalidationCallback  callback );
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Image preparation and acquisition
+ * \{
+ * \defgroup Capture Image preparation and acquisition
+ * \{
+ */
+
+/**
+* \brief Get the necessary payload size for buffer allocation.
+*
+* Returns the payload size necessary for buffer allocation as queried from the Camera.
+* If the stream module provides a PayloadSize feature, this value will be returned instead.
+* If a camera handle is passed, the payload size refers to the stream with index 0.
+*
+* \param[in]    handle          Camera or stream handle
+* \param[out]   payloadSize     Payload Size
+*
+*
+* \return An error code indicating success or the type of error that occurred.
+*
+* \retval ::VmbErrorSuccess             If no error
+*
+* \retval ::VmbErrorApiNotStarted       ::VmbStartup() was not called before the current command
+*
+* \retval ::VmbErrorBadHandle           The given handle is not valid
+*
+* \retval ::VmbErrorBadParameter        \p payloadSize is null
+*/
+IMEXPORTC VmbError_t VMB_CALL VmbPayloadSizeGet(VmbHandle_t     handle,
+                                                VmbUint32_t*    payloadSize);
+
+/**
+ * \brief Announce frames to the API that may be queued for frame capturing later.
+ *
+ * Allows some preparation for frames like DMA preparation depending on the transport layer.
+ * The order in which the frames are announced is not taken into consideration by the API.
+ * If frame.buffer is null, the allocation is done by the transport layer.
+ *
+ * \param[in]   handle          Camera or stream handle
+ * \param[in]   frame           Frame buffer to announce
+ * \param[in]   sizeofFrame     Size of the frame structure
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorStructSize         The given struct size is not valid for this version of the API
+ * 
+ * \retval ::VmbErrorInvalidCall        If called from a frame callback or a chunk access callback
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          The given camera handle is not valid
+ *
+ * \retval ::VmbErrorBadParameter       \p frame is null
+ * 
+ * \retval ::VmbErrorAlready            The frame has already been announced
+ *
+ * \retval ::VmbErrorBusy               The underlying transport layer does not support announcing frames during acquisition
+ *
+ * \retval ::VmbErrorMoreData           The given buffer size is invalid (usually 0)
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFrameAnnounce ( VmbHandle_t        handle,
+                                                 const VmbFrame_t*  frame,
+                                                 VmbUint32_t        sizeofFrame );
+
+
+/**
+ * \brief Revoke a frame from the API.
+ *
+ * The referenced frame is removed from the pool of frames for capturing images.
+ *
+ * \param[in]   handle      Handle for a camera or stream
+ * \param[in]   frame       Frame buffer to be removed from the list of announced frames
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a frame callback or a chunk access callback
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorBadParameter       The given frame pointer is not valid
+ *
+ * \retval ::VmbErrorBusy               The underlying transport layer does not support revoking frames during acquisition
+ *
+ * \retval ::VmbErrorNotFound           The given frame could not be found for the stream
+ * 
+ * \retval ::VmbErrorInUse              The frame is currently still in use (e.g. in a running frame callback)
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFrameRevoke ( VmbHandle_t          handle,
+                                               const VmbFrame_t*    frame );
+
+
+/**
+ * \brief Revoke all frames assigned to a certain stream or camera.
+ * 
+ * In case of an failure some of the frames may have been revoked. To prevent this it is recommended to call
+ * ::VmbCaptureQueueFlush for the same handle before invoking this function.
+ *
+ * \param[in]   handle      Handle for a stream or camera
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a frame callback or a chunk access callback
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          \p handle is not valid
+ * 
+ * \retval ::VmbErrorInUse              One of the frames of the stream is still in use
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbFrameRevokeAll ( VmbHandle_t  handle );
+
+
+/**
+ * \brief Prepare the API for incoming frames.
+ *
+ * \param[in]   handle      Handle for a camera or a stream
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess                    If no error
+ *
+ * \retval ::VmbErrorInvalidCall                If called from a frame callback or a chunk access callback
+ * 
+ * \retval ::VmbErrorApiNotStarted              ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle                  The given handle is not valid; this includes the camera no longer being open
+ *
+ * \retval ::VmbErrorInvalidAccess              Operation is invalid with the current access mode
+ * 
+ * \retval ::VmbErrorMoreData                   The buffer size of the announced frames is insufficient
+ *
+ * \retval ::VmbErrorInsufficientBufferCount    The operation requires more buffers to be announced; see the StreamAnnounceBufferMinimum stream feature
+ *
+ * \retval ::VmbErrorAlready                    Capturing was already started
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbCaptureStart ( VmbHandle_t  handle );
+
+
+/**
+ * \brief Stop the API from being able to receive frames.
+ *
+ * Consequences of VmbCaptureEnd():
+ * The frame callback will not be called anymore
+ *
+ * \note This function waits for the completion of the last callback for the current capture.
+ *       If the callback does not return in finite time, this function may not return in finite time either.
+ * 
+ * \param[in]   handle      Handle for a stream or camera
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a frame callback or a chunk access callback
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          \p handle is not valid
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbCaptureEnd ( VmbHandle_t handle );
+
+
+/**
+ * \brief Queue frames that may be filled during frame capturing.
+ *
+ * The given frame is put into a queue that will be filled sequentially.
+ * The order in which the frames are filled is determined by the order in which they are queued.
+ * If the frame was announced with ::VmbFrameAnnounce() before, the application
+ * has to ensure that the frame is also revoked by calling ::VmbFrameRevoke() or
+ * ::VmbFrameRevokeAll() when cleaning up.
+ * 
+ * \warning \p callback should to return in finite time. Otherwise ::VmbCaptureEnd and
+ *          operations resulting in the stream being closed may not return.
+ *
+ * \param[in]   handle              Handle of a camera or stream
+ * \param[in]   frame               Pointer to an already announced frame
+ * \param[in]   callback            Callback to be run when the frame is complete. Null is OK.
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ * 
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ * 
+ * \retval ::VmbErrorBadParameter       If \p frame is null
+ * 
+ * \retval ::VmbErrorBadHandle          No stream related to \p handle could be found
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ * 
+ * \retval ::VmbErrorInternalFault      The buffer or bufferSize members of \p frame have been set to null or zero respectively
+ * 
+ * \retval ::VmbErrorNotFound           The frame is not a frame announced for the given stream
+ * 
+ * \retval ::VmbErrorAlready            The frame is currently queued
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbCaptureFrameQueue ( VmbHandle_t        handle,
+                                                     const VmbFrame_t*  frame,
+                                                     VmbFrameCallback   callback );
+
+/**
+ * \brief Wait for a queued frame to be filled (or dequeued).
+ * 
+ * The frame needs to be queued and not filled for the function to complete successfully.
+ * 
+ * If a camera handle is passed, the first stream of the camera is used.
+ *
+ * \param[in]   handle          Handle of a camera or stream
+ * \param[in]   frame           Pointer to an already announced and queued frame
+ * \param[in]   timeout         Timeout (in milliseconds)
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ * 
+ * \retval ::VmbErrorBadParameter       If \p frame or the buffer of \p frame are null or the the buffer size of \p frame is 0
+ *
+ * \retval ::VmbErrorBadHandle          No stream related to \p handle could be found
+ *
+ * \retval ::VmbErrorNotFound           The frame is not one currently queued for the stream 
+ * 
+ * \retval ::VmbErrorAlready            The frame has already been dequeued or VmbCaptureFrameWait has been called already for this frame
+ * 
+ * \retval ::VmbErrorInUse              If the frame was queued with a frame callback
+ * 
+ * \retval ::VmbErrorTimeout            Call timed out
+ * 
+ * \retval ::VmbErrorIncomplete         Capture is not active when the function is called
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbCaptureFrameWait ( const VmbHandle_t   handle,
+                                                    const VmbFrame_t*   frame,
+                                                    VmbUint32_t         timeout);
+
+
+/**
+ * \brief Flush the capture queue.
+ *
+ * Control of all the currently queued frames will be returned to the user,
+ * leaving no frames in the capture queue.
+ * After this call, no frame notification will occur until frames are queued again
+ * 
+ * Frames need to be revoked separately, if desired.
+ * 
+ * This function can only succeeds, if no capture is currently active.
+ * If ::VmbCaptureStart has been called for the stream, but no successful call to ::VmbCaptureEnd
+ * happened, the function fails with error code ::VmbErrorInUse.
+ *
+ * \param[in]   handle  The handle of the camera or stream to flush.
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ *
+ * \retval ::VmbErrorBadHandle          No stream related to \p handle could be found.
+ * 
+ * \retval ::VmbErrorInUse              There is currently an active capture
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbCaptureQueueFlush(VmbHandle_t handle);
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Transport Layer Enumeration & Information
+ * \{
+ * \defgroup TransportLayer Transport Layer Enumeration & Information
+ * \{
+ */
+ 
+/**
+ * \brief List all the transport layers that are used by the API.
+ *
+ * Note: This function is usually called twice: once with an empty array to query the length
+ *       of the list, and then again with an array of the correct length.
+ *
+ * \param[in,out]   transportLayerInfo              Array of VmbTransportLayerInfo_t, allocated by the caller.
+ *                                                  The transport layer list is copied here. May be null.
+ * \param[in]       listLength                      Number of entries in the caller's transportLayerInfo array.
+ * \param[in,out]   numFound                        Number of transport layers found. May be more than listLength.
+ * \param[in]       sizeofTransportLayerInfo        Size of one ::VmbTransportLayerInfo_t entry (ignored if \p transportLayerInfo is null).
+ * 
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ * 
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ * 
+ * \retval ::VmbErrorInternalFault      An internal fault occurred
+ *
+ * \retval ::VmbErrorNotImplemented     One of the transport layers does not provide the required information
+ *
+ * \retval ::VmbErrorBadParameter       \p numFound is null
+ *
+ * \retval ::VmbErrorStructSize         The given struct size is not valid for this API version
+ *
+ * \retval ::VmbErrorMoreData           The given list length was insufficient to hold all available entries
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbTransportLayersList ( VmbTransportLayerInfo_t*   transportLayerInfo,
+                                                       VmbUint32_t                listLength,
+                                                       VmbUint32_t*               numFound,
+                                                       VmbUint32_t                sizeofTransportLayerInfo);
+
+/**
+ * \} \}
+*/
+
+/**
+ * \name Interface Enumeration & Information
+ * \{
+ * \defgroup Interface Interface Enumeration & Information
+ * \{
+ */
+
+/**
+ * \brief List all the interfaces that are currently visible to the API.
+ *
+ * Note: All the interfaces known via GenICam transport layers are listed by this 
+ *       command and filled into the provided array. Interfaces may correspond to 
+ *       adapter cards or frame grabber cards.
+ *       This function is usually called twice: once with an empty array to query the length
+ *       of the list, and then again with an array of the correct length.
+ *
+ * \param[in,out]   interfaceInfo           Array of ::VmbInterfaceInfo_t, allocated by the caller.
+ *                                          The interface list is copied here. May be null.
+ *
+ * \param[in]       listLength              Number of entries in the callers interfaceInfo array
+ *
+ * \param[in,out]   numFound                Number of interfaces found. Can be more than listLength
+ *
+ * \param[in]       sizeofInterfaceInfo     Size of one ::VmbInterfaceInfo_t entry
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter       \p numFound is null
+ *
+ * \retval ::VmbErrorStructSize         The given struct size is not valid for this API version
+ *
+ * \retval ::VmbErrorMoreData           The given list length was insufficient to hold all available entries
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbInterfacesList ( VmbInterfaceInfo_t*   interfaceInfo,
+                                                  VmbUint32_t           listLength,
+                                                  VmbUint32_t*          numFound,
+                                                  VmbUint32_t           sizeofInterfaceInfo );
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Direct Access
+ * \{
+ * \defgroup DirectAccess Direct Access
+ * \{
+ */
+
+//----- Memory/Register access --------------------------------------------
+
+/**
+ * \brief Read an array of bytes.
+ *
+ * \param[in]   handle              Handle for an entity that allows memory access
+ * \param[in]   address             Address to be used for this read operation
+ * \param[in]   bufferSize          Size of the data buffer to read
+ * \param[out]  dataBuffer          Buffer to be filled
+ * \param[out]  sizeComplete        Size of the data actually read
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbMemoryRead ( const VmbHandle_t   handle,
+                                              VmbUint64_t         address,
+                                              VmbUint32_t         bufferSize,
+                                              char*               dataBuffer,
+                                              VmbUint32_t*        sizeComplete );
+
+/**
+ * \brief Write an array of bytes.
+ *
+ * \param[in]   handle              Handle for an entity that allows memory access
+ * \param[in]   address             Address to be used for this read operation
+ * \param[in]   bufferSize          Size of the data buffer to write
+ * \param[in]   dataBuffer          Data to write
+ * \param[out]  sizeComplete        Number of bytes successfully written; if an
+ *                                  error occurs this is less than bufferSize
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ *
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ *
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorMoreData           Not all data were written; see sizeComplete value for the number of bytes written
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbMemoryWrite ( const VmbHandle_t   handle,
+                                               VmbUint64_t         address,
+                                               VmbUint32_t         bufferSize,
+                                               const char*         dataBuffer,
+                                               VmbUint32_t*        sizeComplete );
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Load & Save Settings
+ * \{
+ * \defgroup LoadSaveSettings Load & Save Settings
+ * \{
+ */
+
+/**
+ * \brief Write the current features related to a module to a xml file
+ *
+ * Camera must be opened beforehand and function needs corresponding handle.
+ * With given filename parameter path and name of XML file can be determined.
+ * Additionally behaviour of function can be set with providing 'persistent struct'.
+ *
+ * \param[in]   handle              Handle for an entity that allows register access
+ * \param[in]   filePath            The path to the file to save the settings to; relative paths are relative to the current working directory
+ * \param[in]   settings            Settings struct; if null the default settings are used
+ *                                  (persist features except LUT for the remote device, maximum 5 iterations, logging only errors)
+ * \param[in]   sizeofSettings      Size of settings struct
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ * 
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ *
+ * \retval ::VmbErrorBadParameter       If \p filePath is or the settings struct is invalid
+ * 
+ * \retval ::VmbErrorStructSize         If sizeofSettings the struct size does not match the size of the struct expected by the API
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ * 
+ * \retval ::VmbErrorNotFound           The provided handle is insufficient to identify all the modules that should be saved
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ * 
+ * \retval ::VmbErrorIO                 There was an issue writing the file.
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbSettingsSave(VmbHandle_t                           handle,
+                                              const VmbFilePathChar_t*              filePath,
+                                              const VmbFeaturePersistSettings_t*    settings,
+                                              VmbUint32_t                           sizeofSettings);
+
+/**
+ * \brief Load all feature values from xml file to device-related modules.
+ *
+ * The modules must be opened beforehand. If the handle is non-null it must be a valid handle other than the Vmb API handle.
+ * Additionally behaviour of function can be set with providing \p settings . Note that even in case of an failure some or all of the features
+ * may have been set for some of the modules.
+ *
+ * The error code ::VmbErrorRetriesExceeded only indicates that the number of retries was insufficient
+ * to restore the features. Even if the features could not be restored for one of the modules, restoring the features is not aborted but the process
+ * continues for other modules, if present.
+ *
+ * \param[in]   handle              Handle related to the modules to write the values to;
+ *                                  may be null to indicate that modules should be identified based on the information provided in the input file
+ *
+ * \param[in]   filePath            The path to the file to load the settings from; relative paths are relative to the current working directory
+ * \param[in]   settings            Settings struct; pass null to use the default settings. If the \p maxIterations field is 0, the number of
+ *                                  iterations is determined by the value loaded from the xml file
+ * \param[in]   sizeofSettings      Size of the settings struct
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess            If no error
+ * 
+ * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+ * 
+ * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+ * 
+ * \retval ::VmbErrorStructSize         If sizeofSettings the struct size does not match the size of the struct expected by the API
+ *
+ * \retval ::VmbErrorWrongType          \p handle is neither null nor a transport layer, interface, local device, remote device or stream handle
+ *
+ * \retval ::VmbErrorBadHandle          The given handle is not valid
+ * 
+ * \retval ::VmbErrorAmbiguous          The modules to restore the settings for cannot be uniquely identified based on the information available
+ * 
+ * \retval ::VmbErrorNotFound           The provided handle is insufficient to identify all the modules that should be restored
+ * 
+ * \retval ::VmbErrorRetriesExceeded    Some or all of the features could not be restored with the max iterations specified
+ *
+ * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+ *
+ * \retval ::VmbErrorBadParameter       If \p filePath is null or the settings struct is invalid
+ * 
+ * \retval ::VmbErrorIO                 There was an issue with reading the file.
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbSettingsLoad(VmbHandle_t                           handle,
+                                              const VmbFilePathChar_t*              filePath,
+                                              const VmbFeaturePersistSettings_t*    settings,
+                                              VmbUint32_t                           sizeofSettings);
+
+/**
+ * \} \}
+ */
+
+/**
+ * \name Chunk Data
+ * \{
+ * \defgroup ChunkData Chunk Data
+ * \{
+ */
+
+/**
+ * \brief Access chunk data for a frame.
+ *
+ * This function can only succeed if the given frame has been filled by the API.
+ *
+ * \param[in] frame                  A pointer to a filled frame that is announced
+ * \param[in] chunkAccessCallback    A callback to access the chunk data from
+ * \param[in] userContext            A pointer to pass to the callback
+ *
+ *
+ * \return An error code indicating success or the type of error that occurred.
+ *
+ * \retval ::VmbErrorSuccess                The call was successful
+ *
+ * \retval ::VmbErrorInvalidCall            If called from a chunk access callback or a feature callback
+ *
+ * \retval ::VmbErrorApiNotStarted          ::VmbStartup() was not called before the current command
+ *
+ * \retval ::VmbErrorBadParameter           \p frame or \p chunkAccessCallback are null
+ *
+ * \retval ::VmbErrorInUse                  The frame state does not allow for retrieval of chunk data
+ *                                          (e.g. the frame could have been reenqueued before the chunk access could happen).
+ *
+ * \retval ::VmbErrorNotFound               The frame is currently not announced for a stream
+ * 
+ * \retval ::VmbErrorDeviceNotOpen          If the device the frame was received from is no longer open
+ *
+ * \retval ::VmbErrorNoChunkData            \p frame does not contain chunk data
+ *
+ * \retval ::VmbErrorParsingChunkData       The chunk data does not adhere to the expected format
+ *
+ * \retval ::VmbErrorUserCallbackException  The callback threw an exception
+ *
+ * \retval ::VmbErrorFeaturesUnavailable    The feature description for the remote device is unavailable
+ *
+ * \retval ::VmbErrorCustom                 The minimum a user defined error code returned by the callback
+ */
+IMEXPORTC VmbError_t VMB_CALL VmbChunkDataAccess(const VmbFrame_t*         frame,
+                                                 VmbChunkAccessCallback    chunkAccessCallback,
+                                                 void*                     userContext);
+
+/**
+ * \} \} \}
+ */
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VMBC_H_INCLUDE_
diff --git a/VimbaX/api/include/VmbC/VmbCTypeDefinitions.h b/VimbaX/api/include/VmbC/VmbCTypeDefinitions.h
new file mode 100644
index 0000000000000000000000000000000000000000..b010d5be67969329bd23d15691a26fed4fef4ae8
--- /dev/null
+++ b/VimbaX/api/include/VmbC/VmbCTypeDefinitions.h
@@ -0,0 +1,610 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this header file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        VmbCTypeDefinitions.h
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+/**
+ * \file
+ * \brief Struct definitions for the VmbC API.
+ */
+
+#ifndef VMBC_TYPE_DEFINITIONS_H_INCLUDE_
+#define VMBC_TYPE_DEFINITIONS_H_INCLUDE_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <VmbC/VmbCommonTypes.h>
+
+#if defined (_WIN32)
+#if defined AVT_VMBAPI_C_EXPORTS                // DLL exports
+#define IMEXPORTC                               // We export via the .def file
+#elif defined AVT_VMBAPI_C_LIB                  // static LIB
+#define IMEXPORTC
+#else                                           // import
+#define IMEXPORTC __declspec(dllimport)
+#endif
+
+#ifndef _WIN64
+ // Calling convention
+#define VMB_CALL __stdcall
+#else
+ // Calling convention
+#define VMB_CALL
+#endif
+#elif defined (__GNUC__) && (__GNUC__ >= 4) && defined (__ELF__)
+ // SO exports (requires compiler option -fvisibility=hidden)
+#ifdef AVT_VMBAPI_C_EXPORTS
+#define IMEXPORTC __attribute__((visibility("default")))
+#else
+#define IMEXPORTC
+#endif
+
+#ifdef __i386__
+    // Calling convention
+#define VMB_CALL __attribute__((stdcall))
+#else
+    // Calling convention
+#define VMB_CALL
+#endif
+#elif defined (__APPLE__)
+#define IMEXPORTC __attribute__((visibility("default")))
+ // Calling convention
+#define VMB_CALL
+#else
+#error Unknown platform, file needs adaption
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \name Transport layer
+ * \{
+ */
+
+ /**
+* \brief Camera or transport layer type (for instance U3V or GEV).
+*/
+typedef enum VmbTransportLayerType
+{
+    VmbTransportLayerTypeUnknown        = 0,        //!< Interface is not known to this version of the API
+    VmbTransportLayerTypeGEV            = 1,        //!< GigE Vision
+    VmbTransportLayerTypeCL             = 2,        //!< Camera Link
+    VmbTransportLayerTypeIIDC           = 3,        //!< IIDC 1394
+    VmbTransportLayerTypeUVC            = 4,        //!< USB video class
+    VmbTransportLayerTypeCXP            = 5,        //!< CoaXPress
+    VmbTransportLayerTypeCLHS           = 6,        //!< Camera Link HS
+    VmbTransportLayerTypeU3V            = 7,        //!< USB3 Vision Standard
+    VmbTransportLayerTypeEthernet       = 8,        //!< Generic Ethernet
+    VmbTransportLayerTypePCI            = 9,        //!< PCI / PCIe
+    VmbTransportLayerTypeCustom         = 10,       //!< Non standard
+    VmbTransportLayerTypeMixed          = 11,       //!< Mixed (transport layer only)
+} VmbTransportLayerType;
+
+/**
+    * \brief Type for an Interface; for values see ::VmbTransportLayerType.
+    */
+typedef VmbUint32_t VmbTransportLayerType_t;
+
+/**
+ * \brief Transport layer information.
+ * 
+ * Holds read-only information about a transport layer.
+ */
+typedef struct VmbTransportLayerInfo
+{
+    /**
+     * \name Out
+     * \{
+     */
+
+    const char*                 transportLayerIdString;     //!< Unique id of the transport layer
+    const char*                 transportLayerName;         //!< Name of the transport layer
+    const char*                 transportLayerModelName;    //!< Model name of the transport layer
+    const char*                 transportLayerVendor;       //!< Vendor of the transport layer
+    const char*                 transportLayerVersion;      //!< Version of the transport layer
+    const char*                 transportLayerPath;         //!< Full path of the transport layer
+    VmbHandle_t                 transportLayerHandle;       //!< Handle of the transport layer for feature access
+    VmbTransportLayerType_t     transportLayerType;         //!< The type of the transport layer
+
+    /**
+     * \}
+     */
+} VmbTransportLayerInfo_t;
+
+/**
+ * \}
+ */
+
+/**
+ * \name Interface
+ * \{
+ */
+
+/**
+ * \brief Interface information.
+ * 
+ * Holds read-only information about an interface.
+ */
+typedef struct VmbInterfaceInfo
+{
+    /**
+     * \name Out
+     * \{
+     */
+
+    const char*                 interfaceIdString;          //!< Identifier of the interface
+    const char*                 interfaceName;              //!< Interface name, given by the transport layer
+    VmbHandle_t                 interfaceHandle;            //!< Handle of the interface for feature access
+    VmbHandle_t                 transportLayerHandle;       //!< Handle of the related transport layer for feature access
+    VmbTransportLayerType_t     interfaceType;              //!< The technology of the interface
+
+    /**
+     * \}
+     */
+} VmbInterfaceInfo_t;
+
+/**
+ * \}
+ */
+
+/**
+ * \name Camera
+ * \{
+ */
+
+ /**
+  * \brief Access mode for cameras.
+  *
+  * Used in ::VmbCameraInfo_t as flags, so multiple modes can be
+  * announced, while in ::VmbCameraOpen(), no combination must be used.
+  */
+typedef enum VmbAccessModeType
+{
+    VmbAccessModeNone       = 0,    //!< No access
+    VmbAccessModeFull       = 1,    //!< Read and write access
+    VmbAccessModeRead       = 2,    //!< Read-only access
+    VmbAccessModeUnknown    = 4,    //!< Access type unknown
+    VmbAccessModeExclusive  = 8,    //!< Read and write access without permitting access for other consumers
+} VmbAccessModeType;
+
+/**
+ * \brief Type for an AccessMode; for values see ::VmbAccessModeType.
+ */
+typedef VmbUint32_t VmbAccessMode_t;
+
+/**
+ * \brief Camera information.
+ * 
+ * Holds read-only information about a camera.
+ */
+typedef struct VmbCameraInfo
+{
+    /**
+     * \name Out
+     * \{
+     */
+
+    const char*         cameraIdString;             //!< Identifier of the camera
+    const char*         cameraIdExtended;           //!< globally unique identifier for the camera
+    const char*         cameraName;                 //!< The display name of the camera
+    const char*         modelName;                  //!< Model name
+    const char*         serialString;               //!< Serial number
+    VmbHandle_t         transportLayerHandle;       //!< Handle of the related transport layer for feature access
+    VmbHandle_t         interfaceHandle;            //!< Handle of the related interface for feature access
+    VmbHandle_t         localDeviceHandle;          //!< Handle of the related GenTL local device. NULL if the camera is not opened
+    VmbHandle_t const*  streamHandles;              //!< Handles of the streams provided by the camera.  NULL if the camera is not opened
+    VmbUint32_t         streamCount;                //!< Number of stream handles in the streamHandles array
+    VmbAccessMode_t     permittedAccess;            //!< Permitted access modes, see ::VmbAccessModeType
+
+    /**
+     * \}
+     */
+} VmbCameraInfo_t;
+
+/**
+ * \}
+ */
+
+/**
+ * \name Feature
+ * \{
+ */
+
+/**
+ * \brief Supported feature data types.
+ */
+typedef enum VmbFeatureDataType
+{
+    VmbFeatureDataUnknown       = 0,        //!< Unknown feature type
+    VmbFeatureDataInt           = 1,        //!< 64-bit integer feature
+    VmbFeatureDataFloat         = 2,        //!< 64-bit floating point feature
+    VmbFeatureDataEnum          = 3,        //!< Enumeration feature
+    VmbFeatureDataString        = 4,        //!< String feature
+    VmbFeatureDataBool          = 5,        //!< Boolean feature
+    VmbFeatureDataCommand       = 6,        //!< Command feature
+    VmbFeatureDataRaw           = 7,        //!< Raw (direct register access) feature
+    VmbFeatureDataNone          = 8,        //!< Feature with no data
+} VmbFeatureDataType;
+
+/**
+ * \brief Data type for a Feature; for values see ::VmbFeatureDataType.
+ */
+typedef VmbUint32_t VmbFeatureData_t;
+
+/**
+ * \brief Feature visibility.
+ */
+typedef enum VmbFeatureVisibilityType
+{
+    VmbFeatureVisibilityUnknown         = 0,        //!< Feature visibility is not known
+    VmbFeatureVisibilityBeginner        = 1,        //!< Feature is visible in feature list (beginner level)
+    VmbFeatureVisibilityExpert          = 2,        //!< Feature is visible in feature list (expert level)
+    VmbFeatureVisibilityGuru            = 3,        //!< Feature is visible in feature list (guru level)
+    VmbFeatureVisibilityInvisible       = 4,        //!< Feature is visible in the feature list, but should be hidden in GUI applications
+} VmbFeatureVisibilityType;
+
+/**
+ * \brief Type for Feature visibility; for values see ::VmbFeatureVisibilityType.
+ */
+typedef VmbUint32_t VmbFeatureVisibility_t;
+
+/**
+ * \brief Feature flags.
+ */
+typedef enum VmbFeatureFlagsType
+{
+    VmbFeatureFlagsNone             = 0,        //!< No additional information is provided
+    VmbFeatureFlagsRead             = 1,        //!< Static info about read access. Current status depends on access mode, check with ::VmbFeatureAccessQuery()
+    VmbFeatureFlagsWrite            = 2,        //!< Static info about write access. Current status depends on access mode, check with ::VmbFeatureAccessQuery()
+    VmbFeatureFlagsVolatile         = 8,        //!< Value may change at any time
+    VmbFeatureFlagsModifyWrite      = 16,       //!< Value may change after a write
+} VmbFeatureFlagsType;
+
+/**
+ * \brief Type for Feature flags; for values see ::VmbFeatureFlagsType.
+ */
+typedef VmbUint32_t VmbFeatureFlags_t;
+
+/**
+ * \brief Feature information.
+ *
+ * Holds read-only information about a feature.
+ */
+typedef struct VmbFeatureInfo
+{
+    /**
+     * \name Out
+     * \{
+     */
+
+    const char*                 name;                       //!< Name used in the API
+    const char*                 category;                   //!< Category this feature can be found in
+    const char*                 displayName;                //!< Feature name to be used in GUIs
+    const char*                 tooltip;                    //!< Short description, e.g. for a tooltip
+    const char*                 description;                //!< Longer description
+    const char*                 sfncNamespace;              //!< Namespace this feature resides in
+    const char*                 unit;                       //!< Measuring unit as given in the XML file
+    const char*                 representation;             //!< Representation of a numeric feature
+    VmbFeatureData_t            featureDataType;            //!< Data type of this feature
+    VmbFeatureFlags_t           featureFlags;               //!< Access flags for this feature
+    VmbUint32_t                 pollingTime;                //!< Predefined polling time for volatile features
+    VmbFeatureVisibility_t      visibility;                 //!< GUI visibility
+    VmbBool_t                   isStreamable;               //!< Indicates if a feature can be stored to / loaded from a file
+    VmbBool_t                   hasSelectedFeatures;        //!< Indicates if the feature selects other features
+
+    /**
+     * \}
+     */
+} VmbFeatureInfo_t;
+
+/**
+ * \brief Info about possible entries of an enumeration feature.
+ */
+typedef struct VmbFeatureEnumEntry
+{
+    /**
+     * \name Out
+     * \{
+     */
+
+    const char*                 name;               //!< Name used in the API
+    const char*                 displayName;        //!< Enumeration entry name to be used in GUIs
+    const char*                 tooltip;            //!< Short description, e.g. for a tooltip
+    const char*                 description;        //!< Longer description
+    VmbInt64_t                  intValue;           //!< Integer value of this enumeration entry
+    const char*                 sfncNamespace;      //!< Namespace this feature resides in
+    VmbFeatureVisibility_t      visibility;         //!< GUI visibility
+
+    /**
+     * \}
+     */
+} VmbFeatureEnumEntry_t;
+
+/**
+ * \}
+ */
+
+/**
+ * \name Frame
+ * \{
+ */
+
+/**
+ * \brief Status of a frame transfer.
+ */
+typedef enum VmbFrameStatusType
+{
+    VmbFrameStatusComplete          =  0,       //!< Frame has been completed without errors
+    VmbFrameStatusIncomplete        = -1,       //!< Frame could not be filled to the end
+    VmbFrameStatusTooSmall          = -2,       //!< Frame buffer was too small
+    VmbFrameStatusInvalid           = -3,       //!< Frame buffer was invalid
+} VmbFrameStatusType;
+
+/**
+ * \brief Type for the frame status; for values see ::VmbFrameStatusType.
+ */
+typedef VmbInt32_t VmbFrameStatus_t;
+
+/**
+ * \brief Frame flags.
+ */
+typedef enum VmbFrameFlagsType
+{
+    VmbFrameFlagsNone                   = 0,        //!< No additional information is provided
+    VmbFrameFlagsDimension              = 1,        //!< VmbFrame_t::width and VmbFrame_t::height are provided
+    VmbFrameFlagsOffset                 = 2,        //!< VmbFrame_t::offsetX and VmbFrame_t::offsetY are provided (ROI)
+    VmbFrameFlagsFrameID                = 4,        //!< VmbFrame_t::frameID is provided
+    VmbFrameFlagsTimestamp              = 8,        //!< VmbFrame_t::timestamp is provided
+    VmbFrameFlagsImageData              = 16,       //!< VmbFrame_t::imageData is provided
+    VmbFrameFlagsPayloadType            = 32,       //!< VmbFrame_t::payloadType is provided
+    VmbFrameFlagsChunkDataPresent       = 64,       //!< VmbFrame_t::chunkDataPresent is set based on info provided by the transport layer
+} VmbFrameFlagsType;
+
+/**
+ * \brief Type for Frame flags; for values see ::VmbFrameFlagsType.
+ */
+typedef VmbUint32_t VmbFrameFlags_t;
+
+/**
+ * \brief Frame payload type.
+ */
+typedef enum VmbPayloadType
+{
+    VmbPayloadTypeUnknown               = 0,        //!< Unknown payload type
+    VmbPayloadTypeImage                 = 1,        //!< image data
+    VmbPayloadTypeRaw                   = 2,        //!< raw data
+    VmbPayloadTypeFile                  = 3,        //!< file data
+    VmbPayloadTypeJPEG                  = 5,        //!< JPEG data as described in the GigEVision 2.0 specification
+    VmbPayloadTypJPEG2000               = 6,        //!< JPEG 2000 data as described in the GigEVision 2.0 specification
+    VmbPayloadTypeH264                  = 7,        //!< H.264 data as described in the GigEVision 2.0 specification
+    VmbPayloadTypeChunkOnly             = 8,        //!< Chunk data exclusively
+    VmbPayloadTypeDeviceSpecific        = 9,        //!< Device specific data format
+    VmbPayloadTypeGenDC                 = 11,       //!< GenDC data
+} VmbPayloadType;
+
+/**
+ * \brief Type representing the payload type of a frame. For values see ::VmbPayloadType.
+ */
+typedef VmbUint32_t VmbPayloadType_t;
+
+/**
+ * \brief Type used to represent a dimension value, e.g. the image height.
+ */
+typedef VmbUint32_t VmbImageDimension_t;
+
+/**
+ * \brief Frame delivered by the camera.
+ */
+typedef struct VmbFrame
+{
+    /** 
+     * \name In
+     * \{
+    */
+
+    void*                   buffer;                 //!< Comprises image and potentially chunk data
+    VmbUint32_t             bufferSize;             //!< The size of the data buffer
+    void*                   context[4];             //!< 4 void pointers that can be employed by the user (e.g. for storing handles)
+
+    /**
+     * \}
+     */
+
+    /**
+     * \name Out
+     * \{
+     */
+
+    VmbFrameStatus_t        receiveStatus;          //!< The resulting status of the receive operation
+    VmbUint64_t             frameID;                //!< Unique ID of this frame in this stream
+    VmbUint64_t             timestamp;              //!< The timestamp set by the camera
+    VmbUint8_t*             imageData;              //!< The start of the image data, if present, or null
+    VmbFrameFlags_t         receiveFlags;           //!< Flags indicating which additional frame information is available
+    VmbPixelFormat_t        pixelFormat;            //!< Pixel format of the image
+    VmbImageDimension_t     width;                  //!< Width of an image
+    VmbImageDimension_t     height;                 //!< Height of an image
+    VmbImageDimension_t     offsetX;                //!< Horizontal offset of an image
+    VmbImageDimension_t     offsetY;                //!< Vertical offset of an image
+    VmbPayloadType_t        payloadType;            //!< The type of payload
+    VmbBool_t               chunkDataPresent;       //!< True if the transport layer reported chunk data to be present in the buffer
+
+    /** 
+     * \}
+     */
+} VmbFrame_t;
+
+/**
+ * \}
+ */
+
+/**
+ * \name Save/LoadSettings
+ * \{
+ */
+
+/**
+ * \brief Type of features that are to be saved (persisted) to the XML file when using ::VmbSettingsSave
+ */
+typedef enum VmbFeaturePersistType
+{
+    VmbFeaturePersistAll            = 0,        //!< Save all features to XML, including look-up tables (if possible)
+    VmbFeaturePersistStreamable     = 1,        //!< Save only features marked as streamable, excluding look-up tables
+    VmbFeaturePersistNoLUT          = 2         //!< Save all features except look-up tables (default)
+} VmbFeaturePersistType;
+
+/**
+ * \brief Type for feature persistence; for values see ::VmbFeaturePersistType.
+ */
+typedef VmbUint32_t VmbFeaturePersist_t;
+
+/**
+ * \brief Parameters determining the operation mode of ::VmbSettingsSave and ::VmbSettingsLoad.
+ */
+typedef enum VmbModulePersistFlagsType
+{
+    VmbModulePersistFlagsNone           = 0x00, //!< Persist/Load features for no module. 
+    VmbModulePersistFlagsTransportLayer = 0x01, //!< Persist/Load the transport layer features.
+    VmbModulePersistFlagsInterface      = 0x02, //!< Persist/Load the interface features.
+    VmbModulePersistFlagsRemoteDevice   = 0x04, //!< Persist/Load the remote device features.
+    VmbModulePersistFlagsLocalDevice    = 0x08, //!< Persist/Load the local device features.
+    VmbModulePersistFlagsStreams        = 0x10, //!< Persist/Load the features of stream modules.
+    VmbModulePersistFlagsAll            = 0xff  //!< Persist/Load features for all modules.
+} VmbModulePersistFlagsType;
+
+/**
+ * \brief Type for module persist flags; for values see VmbModulePersistFlagsType
+ * 
+ * Use a combination of ::VmbModulePersistFlagsType constants
+ */
+typedef VmbUint32_t VmbModulePersistFlags_t;
+
+/**
+ * \brief A level to use for logging 
+ */
+typedef enum VmbLogLevel
+{
+    VmbLogLevelNone = 0,                //!< Nothing is logged regardless of the severity of the issue
+    VmbLogLevelError,                   //!< Only errors are logged
+    VmbLogLevelDebug,                   //!< Only error and debug messages are logged 
+    VmbLogLevelWarn,                    //!< Only error, debug and warn messages are logged 
+    VmbLogLevelTrace,                   //!< all messages are logged 
+    VmbLogLevelAll = VmbLogLevelTrace,  //!< all messages are logged 
+} VmbLogLevel;
+
+/**
+ * \brief The type used for storing the log level
+ * 
+ * Use a constant from ::VmbLogLevel
+ */
+typedef VmbUint32_t VmbLogLevel_t;
+
+/**
+ * \brief Parameters determining the operation mode of ::VmbSettingsSave and ::VmbSettingsLoad
+ */
+typedef struct VmbFeaturePersistSettings
+{
+    /**
+     * \name In
+     * \{
+     */
+
+    VmbFeaturePersist_t     persistType;        //!< Type of features that are to be saved
+    VmbModulePersistFlags_t modulePersistFlags; //!< Flags specifying the modules to persist/load
+    VmbUint32_t             maxIterations;      //!< Number of iterations when loading settings
+    VmbLogLevel_t           loggingLevel;       //!< Determines level of detail for load/save settings logging
+
+    /**
+     * \}
+     */
+} VmbFeaturePersistSettings_t;
+
+/**
+ * \}
+ */
+
+/**
+ * \name Callbacks
+ * \{
+ */
+
+/**
+ * \brief Invalidation callback type for a function that gets called in a separate thread
+ *        and has been registered with ::VmbFeatureInvalidationRegister().
+ *
+ * While the callback is run, all feature data is atomic. After the callback finishes,
+ * the feature data may be updated with new values.
+ *
+ * Do not spend too much time in this thread; it prevents the feature values
+ * from being updated from any other thread or the lower-level drivers.
+ *
+ * \param[in]   handle              Handle for an entity that exposes features
+ * \param[in]   name                Name of the feature
+ * \param[in]   userContext         Pointer to the user context, see ::VmbFeatureInvalidationRegister
+ */
+typedef void (VMB_CALL* VmbInvalidationCallback)(const VmbHandle_t handle, const char* name, void* userContext);
+
+/**
+ * \brief Frame Callback type for a function that gets called in a separate thread
+ *        if a frame has been queued with ::VmbCaptureFrameQueue.
+ * 
+ * \warning Any operations closing the stream including ::VmbShutdown and ::VmbCameraClose in addition to
+ *          ::VmbCaptureEnd block until any currently active callbacks return. If the callback does not
+ *          return in finite time, the program may not return.
+ *
+ * \param[in]   cameraHandle      Handle of the camera the frame belongs to
+ * \param[in]   streamHandle      Handle of the stream the frame belongs to
+ * \param[in]   frame             The received frame
+ */
+typedef void (VMB_CALL* VmbFrameCallback)(const VmbHandle_t cameraHandle, const VmbHandle_t streamHandle, VmbFrame_t* frame);
+
+/**
+ * \brief Function pointer type to access chunk data
+ *
+ * This function should complete as quickly as possible, since it blocks other updates on the
+ * remote device.
+ *
+ * This function should not throw exceptions, even if VmbC is used from C++. Any exception
+ * thrown will only result in an error code indicating that an exception was thrown.
+ *
+ * \param[in] featureAccessHandle A special handle that can be used for accessing features;
+ *                                the handle is only valid during the call of the function.
+ * \param[in] userContext         The value the user passed to ::VmbChunkDataAccess.
+ *
+ * \return An error to be returned from ::VmbChunkDataAccess in the absence of other errors;
+ *         A custom exit code >= ::VmbErrorCustom can be returned to indicate a failure via
+ *         ::VmbChunkDataAccess return code
+ */
+typedef VmbError_t(VMB_CALL* VmbChunkAccessCallback)(VmbHandle_t featureAccessHandle, void* userContext);
+
+/**
+ * \}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VMBC_TYPE_DEFINITIONS_H_INCLUDE_
diff --git a/VimbaX/api/include/VmbC/VmbCommonTypes.h b/VimbaX/api/include/VmbC/VmbCommonTypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..955176939ba03af355bcba68018b32bced4638de
--- /dev/null
+++ b/VimbaX/api/include/VmbC/VmbCommonTypes.h
@@ -0,0 +1,445 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this header file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        VmbCommonTypes.h
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+/**
+ * \file
+ * \brief Main header file for the common types of the APIs.
+ * 
+ * This file describes all necessary definitions for types used within
+ * the Vmb APIs. These type definitions are designed to be
+ * portable from other languages and other operating systems.
+ */
+
+#ifndef VMBCOMMONTYPES_H_INCLUDE_
+#define VMBCOMMONTYPES_H_INCLUDE_
+
+#ifdef _WIN32
+#   include <wchar.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \name Basic Types
+ * \{
+ */
+
+#if defined (_MSC_VER)
+
+    /**
+     * \brief 8-bit signed integer.
+     */
+    typedef __int8              VmbInt8_t;
+
+    /**
+     * \brief 8-bit unsigned integer.
+     */
+    typedef unsigned __int8     VmbUint8_t;
+
+    /**
+     * \brief 16-bit signed integer.
+     */
+    typedef __int16             VmbInt16_t;
+
+    /**
+     * \brief 16-bit unsigned integer.
+     */
+    typedef unsigned __int16    VmbUint16_t;
+
+    /**
+     * \brief 32-bit signed integer.
+     */
+    typedef __int32             VmbInt32_t;
+
+    /**
+     * \brief 32-bit unsigned integer.
+     */
+    typedef unsigned __int32    VmbUint32_t;
+
+    /**
+     * \brief 64-bit signed integer.
+     */
+    typedef __int64             VmbInt64_t;
+
+    /**
+     * \brief 64-bit unsigned integer.
+     */
+    typedef unsigned __int64    VmbUint64_t;
+
+#else
+
+    /**
+     * \brief 8-bit signed integer.
+     */
+    typedef signed char         VmbInt8_t;
+
+    /**
+     * \brief 8-bit unsigned integer.
+     */
+    typedef unsigned char       VmbUint8_t;
+
+    /**
+     * \brief 16-bit signed integer.
+     */
+    typedef short               VmbInt16_t;
+
+    /**
+     * \brief 16-bit unsigned integer.
+     */
+    typedef unsigned short      VmbUint16_t;
+
+    /**
+     * \brief 32-bit signed integer.
+     */
+    typedef int                 VmbInt32_t;
+
+    /**
+     * \brief 32-bit unsigned integer.
+     */
+    typedef unsigned int        VmbUint32_t;
+
+    /**
+     * \brief 64-bit signed integer.
+     */
+    typedef long long           VmbInt64_t;
+
+    /**
+     * \brief 64-bit unsigned integer.
+     */
+    typedef unsigned long long  VmbUint64_t;
+
+#endif
+
+    /**
+     * \brief Handle, e.g. for a camera.
+     */
+    typedef void*               VmbHandle_t;
+
+#if defined(__cplusplus) || defined(__bool_true_false_are_defined)
+
+    /**
+     * \brief Standard type for boolean values.
+     */
+    typedef bool                VmbBool_t;
+
+#else
+
+    /**
+     * \brief Boolean type (equivalent to char).
+     *
+     * For values see ::VmbBoolVal
+     */
+    typedef char                VmbBool_t;
+
+#endif
+
+    /**
+     * \brief enum for bool values.
+     */
+    typedef enum VmbBoolVal
+    {
+        VmbBoolTrue     = 1,
+        VmbBoolFalse    = 0,
+    } VmbBoolVal;
+
+    /**
+     * \brief char type.
+     */
+    typedef unsigned char       VmbUchar_t;
+
+#ifdef _WIN32
+
+    /**
+     * \brief Character type used for file paths (Windows uses wchar_t not char).
+     */
+    typedef wchar_t VmbFilePathChar_t;
+
+     /**
+      * \brief macro for converting a c string literal into a system dependent string literal
+      * 
+      * Adds L as prefix on Windows and is replaced by the unmodified value on other operating systems.
+      * 
+      * \code{.c}
+      * const VmbFilePathChar_t* path = VMB_FILE_PATH_LITERAL("./some/path/tl.cti");
+      * \endcode
+      */
+#    define VMB_FILE_PATH_LITERAL(value) L##value
+
+#else
+
+    /**
+     * Character type used for file paths
+     */
+    typedef char VmbFilePathChar_t;
+
+    /**
+     * \brief macro for converting a c string literal into a system dependent string literal
+     *
+     * Adds L as prefix on Windows and is replaced by the unmodified value on other operating systems.
+     * 
+     * \code{.c}
+     * const VmbFilePathChar_t* path = VMB_FILE_PATH_LITERAL("./some/path/tl.cti");
+     * \endcode
+     */
+#    define VMB_FILE_PATH_LITERAL(value) value
+#endif
+
+/**
+ * \}
+ */
+
+/**
+ * \name Error Codes
+ * \{
+ */
+
+    /**
+     * \brief Error codes, returned by most functions.
+     */
+    typedef enum VmbErrorType
+    {
+        VmbErrorSuccess                 =  0,           //!< No error
+        VmbErrorInternalFault           = -1,           //!< Unexpected fault in VmbC or driver
+        VmbErrorApiNotStarted           = -2,           //!< ::VmbStartup() was not called before the current command
+        VmbErrorNotFound                = -3,           //!< The designated instance (camera, feature etc.) cannot be found
+        VmbErrorBadHandle               = -4,           //!< The given handle is not valid
+        VmbErrorDeviceNotOpen           = -5,           //!< Device was not opened for usage
+        VmbErrorInvalidAccess           = -6,           //!< Operation is invalid with the current access mode
+        VmbErrorBadParameter            = -7,           //!< One of the parameters is invalid (usually an illegal pointer)
+        VmbErrorStructSize              = -8,           //!< The given struct size is not valid for this version of the API
+        VmbErrorMoreData                = -9,           //!< More data available in a string/list than space is provided
+        VmbErrorWrongType               = -10,          //!< Wrong feature type for this access function
+        VmbErrorInvalidValue            = -11,          //!< The value is not valid; either out of bounds or not an increment of the minimum
+        VmbErrorTimeout                 = -12,          //!< Timeout during wait
+        VmbErrorOther                   = -13,          //!< Other error
+        VmbErrorResources               = -14,          //!< Resources not available (e.g. memory)
+        VmbErrorInvalidCall             = -15,          //!< Call is invalid in the current context (e.g. callback)
+        VmbErrorNoTL                    = -16,          //!< No transport layers are found
+        VmbErrorNotImplemented          = -17,          //!< API feature is not implemented
+        VmbErrorNotSupported            = -18,          //!< API feature is not supported
+        VmbErrorIncomplete              = -19,          //!< The current operation was not completed (e.g. a multiple registers read or write)
+        VmbErrorIO                      = -20,          //!< Low level IO error in transport layer
+        VmbErrorValidValueSetNotPresent = -21,          //!< The valid value set could not be retrieved, since the feature does not provide this property
+        VmbErrorGenTLUnspecified        = -22,          //!< Unspecified GenTL runtime error
+        VmbErrorUnspecified             = -23,          //!< Unspecified runtime error
+        VmbErrorBusy                    = -24,          //!< The responsible module/entity is busy executing actions
+        VmbErrorNoData                  = -25,          //!< The function has no data to work on
+        VmbErrorParsingChunkData        = -26,          //!< An error occurred parsing a buffer containing chunk data
+        VmbErrorInUse                   = -27,          //!< Something is already in use
+        VmbErrorUnknown                 = -28,          //!< Error condition unknown
+        VmbErrorXml                     = -29,          //!< Error parsing XML
+        VmbErrorNotAvailable            = -30,          //!< Something is not available
+        VmbErrorNotInitialized          = -31,          //!< Something is not initialized
+        VmbErrorInvalidAddress          = -32,          //!< The given address is out of range or invalid for internal reasons
+        VmbErrorAlready                 = -33,          //!< Something has already been done
+        VmbErrorNoChunkData             = -34,          //!< A frame expected to contain chunk data does not contain chunk data
+        VmbErrorUserCallbackException   = -35,          //!< A callback provided by the user threw an exception
+        VmbErrorFeaturesUnavailable     = -36,          //!< The XML for the module is currently not loaded; the module could be in the wrong state or the XML could not be retrieved or could not be parsed properly
+        VmbErrorTLNotFound              = -37,          //!< A required transport layer could not be found or loaded
+        VmbErrorAmbiguous               = -39,          //!< An entity cannot be uniquely identified based on the information provided
+        VmbErrorRetriesExceeded         = -40,          //!< Something could not be accomplished with a given number of retries
+        VmbErrorInsufficientBufferCount = -41,          //!< The operation requires more buffers
+        VmbErrorCustom                  = 1,            //!< The minimum error code to use for user defined error codes to avoid conflict with existing error codes
+        VmbErrorJustInfo                = 2,            //!< nothing. no error. no success.
+    } VmbErrorType;
+
+    /**
+     * \brief Type for an error returned by API methods; for values see ::VmbErrorType.
+     */
+    typedef VmbInt32_t VmbError_t;
+
+/**
+ * \}
+ */
+
+/**
+ * \name Version
+ * \{
+ */
+
+    /**
+     * \brief Version information.
+     */
+    typedef struct VmbVersionInfo
+    {
+        /**
+         * \name Out
+         * \{
+         */
+
+        VmbUint32_t             major;          //!< Major version number
+        VmbUint32_t             minor;          //!< Minor version number
+        VmbUint32_t             patch;          //!< Patch version number
+
+        /**
+        * \}
+        */
+    } VmbVersionInfo_t;
+
+/**
+ * \}
+ */
+
+ /**
+ * \name Pixel information
+ * \{
+ */
+
+    /**
+     * \brief Indicates if pixel is monochrome or RGB.
+     */
+    typedef enum VmbPixelType
+    {
+        VmbPixelMono  =         0x01000000,     //!< Monochrome pixel
+        VmbPixelColor =         0x02000000      //!< Pixel bearing color information
+    } VmbPixelType;
+
+    /**
+     * \brief Indicates number of bits for a pixel. Needed for building values of ::VmbPixelFormatType.
+     */
+    typedef enum VmbPixelOccupyType
+    {
+        VmbPixelOccupy8Bit  =   0x00080000,     //!< Pixel effectively occupies 8 bits
+        VmbPixelOccupy10Bit =   0x000A0000,     //!< Pixel effectively occupies 10 bits
+        VmbPixelOccupy12Bit =   0x000C0000,     //!< Pixel effectively occupies 12 bits
+        VmbPixelOccupy14Bit =   0x000E0000,     //!< Pixel effectively occupies 14 bits
+        VmbPixelOccupy16Bit =   0x00100000,     //!< Pixel effectively occupies 16 bits
+        VmbPixelOccupy24Bit =   0x00180000,     //!< Pixel effectively occupies 24 bits
+        VmbPixelOccupy32Bit =   0x00200000,     //!< Pixel effectively occupies 32 bits
+        VmbPixelOccupy48Bit =   0x00300000,     //!< Pixel effectively occupies 48 bits
+        VmbPixelOccupy64Bit =   0x00400000,     //!< Pixel effectively occupies 64 bits
+    } VmbPixelOccupyType;
+
+    /**
+     * \brief Pixel format types.
+     * As far as possible, the Pixel Format Naming Convention (PFNC) has been followed, allowing a few deviations.
+     * If data spans more than one byte, it is always LSB aligned, except if stated differently.
+     */
+    typedef enum VmbPixelFormatType
+    {
+         // mono formats
+        VmbPixelFormatMono8                   = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy8Bit)  | 0x0001,  //!< Monochrome, 8 bits (PFNC:  Mono8)
+        VmbPixelFormatMono10                  = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0003,  //!< Monochrome, 10 bits in 16 bits (PFNC:  Mono10)
+        VmbPixelFormatMono10p                 = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy10Bit) | 0x0046,  //!< Monochrome, 10 bits in 16 bits (PFNC:  Mono10p)
+        VmbPixelFormatMono12                  = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0005,  //!< Monochrome, 12 bits in 16 bits (PFNC:  Mono12)
+        VmbPixelFormatMono12Packed            = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0006,  //!< Monochrome, 2x12 bits in 24 bits (GEV:Mono12Packed)
+        VmbPixelFormatMono12p                 = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0047,  //!< Monochrome, 2x12 bits in 24 bits (PFNC:  MonoPacked)
+        VmbPixelFormatMono14                  = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0025,  //!< Monochrome, 14 bits in 16 bits (PFNC:  Mono14)
+        VmbPixelFormatMono16                  = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0007,  //!< Monochrome, 16 bits (PFNC:  Mono16)
+
+        // bayer formats
+        VmbPixelFormatBayerGR8                = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy8Bit)  | 0x0008,  //!< Bayer-color, 8 bits, starting with GR line (PFNC:  BayerGR8)
+        VmbPixelFormatBayerRG8                = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy8Bit)  | 0x0009,  //!< Bayer-color, 8 bits, starting with RG line (PFNC:  BayerRG8)
+        VmbPixelFormatBayerGB8                = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy8Bit)  | 0x000A,  //!< Bayer-color, 8 bits, starting with GB line (PFNC:  BayerGB8)
+        VmbPixelFormatBayerBG8                = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy8Bit)  | 0x000B,  //!< Bayer-color, 8 bits, starting with BG line (PFNC:  BayerBG8)
+        VmbPixelFormatBayerGR10               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x000C,  //!< Bayer-color, 10 bits in 16 bits, starting with GR line (PFNC:  BayerGR10)
+        VmbPixelFormatBayerRG10               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x000D,  //!< Bayer-color, 10 bits in 16 bits, starting with RG line (PFNC:  BayerRG10)
+        VmbPixelFormatBayerGB10               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x000E,  //!< Bayer-color, 10 bits in 16 bits, starting with GB line (PFNC:  BayerGB10)
+        VmbPixelFormatBayerBG10               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x000F,  //!< Bayer-color, 10 bits in 16 bits, starting with BG line (PFNC:  BayerBG10)
+        VmbPixelFormatBayerGR12               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0010,  //!< Bayer-color, 12 bits in 16 bits, starting with GR line (PFNC:  BayerGR12)
+        VmbPixelFormatBayerRG12               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0011,  //!< Bayer-color, 12 bits in 16 bits, starting with RG line (PFNC:  BayerRG12)
+        VmbPixelFormatBayerGB12               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0012,  //!< Bayer-color, 12 bits in 16 bits, starting with GB line (PFNC:  BayerGB12)
+        VmbPixelFormatBayerBG12               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0013,  //!< Bayer-color, 12 bits in 16 bits, starting with BG line (PFNC:  BayerBG12)
+        VmbPixelFormatBayerGR12Packed         = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x002A,  //!< Bayer-color, 2x12 bits in 24 bits, starting with GR line (GEV:BayerGR12Packed)
+        VmbPixelFormatBayerRG12Packed         = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x002B,  //!< Bayer-color, 2x12 bits in 24 bits, starting with RG line (GEV:BayerRG12Packed)
+        VmbPixelFormatBayerGB12Packed         = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x002C,  //!< Bayer-color, 2x12 bits in 24 bits, starting with GB line (GEV:BayerGB12Packed)
+        VmbPixelFormatBayerBG12Packed         = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x002D,  //!< Bayer-color, 2x12 bits in 24 bits, starting with BG line (GEV:BayerBG12Packed)
+        VmbPixelFormatBayerGR10p              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy10Bit) | 0x0056,  //!< Bayer-color, 10 bits continuous packed, starting with GR line (PFNC:  BayerGR10p)
+        VmbPixelFormatBayerRG10p              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy10Bit) | 0x0058,  //!< Bayer-color, 10 bits continuous packed, starting with RG line (PFNC:  BayerRG10p)
+        VmbPixelFormatBayerGB10p              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy10Bit) | 0x0054,  //!< Bayer-color, 10 bits continuous packed, starting with GB line (PFNC:  BayerGB10p)
+        VmbPixelFormatBayerBG10p              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy10Bit) | 0x0052,  //!< Bayer-color, 10 bits continuous packed, starting with BG line (PFNC:  BayerBG10p)
+        VmbPixelFormatBayerGR12p              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0057,  //!< Bayer-color, 12 bits continuous packed, starting with GR line (PFNC:  BayerGR12p)
+        VmbPixelFormatBayerRG12p              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0059,  //!< Bayer-color, 12 bits continuous packed, starting with RG line (PFNC:  BayerRG12p)
+        VmbPixelFormatBayerGB12p              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0055,  //!< Bayer-color, 12 bits continuous packed, starting with GB line (PFNC:  BayerGB12p)
+        VmbPixelFormatBayerBG12p              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0053,  //!< Bayer-color, 12 bits continuous packed, starting with BG line (PFNC: BayerBG12p)
+        VmbPixelFormatBayerGR16               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x002E,  //!< Bayer-color, 16 bits, starting with GR line (PFNC: BayerGR16)
+        VmbPixelFormatBayerRG16               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x002F,  //!< Bayer-color, 16 bits, starting with RG line (PFNC: BayerRG16)
+        VmbPixelFormatBayerGB16               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0030,  //!< Bayer-color, 16 bits, starting with GB line (PFNC: BayerGB16)
+        VmbPixelFormatBayerBG16               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0031,  //!< Bayer-color, 16 bits, starting with BG line (PFNC: BayerBG16)
+
+         // rgb formats
+        VmbPixelFormatRgb8                    = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x0014,  //!< RGB, 8 bits x 3 (PFNC: RGB8)
+        VmbPixelFormatBgr8                    = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x0015,  //!< BGR, 8 bits x 3 (PFNC: BGR8)
+        VmbPixelFormatRgb10                   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x0018,  //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12)
+        VmbPixelFormatBgr10                   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x0019,  //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12)
+        VmbPixelFormatRgb12                   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x001A,  //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12)
+        VmbPixelFormatBgr12                   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x001B,  //!< RGB, 12 bits in 16 bits x 3 (PFNC: RGB12)
+        VmbPixelFormatRgb14                   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x005E,  //!< RGB, 14 bits in 16 bits x 3 (PFNC: RGB12)
+        VmbPixelFormatBgr14                   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x004A,  //!< RGB, 14 bits in 16 bits x 3 (PFNC: RGB12)
+        VmbPixelFormatRgb16                   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x0033,  //!< RGB, 16 bits x 3 (PFNC: RGB16)
+        VmbPixelFormatBgr16                   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x004B,  //!< RGB, 16 bits x 3 (PFNC: RGB16)
+
+         // rgba formats
+        VmbPixelFormatArgb8                   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy32Bit) | 0x0016,  //!< ARGB, 8 bits x 4 (PFNC: RGBa8)
+        VmbPixelFormatRgba8                   = VmbPixelFormatArgb8,                           //!< RGBA, 8 bits x 4, legacy name
+        VmbPixelFormatBgra8                   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy32Bit) | 0x0017,  //!< BGRA, 8 bits x 4 (PFNC: BGRa8)
+        VmbPixelFormatRgba10                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x005F,  //!< RGBA, 8 bits x 4, legacy name
+        VmbPixelFormatBgra10                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x004C,  //!< RGBA, 8 bits x 4, legacy name
+        VmbPixelFormatRgba12                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x0061,  //!< RGBA, 8 bits x 4, legacy name
+        VmbPixelFormatBgra12                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x004E,  //!< RGBA, 8 bits x 4, legacy name
+        VmbPixelFormatRgba14                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x0063,  //!< RGBA, 8 bits x 4, legacy name
+        VmbPixelFormatBgra14                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x0050,  //!< RGBA, 8 bits x 4, legacy name
+        VmbPixelFormatRgba16                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x0064,  //!< RGBA, 8 bits x 4, legacy name
+        VmbPixelFormatBgra16                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x0051,  //!< RGBA, 8 bits x 4, legacy name
+
+         // yuv/ycbcr formats
+        VmbPixelFormatYuv411                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x001E,  //!< YUV 4:1:1 with 8 bits (PFNC: YUV411_8_UYYVYY, GEV:YUV411Packed)
+        VmbPixelFormatYuv422                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x001F,  //!< YUV 4:2:2 with 8 bits (PFNC: YUV422_8_UYVY, GEV:YUV422Packed)
+        VmbPixelFormatYuv444                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x0020,  //!< YUV 4:4:4 with 8 bits (PFNC: YUV8_UYV, GEV:YUV444Packed)
+        VmbPixelFormatYuv422_8                = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0032,  //!< YUV 4:2:2 with 8 bits Channel order YUYV (PFNC: YUV422_8)
+        VmbPixelFormatYCbCr8_CbYCr            = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x003A,  //!< YCbCr 4:4:4 with 8 bits (PFNC: YCbCr8_CbYCr) - identical to VmbPixelFormatYuv444
+        VmbPixelFormatYCbCr422_8              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x003B,  //!< YCbCr 4:2:2 8-bit YCbYCr (PFNC: YCbCr422_8)
+        VmbPixelFormatYCbCr411_8_CbYYCrYY     = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x003C,  //!< YCbCr 4:1:1 with 8 bits (PFNC: YCbCr411_8_CbYYCrYY) - identical to VmbPixelFormatYuv411
+        VmbPixelFormatYCbCr601_8_CbYCr        = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x003D,  //!< YCbCr601 4:4:4 8-bit CbYCrt (PFNC: YCbCr601_8_CbYCr)
+        VmbPixelFormatYCbCr601_422_8          = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x003E,  //!< YCbCr601 4:2:2 8-bit YCbYCr (PFNC: YCbCr601_422_8)
+        VmbPixelFormatYCbCr601_411_8_CbYYCrYY = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x003F,  //!< YCbCr601 4:1:1 8-bit CbYYCrYY (PFNC: YCbCr601_411_8_CbYYCrYY)
+        VmbPixelFormatYCbCr709_8_CbYCr        = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x0040,  //!< YCbCr709 4:4:4 8-bit CbYCr (PFNC: YCbCr709_8_CbYCr)
+        VmbPixelFormatYCbCr709_422_8          = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0041,  //!< YCbCr709 4:2:2 8-bit YCbYCr (PFNC: YCbCr709_422_8)
+        VmbPixelFormatYCbCr709_411_8_CbYYCrYY = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0042,  //!< YCbCr709 4:1:1 8-bit CbYYCrYY (PFNC: YCbCr709_411_8_CbYYCrYY)
+        VmbPixelFormatYCbCr422_8_CbYCrY       = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0043,  //!< YCbCr 4:2:2 with 8 bits (PFNC: YCbCr422_8_CbYCrY) - identical to VmbPixelFormatYuv422
+        VmbPixelFormatYCbCr601_422_8_CbYCrY   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0044,  //!< YCbCr601 4:2:2 8-bit CbYCrY (PFNC: YCbCr601_422_8_CbYCrY)
+        VmbPixelFormatYCbCr709_422_8_CbYCrY   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0045,  //!< YCbCr709 4:2:2 8-bit CbYCrY (PFNC: YCbCr709_422_8_CbYCrY)
+        VmbPixelFormatYCbCr411_8              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x005A,  //!< YCbCr 4:1:1 8-bit YYCbYYCr (PFNC: YCbCr411_8)
+        VmbPixelFormatYCbCr8                  = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x005B,  //!< YCbCr 4:4:4 8-bit YCbCr (PFNC: YCbCr8)
+
+        VmbPixelFormatLast,
+    } VmbPixelFormatType;
+
+    /**
+     * \brief Type for the pixel format; for values see ::VmbPixelFormatType.
+     */
+    typedef VmbUint32_t VmbPixelFormat_t;
+
+/**
+ * \}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VMBCOMMONTYPES_H_INCLUDE_
diff --git a/VimbaX/api/include/VmbC/VmbConstants.h b/VimbaX/api/include/VmbC/VmbConstants.h
new file mode 100644
index 0000000000000000000000000000000000000000..9293a7774f586f98bdfd073d7fe92ad6eb7940ab
--- /dev/null
+++ b/VimbaX/api/include/VmbC/VmbConstants.h
@@ -0,0 +1,85 @@
+/*=============================================================================
+  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this header file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        VmbConstants.h
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+/**
+ * \file
+ * \brief File containing constants used in the Vmb C API.
+ */
+
+#ifndef VMBCONSTANTS_H_INCLUDE_
+#define VMBCONSTANTS_H_INCLUDE_
+
+#ifdef _WIN32
+/**
+ * \brief the character used to separate file paths in the parameter of ::VmbStartup 
+ */
+#define VMB_PATH_SEPARATOR_CHAR L';'
+
+/**
+ * \brief the string used to separate file paths in the parameter of ::VmbStartup
+ */
+#define VMB_PATH_SEPARATOR_STRING L";"
+#else
+/**
+ * \brief the character used to separate file paths in the parameter of ::VmbStartup
+ */
+#define VMB_PATH_SEPARATOR_CHAR ':'
+
+/**
+ * \brief the string used to separate file paths in the parameter of ::VmbStartup
+ */
+#define VMB_PATH_SEPARATOR_STRING ":"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup SfncNamespaces Sfnc Namespace Constants
+ * \{
+ */
+ 
+/**
+ * \brief The C string identifying the namespace of features not defined in the SFNC
+ *        standard.
+ */
+#define VMB_SFNC_NAMESPACE_CUSTOM "Custom"
+
+/**
+ * \brief The C string identifying the namespace of features defined in the SFNC
+ *        standard.
+ */
+#define VMB_SFNC_NAMESPACE_STANDARD "Standard"
+
+/**
+ * \}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VMBCONSTANTS_H_INCLUDE_
diff --git a/VimbaX/api/include/VmbCPP/BasicLockable.h b/VimbaX/api/include/VmbCPP/BasicLockable.h
new file mode 100644
index 0000000000000000000000000000000000000000..239ff35a2884e3cf83e1d48b203fa1cf6ed661b1
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/BasicLockable.h
@@ -0,0 +1,100 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        BasicLockable.h
+
+  Description: Definition of class VmbCPP::BasicLockable.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_BASICLOCKABLE
+#define VMBCPP_BASICLOCKABLE
+
+/**
+* \file  BasicLockable.h
+*
+* \brief Definition of class VmbCPP::BasicLockable.
+*/
+
+#include <VmbCPP/VmbCPPCommon.h>
+#include <VmbCPP/SharedPointerDefines.h>
+#include <VmbCPP/Mutex.h>
+
+
+namespace VmbCPP {
+
+class BaseFeature;
+class Condition;
+class ConditionHelper;
+class MutexGuard;
+
+/**
+ * \brief A class providing lock and unlock functionality implemented via mutex. 
+ */
+class BasicLockable
+{
+public:
+    IMEXPORT BasicLockable();
+
+    /**
+     * \brief Constructor copying the mutex pointer.
+     */
+    IMEXPORT BasicLockable( MutexPtr pMutex );
+
+    /**
+     * \brief Constructor taking ownership of the mutex pointer.
+     */
+    IMEXPORT BasicLockable( MutexPtr&& pMutex ) noexcept;
+
+    IMEXPORT virtual ~BasicLockable();
+
+    /**
+     * \brief Acquire the lock.
+     * 
+     * The call blocks, until the lock is available.
+     */
+    void Lock()
+    {
+        SP_ACCESS(m_pMutex)->Lock();
+    }
+
+    /**
+     * \brief Release the lock. 
+     */
+    void Unlock()
+    {
+        SP_ACCESS(m_pMutex)->Unlock();
+    }
+private:
+    friend class BaseFeature;
+    friend class Condition;
+    friend class ConditionHelper;
+    friend class MutexGuard;
+
+    MutexPtr& GetMutex();
+    const MutexPtr& GetMutex() const;
+
+    MutexPtr m_pMutex;
+};
+
+} //namespace VmbCPP
+
+#endif 
\ No newline at end of file
diff --git a/VimbaX/api/include/VmbCPP/Camera.h b/VimbaX/api/include/VmbCPP/Camera.h
new file mode 100644
index 0000000000000000000000000000000000000000..01c212186e79714f238d45785307b02b235c05a8
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/Camera.h
@@ -0,0 +1,740 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Camera.h
+
+  Description: Definition of class VmbCPP::Camera.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_CAMERA_H
+#define VMBCPP_CAMERA_H
+
+/**
+* \file  Camera.h
+*
+* \brief Definition of class VmbCPP::Camera.
+*/
+
+#include <string>
+#include <vector>
+
+#include <VmbC/VmbC.h>
+
+#include "Frame.h"
+#include "IFrameObserver.h"
+#include "Interface.h"
+#include "LocalDevice.h"
+#include "PersistableFeatureContainer.h"
+#include "SharedPointerDefines.h"
+#include "Stream.h"
+#include "UniquePointer.hpp"
+#include "VmbCPPCommon.h"
+
+namespace VmbCPP {
+
+/**
+ * \brief A type alias for a vector of shared pointers to frames.
+ */
+typedef std::vector<FramePtr> FramePtrVector;
+
+/**
+ * \brief A type alias for a vector of shared pointers to streams. 
+ */
+typedef std::vector<StreamPtr> StreamPtrVector;
+
+/**
+ * \brief A class for accessing camera related functionality.
+ * 
+ * This object corresponds to the GenTL remote device.
+ */
+class Camera : public PersistableFeatureContainer, public ICapturingModule
+{
+  public:
+
+    /**
+    * \brief    Creates an instance of class Camera given the interface info object received from
+    *           the Vmb C API.
+    * 
+    * If "IP_OR_MAC@" occurs in ::VmbCameraInfo::cameraIdString of \p cameraInfo, the camera id used to
+    * identify the camera is the substring starting after the first occurence of this string with the
+    * next occurence of the same string removed, should it exist. Otherwise
+    * ::VmbCameraInfo::cameraIdExtended is used to identify the camera.
+    * 
+    * If ::VmbCameraInfo::cameraIdExtended is used, it needs to match the extended id retrieved from
+    * the VmbC API.
+    * 
+    * Any strings in \p cameraInfo that are null are treated as the empty string.
+    *
+    * \param[in ] cameraInfo    The struct containing the information about the camera.
+    * \param[in ] pInterface    The shared pointer to the interface providing the camera
+    * 
+    * \exception std::bad_alloc   The memory available is insufficient to allocate the storage
+    *                             required to store the data.
+    */
+    IMEXPORT Camera(const VmbCameraInfo_t& cameraInfo,
+                    const InterfacePtr& pInterface);
+
+    /**
+    * 
+    * \brief    Destroys an instance of class Camera
+    * 
+    * Destroying a camera implicitly closes it beforehand.
+    * 
+    */ 
+    IMEXPORT virtual ~Camera();
+
+    /**
+     * 
+     * \brief     Opens the specified camera.
+     * 
+     * A camera may be opened in a specific access mode. This mode determines
+     * the level of control you have on a camera.
+     * 
+     * \param[in ]  accessMode      Access mode determines the level of control you have on the camera
+     * 
+     * \returns ::VmbErrorType
+     * 
+     * \retval ::VmbErrorSuccess            The call was successful
+     *
+     * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+     *
+     * \retval ::VmbErrorInvalidCall        If called from frame callback or chunk access callback
+     * 
+     * \retval ::VmbErrorNotFound           The designated camera cannot be found
+     */   
+    IMEXPORT virtual VmbErrorType Open(VmbAccessModeType accessMode);
+
+    /**
+    * 
+    * \brief     Closes the specified camera.
+    * 
+    * Depending on the access mode this camera was opened in, events are killed,
+    * callbacks are unregistered, the frame queue is cleared, and camera control is released.
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess         If no error
+    * 
+    * \retval ::VmbErrorDeviceNotOpen   Camera was not opened before the current command
+    * 
+    * \retval ::VmbErrorInUse           The camera is currently in use with ::VmbChunkDataAccess
+    * 
+    * \retval ::VmbErrorBadHandle       The handle does not correspond to an open camera
+    *
+    * \retval ::VmbErrorInvalidCall     If called from frame callback or chunk access callback
+    */ 
+    IMEXPORT virtual VmbErrorType Close();
+
+    /**
+    * 
+    * \brief     Gets the ID of a camera.
+    * 
+    * The id is the id choosen by the transport layer. There's no guarantee it's human readable.
+    * 
+    * The id same id may be used by multiple cameras provided by different interfaces.
+    * 
+    * \note      This information remains static throughout the object's lifetime
+    * 
+    * \param[out]   cameraID         The string the camera id is written to
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess     If no error
+    * 
+    * \retval ::VmbErrorResources   The attempt to allocate memory for storing the output failed.
+    */ 
+    VmbErrorType GetID(std::string& cameraID) const noexcept;
+
+    /**
+    *
+    * \brief     Gets the extenden ID of a camera (globally unique identifier)
+    * 
+    * The extended id is unique for the camera. The same physical camera may be listed multiple times
+    * with different extended ids, if multiple ctis or multiple interfaces provide access to the device.
+    * 
+    * \note      This information remains static throughout the object's lifetime
+    *
+    * \param[out]   extendedID      The the extended id is written to
+    *
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess     If no error
+    * 
+    * \retval ::VmbErrorResources   The attempt to allocate memory for storing the output failed.
+    */
+    VmbErrorType GetExtendedID(std::string& extendedID) const noexcept;
+
+    /**
+    * \brief     Gets the display name of a camera.
+    * 
+    * \note      This information remains static throughout the object's lifetime
+    * 
+    * \param[out]   name         The string the name of the camera is written to
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess     If no error
+    * 
+    * \retval ::VmbErrorResources   The attempt to allocate memory for storing the output failed.
+    */ 
+    VmbErrorType GetName(std::string& name) const noexcept;
+    
+    /**
+    * 
+    * \brief     Gets the model name of a camera.
+    *
+    * \note      This information remains static throughout the object's lifetime
+    * 
+    * \param[out]   model         The string the model name of the camera is written to
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess     If no error
+    * 
+    * \retval ::VmbErrorResources   The attempt to allocate memory for storing the output failed.
+    */ 
+    VmbErrorType GetModel(std::string& model) const noexcept;
+
+    /**
+    * 
+    * \brief     Gets the serial number of a camera.
+    *
+    * \note      This information remains static throughout the object's lifetime
+    * 
+    * \param[out]   serialNumber    The string to write the serial number of the camera to
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess     If no error
+    * 
+    * \retval ::VmbErrorResources   The attempt to allocate memory for storing the output failed.
+    */ 
+    VmbErrorType GetSerialNumber(std::string& serialNumber) const noexcept;
+
+    /**
+    * 
+    * \brief     Gets the interface ID of a camera.
+    * 
+    * \note      This information remains static throughout the object's lifetime
+    * 
+    * \param[out]   interfaceID     The string to write the interface ID to
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess     If no error
+    * 
+    * \retval ::VmbErrorResources   The attempt to allocate memory for storing the output failed.
+    */ 
+    VmbErrorType GetInterfaceID(std::string& interfaceID) const;
+
+    /**
+    * 
+    * \brief     Gets the type of the interface the camera is connected to. And therefore the type of the camera itself.
+    * 
+    * \param[out]   interfaceType   A reference to the interface type variable to write the output to
+    * 
+    * \returns ::VmbErrorType
+    *
+    * \retval ::VmbErrorSuccess         If no error
+    * 
+    * \retval ::VmbErrorNotAvailable    No interface is currently associated with this object
+    */ 
+    IMEXPORT VmbErrorType GetInterfaceType(VmbTransportLayerType& interfaceType) const;
+
+    /**
+    *
+    * \brief     Gets the shared pointer to the interface providing the camera.
+    *
+    * \param[out]   pInterface    The shared pointer to assign the interface assigned to
+    *
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess         If no error
+    * 
+    * \retval ::VmbErrorNotAvailable    No interface is currently associated with this object
+    */
+    IMEXPORT VmbErrorType GetInterface(InterfacePtr& pInterface) const;
+
+    /**
+    *
+    * \brief     Gets the shared pointer to the local device module associated with this camera.
+    * 
+    * This information is only available for open cameras.
+    *
+    * \param[out]   pLocalDevice    The shared pointer the local device is assigned to
+    *
+    * \returns ::VmbErrorType
+    *
+    * \retval ::VmbErrorSuccess           If no error
+    * 
+    * \retval ::VmbErrorDeviceNotOpen     The camera is currently not opened
+    */
+    IMEXPORT VmbErrorType GetLocalDevice(LocalDevicePtr& pLocalDevice);
+
+    /**
+    * \brief     Gets the pointer of the related transport layer.
+    *
+    * \param[out]   pTransportLayer     The shared pointer the transport layer is assigned to
+    *
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess         If no error
+    * 
+    * \retval ::VmbErrorNotAvailable    No interface is currently associated with
+    *                                   this object or the interface is not associated
+    *                                   with a transport layer
+    */
+    IMEXPORT VmbErrorType GetTransportLayer(TransportLayerPtr& pTransportLayer) const;
+
+    /**
+    * \brief     Gets the vector with the available streams of the camera.
+    *
+    * \param[out]   streams     The vector the available streams of the camera are written to
+    *
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess     If no error
+    * 
+    * \retval ::VmbErrorResources      The attempt to allocate memory for storing the output failed.
+    * \retval ::VmbErrorDeviceNotOpen  The camera is currently not open
+    * \retval ::VmbErrorNotAvailable   The camera does not provide any streams
+    */
+    VmbErrorType GetStreams(StreamPtrVector& streams) noexcept;
+
+    /**
+     * 
+     * \brief     Gets the access modes of a camera.
+     * 
+     * \param[out]  permittedAccess     The possible access modes of the camera
+     * 
+     * \returns ::VmbErrorType
+     * 
+     * \retval ::VmbErrorSuccess            If no error
+     * 
+     * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+     * 
+     * \retval ::VmbErrorNotFound           No camera with the given id is found
+        */ 
+    IMEXPORT VmbErrorType GetPermittedAccess(VmbAccessModeType& permittedAccess) const;
+
+    /**
+    * \brief     Reads a block of memory. The number of bytes to read is determined by the size of the provided buffer.
+    * 
+    * \param[in ]   address    The address to read from
+    * \param[out]   buffer     The returned data as vector
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess         If all requested bytes have been read
+    * 
+    * \retval ::VmbErrorBadParameter    Vector \p buffer is empty.
+    *
+    * \retval ::VmbErrorIncomplete      If at least one, but not all bytes have been read. See overload `ReadMemory(const VmbUint64_t&, UcharVector&, VmbUint32_t&) const`.
+    * 
+    * \retval ::VmbErrorInvalidCall     If called from a chunk access callback
+    *
+    * \retval ::VmbErrorInvalidAccess   Operation is invalid with the current access mode
+    */ 
+    VmbErrorType ReadMemory(const VmbUint64_t& address, UcharVector& buffer) const noexcept;
+
+    /**
+    * 
+    * \brief     Same as `ReadMemory(const Uint64Vector&, UcharVector&) const`, but returns the number of bytes successfully read in case of an error ::VmbErrorIncomplete.
+    * 
+    * \param[in]    address        The address to read from
+    * \param[out]   buffer         The returned data as vector
+    * \param[out]   completeReads  The number of successfully read bytes
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess         If all requested bytes have been read
+    * 
+    * \retval ::VmbErrorBadParameter    Vector \p buffer is empty.
+    *
+    * \retval ::VmbErrorIncomplete      If at least one, but not all bytes have been read. See overload `ReadMemory(const VmbUint64_t&, UcharVector&, VmbUint32_t&) const`.
+    * 
+    * \retval ::VmbErrorInvalidCall     If called from a chunk access callback
+    *
+    * \retval ::VmbErrorInvalidAccess   Operation is invalid with the current access mode
+    */ 
+    VmbErrorType ReadMemory(const VmbUint64_t& address, UcharVector& buffer, VmbUint32_t& completeReads) const noexcept;
+
+    /**
+    * 
+    * \brief     Writes a block of memory. The number of bytes to write is determined by the size of the provided buffer.
+    * 
+    * \param[in]    address    The address to write to
+    * \param[in]    buffer     The data to write as vector
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess         If all requested bytes have been written
+    * 
+    * \retval ::VmbErrorBadParameter    Vector \p buffer is empty.
+    * 
+    * \retval ::VmbErrorIncomplete      If at least one, but not all bytes have been written. See overload `WriteMemory(const VmbUint64_t&, const UcharVector&, VmbUint32_t&)`.
+    * 
+    * \retval ::VmbErrorInvalidCall     If called from a chunk access callback
+    *
+    * \retval ::VmbErrorInvalidAccess   Operation is invalid with the current access mode
+    */ 
+    VmbErrorType WriteMemory(const VmbUint64_t& address, const UcharVector& buffer) noexcept;
+
+    /**
+    * \brief     Same as WriteMemory(const Uint64Vector&, const UcharVector&), but returns the number of bytes successfully written in case of an error ::VmbErrorIncomplete.
+    * 
+    * \param[in]    address        The address to write to
+    * \param[in]    buffer         The data to write as vector
+    * \param[out]   sizeComplete   The number of successfully written bytes
+    * 
+    * \returns ::VmbErrorType
+    *
+    * \retval ::VmbErrorSuccess         If all requested bytes have been written
+    * 
+    * \retval ::VmbErrorBadParameter    Vector \p buffer is empty.
+    * 
+    * \retval ::VmbErrorIncomplete      If at least one, but not all bytes have been written.
+    * 
+    * \retval ::VmbErrorInvalidCall     If called from a chunk access callback
+    *
+    * \retval ::VmbErrorInvalidAccess   Operation is invalid with the current access mode
+    */ 
+    VmbErrorType WriteMemory(const VmbUint64_t& address, const UcharVector& buffer, VmbUint32_t& sizeComplete) noexcept;
+
+    /**
+    * \brief     Gets one image synchronously.
+    * 
+    * \param[out]   pFrame          The frame that gets filled
+    * \param[in ]   timeout         The time in milliseconds to wait until the frame got filled
+    * \param[in ]   allocationMode  The frame allocation mode
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess         If no error
+    * 
+    * \retval ::VmbErrorBadParameter    \p pFrame is null.
+    * 
+    * \retval ::VmbErrorInvalidCall     If called from a chunk access callback
+    * 
+    * \retval ::VmbErrorInUse           If the frame was queued with a frame callback
+    * 
+    * \retval ::VmbErrorTimeout         Call timed out
+    * 
+    * \retval ::VmbErrorDeviceNotOpen   The camera is currently not open
+    * 
+    * \retval ::VmbErrorNotAvailable    The camera does not provide any streams
+    */ 
+    IMEXPORT VmbErrorType AcquireSingleImage(FramePtr& pFrame, VmbUint32_t timeout, FrameAllocationMode allocationMode = FrameAllocation_AnnounceFrame);
+
+    /**
+    * 
+    * \brief     Gets a certain number of images synchronously.
+    * 
+    * The size of the frame vector determines the number of frames to use.
+    * 
+    * \param[in,out]    frames          The frames that get filled
+    * \param[in ]       timeout         The time in milliseconds to wait until one frame got filled
+    * \param[in ]       allocationMode  The frame allocation mode
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess         If no error
+    * 
+    * \retval ::VmbErrorInternalFault   Filling all the frames was not successful.
+    * 
+    * \retval ::VmbErrorBadParameter    Vector \p frames is empty or one of the frames is null.
+    * 
+    * \retval ::VmbErrorInvalidCall     If called from a chunk access callback
+    * 
+    * \retval ::VmbErrorInUse           If the frame was queued with a frame callback
+    * 
+    * \retval ::VmbErrorDeviceNotOpen   The camera is currently not open
+    * 
+    * \retval ::VmbErrorNotAvailable    The camera does not provide any streams
+    * 
+    */ 
+    VmbErrorType AcquireMultipleImages(FramePtrVector& frames, VmbUint32_t timeout, FrameAllocationMode allocationMode = FrameAllocation_AnnounceFrame);
+
+    /**
+    * 
+    * \brief    Same as `AcquireMultipleImages(FramePtrVector&, VmbUint32_t, FrameAllocationMode)`, but returns the number of frames that were filled completely.
+    * 
+    * The size of the frame vector determines the number of frames to use.
+    * On return, \p numFramesCompleted holds the number of frames actually filled.
+    * 
+    * \param[in,out]    frames              The frames to fill
+    * \param[in ]       timeout             The time in milliseconds to wait until one frame got filled
+    * \param[out]       numFramesCompleted  The number of frames that were filled completely
+    * \param[in ]       allocationMode      The frame allocation mode
+    * 
+    * \returns ::VmbErrorType
+
+    * \retval ::VmbErrorInternalFault   Filling all the frames was not successful.
+    * 
+    * \retval ::VmbErrorBadParameter    Vector \p frames is empty or one of the frames is null.
+    * 
+    * \retval ::VmbErrorInvalidCall     If called from a chunk access callback
+    * 
+    * \retval ::VmbErrorInUse           If the frame was queued with a frame callback
+    * 
+    * \retval ::VmbErrorDeviceNotOpen   The camera is currently not open
+    * 
+    * \retval ::VmbErrorNotAvailable    The camera does not provide any streams
+    */ 
+    VmbErrorType AcquireMultipleImages(FramePtrVector& frames, VmbUint32_t timeout, VmbUint32_t& numFramesCompleted, FrameAllocationMode allocationMode = FrameAllocation_AnnounceFrame);
+
+    /**
+    * 
+    * \brief     Starts streaming and allocates the needed frames
+    * 
+    * \param[in ]   bufferCount    The number of frames to use
+    * \param[out]   pObserver      The observer to use on arrival of acquired frames
+    * \param[in ]   allocationMode The frame allocation mode
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess         If no error
+    * \retval ::VmbErrorDeviceNotOpen   The camera is currently not open
+    * \retval ::VmbErrorNotAvailable    The camera does not provide any streams
+    * \retval ::VmbErrorApiNotStarted   VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle       The given handle is not valid
+    * \retval ::VmbErrorInvalidAccess   Operation is invalid with the current access mode
+    */ 
+    IMEXPORT VmbErrorType StartContinuousImageAcquisition(int bufferCount, const IFrameObserverPtr& pObserver, FrameAllocationMode allocationMode = FrameAllocation_AnnounceFrame);
+
+    /**
+    * 
+    * \brief     Stops streaming and deallocates the frames used
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorDeviceNotOpen  The camera is currently not open
+    */ 
+    IMEXPORT VmbErrorType StopContinuousImageAcquisition();
+
+    /**
+      * \brief     Get the necessary payload size for buffer allocation.
+      *
+      * \param[in ]  nPayloadSize   The variable to write the payload size to
+      *
+      * \returns ::VmbErrorType
+      * \retval ::VmbErrorSuccess        If no error
+      * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+      * \retval ::VmbErrorBadHandle      The given handle is not valid
+      */
+    IMEXPORT VmbErrorType GetPayloadSize(VmbUint32_t& nPayloadSize) noexcept;
+
+    /**
+    * 
+    * \brief     Announces a frame to the API that may be queued for frame capturing later.
+    * 
+    * The frame is announced for the first stream.
+    * 
+    * Allows some preparation for frames like DMA preparation depending on the transport layer.
+    * The order in which the frames are announced is not taken in consideration by the API.
+    * 
+    * \param[in ]  pFrame         Shared pointer to a frame to announce
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    * \retval ::VmbErrorBadParameter   \p pFrame is null.
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this version of the API
+    * \retval ::VmbErrorDeviceNotOpen  The camera is currently not open
+    * \retval ::VmbErrorNotAvailable   The camera does not provide any streams
+    */ 
+    IMEXPORT virtual VmbErrorType AnnounceFrame(const FramePtr& pFrame) override;
+    
+    /**
+    * 
+    * \brief     Revoke a frame from the API.
+    * 
+    * The frame is revoked for the first stream.
+    * 
+    * The referenced frame is removed from the pool of frames for capturing images.
+    * 
+    * A call to FlushQueue may be required for the frame to be revoked successfully.
+    * 
+    * \param[in ]  pFrame         Shared pointer to a frame that is to be removed from the list of announced frames
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given frame pointer is not valid
+    * \retval ::VmbErrorBadParameter   \p pFrame is null.
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this version of the API
+    * \retval ::VmbErrorDeviceNotOpen  The camera is currently not open
+    * \retval ::VmbErrorNotAvailable   The camera does not provide any streams
+    */ 
+    IMEXPORT virtual VmbErrorType RevokeFrame(const FramePtr& pFrame) override;
+
+    /**
+    * \brief     Revoke all frames announced for the first stream of this camera.
+    * 
+    * A call to FlushQueue may be required to be able to revoke all frames.
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    * \retval ::VmbErrorDeviceNotOpen  The camera is currently not open
+    * \retval ::VmbErrorNotAvailable   The camera does not provide any streams
+    */ 
+    IMEXPORT virtual VmbErrorType RevokeAllFrames() override;
+    
+    /**
+    * 
+    * \brief     Queues a frame that may be filled during frame capturing.
+    * 
+    * The frame is queued for the first stream.
+    *
+    * The given frame is put into a queue that will be filled sequentially.
+    * The order in which the frames are filled is determined by the order in which they are queued.
+    * If the frame was announced with AnnounceFrame() before, the application
+    * has to ensure that the frame is also revoked by calling RevokeFrame() or RevokeAll()
+    * when cleaning up.
+    * 
+    * \param[in ]  pFrame    A shared pointer to a frame
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorDeviceNotOpen  The camera is currently not open
+    * \retval ::VmbErrorNotAvailable   The camera does not provide any streams  
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given frame is not valid
+    * \retval ::VmbErrorBadParameter   \p pFrame is null.
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this version of the API
+    * \retval ::VmbErrorInvalidCall    StopContinuousImageAcquisition is currently running in another thread
+    */ 
+    IMEXPORT virtual VmbErrorType QueueFrame(const FramePtr& pFrame) override;
+
+    /**
+    * 
+    * \brief     Flushes the capture queue.
+    * 
+    * Works with the first available stream.
+    *            
+    * All currently queued frames will be returned to the user, leaving no frames in the input queue.
+    * After this call, no frame notification will occur until frames are queued again.
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    * \retval ::VmbErrorDeviceNotOpen  The camera is currently not open
+    * \retval ::VmbErrorNotAvailable   The camera does not provide any streams
+    */ 
+    IMEXPORT virtual VmbErrorType FlushQueue() override;
+    
+    /**
+    * 
+    * \brief     Prepare the API for incoming frames from this camera.
+    *            Works with the first available stream.
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    * \retval ::VmbErrorDeviceNotOpen  The camera is currently not open
+    * \retval ::VmbErrorNotAvailable   The camera does not provide any streams
+    * \retval ::VmbErrorInvalidAccess  Operation is invalid with the current access mode
+    */ 
+    IMEXPORT virtual VmbErrorType StartCapture() override;
+
+    /**
+    * 
+    * \brief     Stops the API from being able to receive frames from this camera. The frame callback will not be called any more.
+    *            Works with the first stream of the camera.
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    * \retval ::VmbErrorDeviceNotOpen  The camera is currently not open
+    * \retval ::VmbErrorNotAvailable   The camera does not provide any streams
+    */ 
+    IMEXPORT virtual VmbErrorType EndCapture() override;
+
+    /**
+     * \brief Checks if the extended id of this object matches a string.
+     * 
+     * \param[in]   extendedId  the id to to compare the extended id of this object with
+     * 
+     * \return true, if \p extendedId is non-null and matches the extended id of this object,
+     *         false otherwise.
+     */
+    IMEXPORT bool ExtendedIdEquals(char const* extendedId) noexcept;
+
+    Camera() = delete;
+
+    /**
+     * \brief The object is non-copyable
+     */
+    Camera (const Camera&) = delete;
+
+    /**
+     * \brief The object is non-copyable
+     */
+    Camera& operator=(const Camera&) = delete;
+
+    /**
+    * \brief    Retrieve the necessary buffer alignment size in bytes (equals 1 if Data Stream has no such restriction)
+    *
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess         If no error
+    * \retval ::VmbErrorApiNotStarted   VmbStartup() was not called before the current command
+    */
+    IMEXPORT virtual VmbErrorType GetStreamBufferAlignment(VmbUint32_t& nBufferAlignment) override;
+
+  private:
+
+        struct Impl;
+        UniquePointer<Impl> m_pImpl;
+
+    //  Array functions to pass data across DLL boundaries
+    IMEXPORT VmbErrorType GetID(char* const pID, VmbUint32_t& length, bool extended = false) const noexcept;
+    IMEXPORT VmbErrorType GetName(char* const pName, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType GetModel(char* const pModelName, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType GetSerialNumber(char* const pSerial, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType AcquireMultipleImages(FramePtr* pFrames, VmbUint32_t size, VmbUint32_t nTimeout, VmbUint32_t* pNumFramesCompleted, FrameAllocationMode allocationMode);
+    IMEXPORT VmbErrorType ReadMemory(VmbUint64_t address, VmbUchar_t* pBuffer, VmbUint32_t bufferSize, VmbUint32_t* pSizeComplete) const noexcept;
+    IMEXPORT VmbErrorType WriteMemory(VmbUint64_t address, const VmbUchar_t* pBuffer, VmbUint32_t bufferSize, VmbUint32_t* pSizeComplete) noexcept;
+    IMEXPORT VmbErrorType GetStreams(StreamPtr* pStreams, VmbUint32_t& rnSize) noexcept;
+
+};
+
+} // namespace VmbCPP
+
+#include "Camera.hpp"
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/Camera.hpp b/VimbaX/api/include/VmbCPP/Camera.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..b5be4003bcdd6a652fb829a75d8fda051205a574
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/Camera.hpp
@@ -0,0 +1,154 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Camera.hpp
+
+  Description: Inline wrapper functions for class VmbCPP::Camera.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_CAMERA_HPP
+#define VMBCPP_CAMERA_HPP
+
+/**
+* \file Camera.hpp
+*
+* \brief Inline wrapper functions for class VmbCPP::Camera
+*        that allocate memory for STL objects in the application's context
+*        and to pass data across DLL boundaries using arrays
+*/
+
+#include <utility>
+
+#include "CopyHelper.hpp"
+
+namespace VmbCPP {
+
+// HINT: This information remains static throughout the object's lifetime
+inline VmbErrorType Camera::GetID( std::string &rStrID ) const noexcept
+{
+    constexpr bool extended = false;
+    return impl::ArrayGetHelper(*this, rStrID, &Camera::GetID, extended);
+}
+
+inline VmbErrorType Camera::GetExtendedID(std::string& rStrID) const noexcept
+{
+    constexpr bool extended = true;
+    return impl::ArrayGetHelper(*this, rStrID, &Camera::GetID, extended);
+}
+
+// HINT: This information remains static throughout the object's lifetime
+inline VmbErrorType Camera::GetName( std::string &rStrName ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrName, &Camera::GetName);
+}
+
+// HINT: This information remains static throughout the object's lifetime
+inline VmbErrorType Camera::GetModel( std::string &rStrModel ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrModel, &Camera::GetModel);
+}
+
+// HINT: This information remains static throughout the object's lifetime
+inline VmbErrorType Camera::GetSerialNumber( std::string &rStrSerial ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrSerial, &Camera::GetSerialNumber);
+}
+
+// HINT: This information remains static throughout the object's lifetime
+inline VmbErrorType Camera::GetInterfaceID( std::string &rStrInterfaceID ) const
+{
+    InterfacePtr pInterface;
+    VmbErrorType res = GetInterface(pInterface);
+    if (VmbErrorSuccess != res || SP_ISNULL(pInterface))
+    {
+        return VmbErrorNotAvailable;
+    }
+    return SP_ACCESS(pInterface)->GetID(rStrInterfaceID);
+}
+
+inline VmbErrorType Camera::AcquireMultipleImages( FramePtrVector &rFrames, VmbUint32_t nTimeout, FrameAllocationMode allocationMode )
+{
+    VmbErrorType res;
+    VmbUint32_t i;
+    res = AcquireMultipleImages( rFrames, nTimeout, i, allocationMode );
+    if ( rFrames.size() != i )
+    {
+        res = VmbErrorInternalFault;
+    }
+    
+    return res;
+}
+inline VmbErrorType Camera::AcquireMultipleImages( FramePtrVector &rFrames, VmbUint32_t nTimeout, VmbUint32_t &rNumFramesCompleted, FrameAllocationMode allocationMode )
+{
+    if ( rFrames.empty() )
+    {
+        return VmbErrorBadParameter;
+    }
+
+    return AcquireMultipleImages( &rFrames[0], (VmbUint32_t)rFrames.size(), nTimeout, &rNumFramesCompleted, allocationMode );
+}
+
+// HINT: Size of buffer determines how many bytes to read.
+inline VmbErrorType Camera::ReadMemory( const VmbUint64_t &rAddress, UcharVector &rBuffer ) const noexcept
+{
+    VmbUint32_t i;
+    return ReadMemory( rAddress, rBuffer, i );
+}
+
+inline VmbErrorType Camera::ReadMemory( const VmbUint64_t &rAddress, UcharVector &rBuffer, VmbUint32_t &rCompletedReads ) const noexcept
+{
+    if ( rBuffer.empty() )
+    {
+        return VmbErrorBadParameter;
+    }
+
+    return ReadMemory( rAddress, &rBuffer[0], (VmbUint32_t)rBuffer.size(), &rCompletedReads );
+}
+
+// HINT: Size of buffer determines how many bytes to write.
+inline VmbErrorType Camera::WriteMemory( const VmbUint64_t &rAddress, const UcharVector &rBuffer ) noexcept
+{
+    VmbUint32_t i;
+    return WriteMemory( rAddress, rBuffer, i );
+}
+
+inline VmbErrorType Camera::WriteMemory(
+    const VmbUint64_t &rAddress,
+    const UcharVector &rBuffer,
+    VmbUint32_t &rCompletedWrites) noexcept
+{
+    if ( rBuffer.empty() )
+    {
+        return VmbErrorBadParameter;
+    }
+
+    return WriteMemory( rAddress, &rBuffer[0], (VmbUint32_t)rBuffer.size(), &rCompletedWrites );
+}
+
+inline VmbErrorType Camera::GetStreams(StreamPtrVector& rStreams) noexcept
+{
+    return impl::ArrayGetHelper(*this, rStreams, &Camera::GetStreams);
+}
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/CopyHelper.hpp b/VimbaX/api/include/VmbCPP/CopyHelper.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..ec350c51ee1ff09924135341da0a5f18cb386445
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/CopyHelper.hpp
@@ -0,0 +1,99 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        CopyHelper.hpp
+
+  Description: Helper functionality for copying data to a standard library
+               container.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_COPYHELPER_HPP
+#define VMBCPP_COPYHELPER_HPP
+
+#include <utility>
+#include <type_traits>
+
+#include <VmbC/VmbCommonTypes.h>
+
+/**
+* \file  CopyHelper.hpp
+*
+* \brief Inline function for copying data to standard library containers given a function
+*        with signature `VmbErrorType f(char*, VmbUint32_t&, ...)`
+*/
+
+namespace VmbCPP
+{
+
+/**
+ * \brief namespace used internally for helpers of inline functions
+ */
+namespace impl
+{
+
+/**
+ * \tparam Container the type of container to copy to (std::string, std::vector<SomeType>, ...)
+ * \tparam T the class the getter is a member of
+ */
+template<class T, class Container, class ...Args>
+inline VmbErrorType ArrayGetHelper(T& obj,
+                                    Container& out,
+                                    typename std::conditional<
+                                    std::is_const<T>::value,
+                                    VmbErrorType(T::*)(typename Container::value_type*, VmbUint32_t&, Args...) const noexcept,
+                                    VmbErrorType(T::*)(typename Container::value_type*, VmbUint32_t&, Args...) noexcept
+                                    >::type Getter,
+                                    Args ...args) noexcept
+{
+    VmbUint32_t nLength;
+
+    VmbErrorType res = (obj.*Getter)(nullptr, nLength, args...);
+    if (VmbErrorSuccess == res)
+    {
+        if (0 != nLength)
+        {
+            try
+            {
+                Container tmpName(static_cast<typename Container::size_type>(nLength), typename Container::value_type{});
+                res = (obj.*Getter)(&tmpName[0], nLength, args...);
+                if (VmbErrorSuccess == res)
+                {
+                    out = std::move(tmpName);
+                }
+            }
+            catch (...)
+            {
+                res = VmbErrorResources;
+            }
+        }
+        else
+        {
+            out.clear();
+        }
+    }
+
+    return res;
+}
+
+}}  // namespace VmbCPP::impl
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/EnumEntry.h b/VimbaX/api/include/VmbCPP/EnumEntry.h
new file mode 100644
index 0000000000000000000000000000000000000000..2c0b9a517567ae9a8d605927f5915618a0606b62
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/EnumEntry.h
@@ -0,0 +1,186 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        EnumEntry.h
+
+  Description:  Definition of class VmbCPP::EnumEntry.
+                An EnumEntry consists of
+                Name
+                DisplayName
+                Value
+                of one particular enumeration
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_ENUMENTRY_H
+#define VMBCPP_ENUMENTRY_H
+
+/**
+* \file          EnumEntry.h
+*
+* \brief         Definition of class VmbCPP::EnumEntry
+*                An EnumEntry consists of:
+*                   - Name
+*                   - DisplayName
+*                   - Value
+*                
+*                of one particular enumeration.
+*/
+
+#include <string>
+
+#include <VmbC/VmbC.h>
+
+#include "SharedPointerDefines.h"
+#include "UniquePointer.hpp"
+#include "VmbCPPCommon.h"
+
+
+namespace VmbCPP {
+
+/**
+ * \brief A class holding information about a single enum entry of a feature of type enumeration. 
+ */
+class EnumEntry final
+{
+public:
+    /**
+    * 
+    * \brief     Creates an instance of class EnumEntry
+    * 
+    * \param[in ]    pName           The name of the enum
+    * \param[in ]    pDisplayName    The declarative name of the enum
+    * \param[in ]    pDescription    The description of the enum
+    * \param[in ]    pTooltip        A tooltip that can be used by a GUI
+    * \param[in ]    pSNFCNamespace  The SFNC namespace of the enum
+    * \param[in ]    visibility      The visibility of the enum
+    * \param[in ]    value           The integer value of the enum
+    */ 
+    EnumEntry(  const char              *pName,
+                const char              *pDisplayName,
+                const char              *pDescription,
+                const char              *pTooltip,
+                const char              *pSNFCNamespace,
+                VmbFeatureVisibility_t  visibility,
+                VmbInt64_t              value);
+
+    /**
+    * \brief     Creates an instance of class EnumEntry
+    */ 
+    IMEXPORT EnumEntry();
+
+    /**
+    * \brief Creates a copy of class EnumEntry
+    */ 
+    IMEXPORT EnumEntry(const EnumEntry &other);
+    
+    /**
+     * \brief assigns EnumEntry to existing instance
+     */ 
+    IMEXPORT EnumEntry& operator=(const EnumEntry &other);
+
+    /**
+    * \brief     Destroys an instance of class EnumEntry
+    */ 
+    IMEXPORT ~EnumEntry() noexcept;
+
+    /**
+    * \brief     Gets the name of an enumeration
+    * 
+    * \param[out]    name   The name of the enumeration
+    *
+    * \returns ::VmbErrorType
+    */   
+    VmbErrorType GetName( std::string &name ) const noexcept;
+
+    /**
+    * \brief     Gets a more declarative name of an enumeration
+    * 
+    * \param[out]    displayName    The display name of the enumeration
+    *
+    * \returns ::VmbErrorType
+    */    
+    VmbErrorType GetDisplayName( std::string &displayName ) const noexcept;
+
+    /**
+    * \brief     Gets the description of an enumeration
+    * 
+    * \param[out]    description    The description of the enumeration
+    *
+    * \returns ::VmbErrorType
+    */    
+    VmbErrorType GetDescription( std::string &description ) const noexcept;
+
+    /**
+    * \brief     Gets a tooltip that can be used as pop up help in a GUI
+    * 
+    * \param[out]    tooltip    The tooltip as string
+    *
+    * \returns ::VmbErrorType
+    */    
+    VmbErrorType GetTooltip( std::string &tooltip ) const noexcept;
+
+    /**
+    * \brief     Gets the integer value of an enumeration
+    * 
+    * \param[out]    value   The integer value of the enumeration
+    *
+    * \returns ::VmbErrorType
+    */    
+    IMEXPORT    VmbErrorType GetValue( VmbInt64_t &value ) const noexcept;
+
+    /**
+    * \brief     Gets the visibility of an enumeration
+    * 
+    * \param[out]    value   The visibility of the enumeration
+    *
+    * \returns ::VmbErrorType
+    */    
+    IMEXPORT    VmbErrorType GetVisibility( VmbFeatureVisibilityType &value ) const noexcept;
+
+    /**
+    * \brief     Gets the standard feature naming convention namespace of the enumeration
+    * 
+    * \param[out]    sFNCNamespace    The feature's SFNC namespace
+    *
+    * \returns ::VmbErrorType
+    */    
+    VmbErrorType GetSFNCNamespace( std::string &sFNCNamespace ) const noexcept;
+
+private:
+    struct PrivateImpl;
+    UniquePointer<PrivateImpl>  m_pImpl;
+
+    //  Array functions to pass data across DLL boundaries
+    
+    IMEXPORT VmbErrorType GetName( char * const pName, VmbUint32_t &size ) const noexcept;
+    IMEXPORT VmbErrorType GetDisplayName( char * const pDisplayName, VmbUint32_t &size ) const noexcept;
+    IMEXPORT VmbErrorType GetTooltip( char * const pStrTooltip, VmbUint32_t &size ) const noexcept;
+    IMEXPORT VmbErrorType GetDescription( char * const pStrDescription, VmbUint32_t &size ) const noexcept;
+    IMEXPORT VmbErrorType GetSFNCNamespace( char * const pStrNamespace, VmbUint32_t &size ) const noexcept;
+
+};
+
+} // namespace VmbCPP
+
+#include "EnumEntry.hpp"
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/EnumEntry.hpp b/VimbaX/api/include/VmbCPP/EnumEntry.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..1597fa0c9fce9e10e98b8ed12cb6aeb821a7b099
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/EnumEntry.hpp
@@ -0,0 +1,70 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        EnumEntry.hpp
+
+  Description: Inline wrapper functions for class VmbCPP::EnumEntry.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_ENUMENTRY_HPP
+#define VMBCPP_ENUMENTRY_HPP
+
+/**
+* \file  EnumEntry.hpp
+*
+* \brief Inline wrapper functions for class VmbCPP::EnumEntry
+*        that allocate memory for STL objects in the application's context
+*        and to pass data across DLL boundaries using arrays
+*/
+
+#include "CopyHelper.hpp"
+
+namespace VmbCPP {
+
+inline VmbErrorType EnumEntry::GetName( std::string &rStrName ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrName, &EnumEntry::GetName);
+}
+
+inline VmbErrorType EnumEntry::GetDisplayName( std::string &rStrDisplayName ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrDisplayName, &EnumEntry::GetDisplayName);
+}
+
+inline VmbErrorType EnumEntry::GetDescription( std::string &rStrDescription ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrDescription, &EnumEntry::GetDescription);
+}
+
+inline VmbErrorType EnumEntry::GetTooltip( std::string &rStrTooltip ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrTooltip, &EnumEntry::GetTooltip);
+}
+
+inline VmbErrorType EnumEntry::GetSFNCNamespace( std::string &rStrNamespace ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrNamespace, &EnumEntry::GetSFNCNamespace);
+}
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/Feature.h b/VimbaX/api/include/VmbCPP/Feature.h
new file mode 100644
index 0000000000000000000000000000000000000000..01e5408cbad4617d55a98bd37fe01ee09a117548
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/Feature.h
@@ -0,0 +1,702 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Feature.h
+
+  Description:  Definition of base class VmbCPP::Feature.
+                This class wraps every call to BaseFeature resp. its concrete
+                subclass. That way  polymorphism is hidden away from the user.
+                
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_FEATURE_H
+#define VMBCPP_FEATURE_H
+
+/**
+* \file   Feature.h
+*
+* \brief  Definition of base class VmbCPP::Feature
+*         This class wraps every call to BaseFeature resp. its concrete
+*         subclass. That way  polymorphism is hidden away from the user.
+*/
+
+#include <cstddef>
+#include <cstring>
+#include <map>
+#include <type_traits>
+#include <vector>
+
+#include <VmbC/VmbCTypeDefinitions.h>
+
+#include "EnumEntry.h"
+#include "IFeatureObserver.h"
+#include "SharedPointerDefines.h"
+#include "VmbCPPCommon.h"
+
+struct VmbFeatureInfo;
+
+namespace VmbCPP {
+
+class BaseFeature;
+class FeatureContainer;
+
+/**
+ * \brief a type alias for a vector of shared pointers to features. 
+ */
+using FeaturePtrVector = std::vector<FeaturePtr>;
+
+/**
+ * \brief Namespace containing helper functionality for inline functions
+ *
+ * \warning The members of this namespace are intended exclusively for use
+ *          in the implementation of VmbCPP.
+ */
+namespace impl
+{
+    /**
+     * \brief A helper class for getting the underlying type of a enum type 
+     */
+    template<class T, bool isEnum>
+    struct UnderlyingTypeHelperImpl
+    {
+    };
+
+    /**
+     * \brief A helper class for getting the underlying type of a enum type
+     */
+    template<class T>
+    struct UnderlyingTypeHelperImpl<T, true>
+    {
+        /**
+         * \brief the underlying type of enum type `T` 
+         */
+        using type = typename std::underlying_type<T>::type;
+    };
+
+    /**
+     * \brief Helper class for safely detemining the underlying type of an
+     *        enum for use with SFINAE
+     * 
+     * The type provides a type alias `type` containing the underlying type, if and only if
+     * the `T` is an enum type.
+     * 
+     * \tparam T the type that is possibly an enum
+     */
+    template<class T>
+    struct UnderlyingTypeHelper : public UnderlyingTypeHelperImpl<T, std::is_enum<T>::value>
+    {
+    };
+}
+
+/**
+ * \brief Class providing access to one feature of one module. 
+ */
+class Feature final
+{
+public:
+
+    /**
+     * \brief Object is not default constructible
+     */
+    Feature() = delete;
+
+    /**
+     * \brief Object is not copy constructible
+     */
+    Feature( const Feature& ) = delete;
+
+    /**
+     * \brief Object is not copy constructible
+     */
+    Feature& operator=( const Feature& ) = delete;
+
+    /**
+    *  \brief     Queries the value of a feature of type Integer or Enumeration
+    *  
+    *  \param[out]    value       The feature's value
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetValue( VmbInt64_t &value ) const noexcept;
+    
+    /**
+    *  \brief     Queries the value of a feature of type Float
+    *  
+    *  \param[out]    value       The feature's value
+    * 
+    *  \returns ::VmbErrorType
+    */  
+    IMEXPORT    VmbErrorType GetValue( double &value ) const noexcept;
+
+    /**
+    * \brief     Queries the value of a feature of type String or Enumeration
+    * 
+    * \param[out]    value       The feature's value
+    * 
+    * \returns ::VmbErrorType
+    * 
+    */
+    VmbErrorType GetValue( std::string &value ) const noexcept;
+
+    /**
+    *  \brief     Queries the value of a feature of type Bool
+    *  
+    *  
+    *  \param[out]    value       The feature's value
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetValue( bool &value ) const noexcept;
+
+    /**
+    *  \brief     Queries the value of a feature of type Register
+    *  
+    *  \param[out]    value       The feature's value
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetValue( UcharVector &value ) const noexcept;
+
+    /**
+    *  \brief     Queries the value of a feature of type const Register
+    *  
+    *  \param[out]    value       The feature's value
+    *  \param[out]    sizeFilled  The number of actually received values
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetValue( UcharVector &value, VmbUint32_t &sizeFilled ) const noexcept;
+
+    /**
+    *  \brief     Queries the possible integer values of a feature of type Enumeration
+    *  
+    *  \param[out]    values       The feature's values
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetValues( Int64Vector &values ) noexcept;
+
+    /**
+    *  \brief     Queries the string values of a feature of type Enumeration
+    *  
+    *  \param[out]    values       The feature's values
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetValues( StringVector &values ) noexcept;
+
+    /**
+    *  \brief     Queries a single enum entry of a feature of type Enumeration
+    *  
+    *  \param[out]    entry       An enum feature's enum entry
+    *  \param[in ]    pEntryName  The name of the enum entry
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetEntry( EnumEntry &entry, const char *pEntryName ) const noexcept;
+
+    /**
+    *  \brief     Queries all enum entries of a feature of type Enumeration
+    *  
+    *  \param[out]    entries       An enum feature's enum entries
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetEntries( EnumEntryVector &entries ) noexcept;
+
+    /**
+    *  \brief     Queries the range of a feature of type Float
+    *  
+    *  \param[out]    minimum   The feature's min value
+    *  \param[out]    maximum   The feature's max value
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetRange( double &minimum, double &maximum ) const noexcept;
+
+    /**
+    *  \brief     Queries the range of a feature of type Integer
+    *  
+    *  \param[out]    minimum   The feature's min value
+    *  \param[out]    maximum   The feature's max value
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetRange( VmbInt64_t &minimum, VmbInt64_t &maximum ) const noexcept;
+
+    /**
+    *  \brief     Sets and integer or enum feature.
+    * 
+    * If the feature is an enum feature, the value set is the enum entry
+    * corresponding to the integer value.
+    * 
+    * If known, use pass the string value instead, since this is more performant.
+    *  
+    *  \param[in ]    value       The feature's value
+    * 
+    *  \returns ::VmbErrorType
+    */
+    IMEXPORT    VmbErrorType SetValue( VmbInt64_t value ) noexcept;
+
+    /**
+     * \brief Convenience function for calling SetValue(VmbInt64_t)
+     *        with an integral value without the need to cast the parameter to VmbInt64_t.
+     *
+     * Calls `SetValue(static_cast<VmbInt64_t>(value))`
+     *
+     * \tparam IntegralType an integral type other than ::VmbInt64_t
+     */
+    template<class IntegralType>
+    typename std::enable_if<std::is_integral<IntegralType>::value && !std::is_same<IntegralType, VmbInt64_t>::value, VmbErrorType>::type
+        SetValue(IntegralType value) noexcept;
+
+    /**
+     * \brief Convenience function for calling SetValue(VmbInt64_t)
+     *        with an enum value without the need to cast the parameter to VmbInt64_t.
+     *
+     * Calls `SetValue(static_cast<VmbInt64_t>(value))`
+     *
+     * \tparam EnumType an enum type that with an underlying type other than `bool`.
+     */
+    template<class EnumType>
+    typename std::enable_if<!std::is_same<bool, typename impl::UnderlyingTypeHelper<EnumType>::type>::value, VmbErrorType>::type
+        SetValue(EnumType value) noexcept;
+
+    /**
+    *  \brief     Sets the value of a feature float feature
+    *  
+    *  \param[in ]    value       The feature's value
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType SetValue( double value ) noexcept;
+
+    /**
+    *  \brief     Sets the value of a string feature or an enumeration feature.
+    *  
+    *  \param[in ]    pValue       The feature's value
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType SetValue( const char *pValue ) noexcept;
+
+    /**
+     * \brief null is not allowed as string value 
+     */
+    VmbErrorType SetValue(std::nullptr_t) noexcept = delete;
+
+    /**
+    *  \brief     Sets the value of a feature of type Bool
+    *  
+    *  \param[in ]    value       The feature's value
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType SetValue( bool value ) noexcept;
+
+    /**
+    *  \brief     Sets the value of a feature of type Register
+    *  
+    *  \param[in ]    value       The feature's value
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType SetValue( const UcharVector &value ) noexcept;
+
+    /**
+    *  \brief     Checks, if a Float or Integer feature provides an increment.
+    * 
+    * Integer features are always assumed to provide an incement, even if it defaults to 0.
+    *  
+    *  \param[out]    incrementSupported       The feature's increment support state
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType HasIncrement( VmbBool_t &incrementSupported ) const noexcept;
+
+
+    /**
+    *  \brief     Gets the increment of a feature of type Integer
+    *  
+    *  \param[out]    increment       The feature's increment
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetIncrement( VmbInt64_t &increment ) const noexcept;
+
+    /**
+    *  \brief     Gets the increment of a feature of type Float
+    *  
+    *  \param[out]    increment       The feature's increment
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetIncrement( double &increment ) const noexcept;
+
+    /**
+    *  \brief     Indicates whether an existing enumeration value is currently available.
+    * 
+    * An enumeration value might not be available due to the module's
+    * current configuration.
+    *  
+    *  \param[in ]        pValue      The enumeration value as string
+    *  \param[out]        available   True when the given value is available
+    *  
+    *  \returns ::VmbErrorType
+    *  
+    *  \retval ::VmbErrorSuccess        If no error
+    *  \retval ::VmbErrorInvalidValue   If the given value is not a valid enumeration value for this enum
+    *  \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    *  \retval ::VmbErrorInvalidAccess  Operation is invalid with the current access mode
+    *  \retval ::VmbErrorWrongType      The feature is not an enumeration
+    */  
+    IMEXPORT    VmbErrorType IsValueAvailable( const char *pValue, bool &available ) const noexcept;
+
+    /**
+     * \brief Searching for an enum entry given the null string is not allowed 
+     */
+    VmbErrorType IsValueAvailable( std::nullptr_t, bool&) const noexcept = delete;
+
+    /**
+    *  \brief     Indicates whether an existing enumeration value is currently available.
+    * 
+    * An enumeration value might not be selectable due to the module's
+    * current configuration.
+    *  
+    *  \param[in ]        value       The enumeration value as int
+    *  \param[out]        available   True when the given value is available
+    *  
+    *  \returns ::VmbErrorType
+    *  
+    *  \retval ::VmbErrorSuccess        If no error
+    *  \retval ::VmbErrorInvalidValue   If the given value is not a valid enumeration value for this enum
+    *  \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    *  \retval ::VmbErrorInvalidAccess  Operation is invalid with the current access mode
+    *  \retval ::VmbErrorWrongType      The feature is not an enumeration
+    */  
+    IMEXPORT    VmbErrorType IsValueAvailable( VmbInt64_t value, bool &available ) const noexcept;
+
+    /**
+    *  
+    *  \brief     Executes a feature of type Command
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType RunCommand() noexcept;
+
+    /**
+    *  
+    *  \brief     Checks if the execution of a feature of type Command has finished
+    *  
+    *  \param[out]    isDone     True when execution has finished
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType IsCommandDone( bool &isDone ) const noexcept;
+
+    /**
+    *  \brief     Queries a feature's name
+    * 
+    * \note The feature name does not change during the lifecycle of the object.
+    *  
+    * \param[out]    name    The feature's name
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess
+    * \retval ::VmbErrorResources
+    */ 
+    VmbErrorType GetName( std::string &name ) const noexcept;
+
+    /**
+    *  \brief     Queries a feature's display name
+    * 
+    * \note The display name does not change during the lifecycle of the object.
+    * 
+    *  \param[out]    displayName    The feature's display name
+    * 
+    *  \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess
+    * \retval ::VmbErrorResources
+    */ 
+    VmbErrorType GetDisplayName( std::string &displayName ) const noexcept;
+
+    /**
+    * \brief     Queries a feature's type
+    *  
+    * \note The feature type does not change during the lifecycle of the object.
+    * 
+    * \param[out]    dataType    The feature's type
+    * 
+    * \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetDataType( VmbFeatureDataType &dataType ) const noexcept;
+
+    /** 
+    * \brief     Queries a feature's access status
+    * 
+    * The access to the feature may change depending on the state of the module.
+    * 
+    *  \param[out]    flags    The feature's access status
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetFlags( VmbFeatureFlagsType &flags ) const noexcept;
+
+    /**
+    *  \brief     Queries a feature's category in the feature tree
+    * 
+    * \note The category does not change during the lifecycle of the object.
+    *  
+    *  \param[out]    category    The feature's position in the feature tree
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetCategory( std::string &category ) const noexcept;
+
+    /**
+    *  \brief     Queries a feature's polling time
+    *  
+    *  \param[out]    pollingTime    The interval to poll the feature
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetPollingTime( VmbUint32_t &pollingTime ) const noexcept;
+
+    /**
+    *  \brief     Queries a feature's unit
+    *
+    * \note The display name does not change during the lifecycle of the object.
+    * 
+    * Information about the unit used is only available for features of type Integer or Float.
+    * For other feature types the empty string is returned.
+    * 
+    *  \param[out]    unit    The feature's unit
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetUnit( std::string &unit ) const noexcept;
+
+    /**
+    *  \brief     Queries a feature's representation
+    *
+    * \note The representation does not change during the lifecycle of the object.
+    * 
+    * Information about the representation used is only available for features of type Integer or Float.
+    * For other feature types the empty string is returned.
+    * 
+    *  \param[out]    representation    The feature's representation
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetRepresentation( std::string &representation ) const noexcept;
+
+    /**
+    *  \brief     Queries a feature's visibility
+    * 
+    * \note The visibiliry does not change during the lifecycle of the object.
+    * 
+    *  \param[out]    visibility    The feature's visibility
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType GetVisibility( VmbFeatureVisibilityType &visibility ) const noexcept;
+
+    /**
+    *  \brief     Queries a feature's tooltip to display in the GUI
+    * 
+    * \note The tooltip does not change during the lifecycle of the object.
+    *  
+    *  \param[out]    toolTip    The feature's tool tip
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetToolTip( std::string &toolTip ) const noexcept;
+
+    /**
+    *  \brief     Queries a feature's description
+    *
+    * \note The description does not change during the lifecycle of the object.
+    * 
+    *  \param[out]    description    The feature's description
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetDescription( std::string &description ) const noexcept;
+
+    /**
+    *  \brief     Queries a feature's Standard Feature Naming Convention namespace
+    * 
+    * \note The namespace does not change during the lifecycle of the object.
+    * 
+    *  \param[out]    sFNCNamespace    The feature's SFNC namespace
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetSFNCNamespace( std::string &sFNCNamespace ) const noexcept;
+
+    /**
+    *  \brief     Gets the features that get selected by the current feature
+    *
+    * \note The selected features do not change during the lifecycle of the object.
+    * 
+    * \param[out]    selectedFeatures    The selected features
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    VmbErrorType GetSelectedFeatures( FeaturePtrVector &selectedFeatures ) noexcept;
+
+
+    /**
+    * \brief Retrieves info about the valid value set of an integer feature. Features of other types will retrieve an error ::VmbErrorWrongType.
+    * 
+    * \note Only some specific integer features support valid value sets.
+    * 
+    * \param[out]   validValues                  Vector of int64, after the call it contains the valid value set.
+    * 
+    *
+    * \return An error code indicating success or the type of error that occured.
+    *
+    * \retval ::VmbErrorSuccess                        The call was successful 
+    *
+    * \retval ::VmbErrorApiNotStarted                  ::VmbStartup() was not called before the current command
+    *
+    * \retval ::VmbErrorBadHandle                      The current feature handle is not valid
+    *
+    * \retval ::VmbErrorWrongType                      The type of the feature is not Integer
+    *
+    * \retval ::VmbErrorValidValueSetNotPresent        The feature does not provide a valid value set
+    * 
+    * \retval ::VmbErrorResources                      Resources not available (e.g. memory)
+    *
+    * \retval ::VmbErrorOther                          Some other issue occured
+    */
+    VmbErrorType GetValidValueSet(Int64Vector& validValues) const noexcept;
+
+    /**
+    *  \brief     Queries the read access status of a feature
+    *  
+    *  \param[out]    isReadable    True when feature can be read
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType IsReadable( bool &isReadable ) noexcept;
+
+    /**
+    *  
+    *  \brief     Queries the write access status of a feature
+    *  
+    *  \param[out]    isWritable    True when feature can be written
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType IsWritable( bool &isWritable ) noexcept;
+
+    /**
+    *  \brief     Queries whether a feature's should be persisted to store the state of a module.
+    * 
+    * \note The information does not change during the lifecycle of the object.
+    *  
+    *  \param[out]    isStreamable    True when streamable
+    * 
+    *  \returns ::VmbErrorType
+    */ 
+    IMEXPORT    VmbErrorType IsStreamable( bool &isStreamable ) const noexcept;
+
+    /**
+    *  \brief     Registers an observer that notifies the application whenever a feature is invalidated
+    * 
+    * \note A feature may be invalidated even though the value hasn't changed. A notification of the observer
+    *       just provides a notification that the value needs to be reread, to be sure the current module value
+    *       is known.
+    *  
+    *  \param[out]    pObserver    The observer to be registered
+    *  
+    *  \returns ::VmbErrorType
+    *  
+    *  \retval ::VmbErrorSuccess        If no error
+    *  \retval ::VmbErrorBadParameter   \p pObserver is null.
+    *  \retval ::VmbErrorAlready        \p pObserver is already registered
+    *  \retval ::VmbErrorDeviceNotOpen  Device is not open (FeatureContainer is null)
+    *  \retval ::VmbErrorInvalidCall    If called from a chunk access callback
+    *  \retval ::VmbErrorInvalidAccess  Operation is invalid with the current access mode
+    */  
+    IMEXPORT    VmbErrorType RegisterObserver( const IFeatureObserverPtr &pObserver );
+
+    /**
+    *  \brief     Unregisters an observer
+    *  
+    *  \param[out]    pObserver    The observer to be unregistered
+    *  
+    *  \returns ::VmbErrorType
+    *  
+    *  \retval ::VmbErrorSuccess        If no error
+    *  \retval ::VmbErrorBadParameter   \p pObserver is null.
+    *  \retval ::VmbErrorUnknown        \p pObserver is not registered
+    *  \retval ::VmbErrorDeviceNotOpen  Device is not open (FeatureContainer is null)
+    *  \retval ::VmbErrorInvalidCall    If called from a chunk access callback
+    *  \retval ::VmbErrorInvalidAccess  Operation is invalid with the current access mode
+    *  \retval ::VmbErrorInternalFault  Could not lock feature observer list for writing.
+    */  
+    IMEXPORT    VmbErrorType UnregisterObserver( const IFeatureObserverPtr &pObserver );
+
+
+private:
+    Feature(const VmbFeatureInfo& pFeatureInfo, FeatureContainer& pFeatureContainer);
+    ~Feature();
+
+    friend class FeatureContainer;
+    friend SharedPointer<Feature>;
+
+    void ResetFeatureContainer();
+
+    BaseFeature *m_pImpl;
+
+    //   Array functions to pass data across DLL boundaries
+    IMEXPORT    VmbErrorType GetValue( char * const pValue, VmbUint32_t &length ) const noexcept;
+    IMEXPORT    VmbErrorType GetValue( VmbUchar_t *pValue, VmbUint32_t &size, VmbUint32_t &sizeFilled ) const noexcept;
+    IMEXPORT    VmbErrorType GetValues( const char **pValues, VmbUint32_t &size ) noexcept;
+    IMEXPORT    VmbErrorType GetValues( VmbInt64_t *pValues, VmbUint32_t &Size ) noexcept;
+
+    IMEXPORT    VmbErrorType GetEntries( EnumEntry *pEnumEntries, VmbUint32_t &size ) noexcept;
+
+    IMEXPORT    VmbErrorType SetValue( const VmbUchar_t *pValue, VmbUint32_t size ) noexcept;
+
+    IMEXPORT    VmbErrorType GetName( char * const pName, VmbUint32_t &length ) const noexcept;
+    IMEXPORT    VmbErrorType GetDisplayName( char * const pDisplayName, VmbUint32_t &length ) const noexcept;
+    IMEXPORT    VmbErrorType GetCategory( char * const pCategory, VmbUint32_t &length ) const noexcept;
+    IMEXPORT    VmbErrorType GetUnit( char * const pUnit, VmbUint32_t &length ) const noexcept;
+    IMEXPORT    VmbErrorType GetRepresentation( char * const pRepresentation, VmbUint32_t &length ) const noexcept;
+    IMEXPORT    VmbErrorType GetToolTip( char * const pToolTip, VmbUint32_t &length ) const noexcept;
+    IMEXPORT    VmbErrorType GetDescription( char * const pDescription, VmbUint32_t &length ) const noexcept;
+    IMEXPORT    VmbErrorType GetSFNCNamespace( char * const pSFNCNamespace, VmbUint32_t &length ) const noexcept;
+    IMEXPORT    VmbErrorType GetSelectedFeatures( FeaturePtr *pSelectedFeatures, VmbUint32_t &nSize ) noexcept;
+    IMEXPORT    VmbErrorType GetValidValueSet(VmbInt64_t* buffer, VmbUint32_t bufferSize, VmbUint32_t* setSize) const noexcept;
+};
+
+
+} // namespace VmbCPP
+
+#include "Feature.hpp"
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/Feature.hpp b/VimbaX/api/include/VmbCPP/Feature.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..ec44daeebf5b786b5cc7cb27bb16946e9880b68c
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/Feature.hpp
@@ -0,0 +1,298 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Feature.hpp
+
+  Description: Inline wrapper functions for class VmbCPP::Feature.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_FEATURE_HPP
+#define VMBCPP_FEATURE_HPP
+
+/**
+* \file  Feature.hpp
+*
+* \brief Inline wrapper functions for class VmbCPP::Feature
+*        that allocate memory for STL objects in the application's context
+*        and to pass data across DLL boundaries using arrays
+*/
+#include <utility>
+
+#include "CopyHelper.hpp"
+
+namespace VmbCPP {
+
+inline VmbErrorType Feature::GetValues( StringVector &rValues ) noexcept
+{
+    VmbErrorType    res;
+    VmbUint32_t     nSize;
+
+    res = GetValues(static_cast<const char **>(nullptr), nSize);
+    if (VmbErrorSuccess == res)
+    {
+        if ( 0 != nSize)
+        {
+            try
+            {
+                std::vector<const char*> data(nSize);
+                res = GetValues(&data[0], nSize);
+
+                if (VmbErrorSuccess == res)
+                {
+                    data.resize(nSize);
+                    StringVector tmpValues(data.size());
+                    std::copy(data.begin(), data.end(), tmpValues.begin());
+                    rValues = std::move(tmpValues);
+                }
+            }
+            catch(...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            rValues.clear();
+        }
+    }
+
+    return res;
+}
+
+inline VmbErrorType Feature::GetEntries( EnumEntryVector &rEntries ) noexcept
+{
+    VmbUint32_t     nSize;
+
+    VmbErrorType res = GetEntries(static_cast<EnumEntry*>(nullptr), nSize);
+    if ( VmbErrorSuccess == res )
+    {
+        if( 0 != nSize )
+        {
+            try
+            {
+                EnumEntryVector tmpEntries( nSize );
+                res = GetEntries( &tmpEntries[0], nSize );
+                if( VmbErrorSuccess == res)
+                {
+                    tmpEntries.resize(nSize);
+                    rEntries = std::move(tmpEntries);
+                }
+            }
+            catch(...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            rEntries.clear();
+        }
+    }
+
+    return res;
+}
+
+inline VmbErrorType Feature::GetValues(Int64Vector &rValues) noexcept
+{
+    return impl::ArrayGetHelper(*this, rValues, &Feature::GetValues);
+}
+
+inline VmbErrorType Feature::GetValue( std::string &rStrValue ) const noexcept
+{
+    std::string tmpStr;
+    VmbErrorType res = impl::ArrayGetHelper(*this, tmpStr, &Feature::GetValue);
+    rStrValue = tmpStr.c_str();
+    return res;
+}
+
+inline VmbErrorType Feature::GetValue( UcharVector &rValue ) const noexcept
+{
+    VmbUint32_t i;
+    return GetValue( rValue, i );
+}
+
+inline VmbErrorType Feature::GetValue( UcharVector &rValue, VmbUint32_t &rnSizeFilled ) const noexcept
+{
+    VmbErrorType    res;
+    VmbUint32_t     nSize;
+
+    res = GetValue( nullptr, nSize, rnSizeFilled );
+    if ( VmbErrorSuccess == res )
+    {
+        if( 0 != nSize)
+        {
+            try
+            {
+                UcharVector tmpValue( nSize );
+                res = GetValue( &tmpValue[0], nSize, rnSizeFilled );
+                if( VmbErrorSuccess == res )
+                {
+                    rValue.swap( tmpValue);
+                }
+            }
+            catch(...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            rValue.clear();
+        }
+    }
+
+    return res;
+}
+
+template<class IntegralType>
+inline
+typename std::enable_if<std::is_integral<IntegralType>::value && !std::is_same<IntegralType, VmbInt64_t>::value, VmbErrorType>::type
+Feature::SetValue(IntegralType value) noexcept
+{
+    return SetValue(static_cast<VmbInt64_t>(value));
+}
+
+template<class EnumType>
+inline
+typename std::enable_if<!std::is_same<bool, typename impl::UnderlyingTypeHelper<EnumType>::type>::value, VmbErrorType>::type
+Feature::SetValue(EnumType value) noexcept
+{
+    return SetValue(static_cast<VmbInt64_t>(value));
+}
+
+inline VmbErrorType Feature::SetValue( const UcharVector &rValue ) noexcept
+{
+    if ( rValue.empty() )
+    {
+        return VmbErrorBadParameter;
+    }
+    return SetValue(&rValue[0], static_cast<VmbUint32_t>(rValue.size()));
+}
+
+inline VmbErrorType Feature::GetName( std::string &rStrName ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrName, &Feature::GetName);
+}
+
+inline VmbErrorType Feature::GetDisplayName( std::string &rStrDisplayName ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrDisplayName, &Feature::GetDisplayName);
+}
+
+inline VmbErrorType Feature::GetCategory( std::string &rStrCategory ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrCategory, &Feature::GetCategory);
+}
+
+inline VmbErrorType Feature::GetUnit( std::string &rStrUnit ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrUnit, &Feature::GetUnit);
+}
+
+inline VmbErrorType Feature::GetRepresentation( std::string &rStrRepresentation ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrRepresentation, &Feature::GetRepresentation);
+}
+
+inline VmbErrorType Feature::GetToolTip( std::string &rStrToolTip ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrToolTip, &Feature::GetToolTip);
+}
+
+inline VmbErrorType Feature::GetDescription( std::string &rStrDescription ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrDescription, &Feature::GetDescription);
+}
+
+inline VmbErrorType Feature::GetSFNCNamespace( std::string &rStrSFNCNamespace ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrSFNCNamespace, &Feature::GetSFNCNamespace);
+}
+
+inline VmbErrorType Feature::GetValidValueSet(Int64Vector& validValues) const noexcept
+{
+    VmbUint32_t nSize = 0;
+    VmbErrorType res = GetValidValueSet(nullptr, 0, &nSize);
+    
+    if (VmbErrorSuccess == res)
+    {
+        if (0 != nSize)
+        {
+            try
+            {
+                Int64Vector tmpValues(nSize);
+                res = GetValidValueSet(&tmpValues[0], static_cast<VmbUint32_t>(tmpValues.size()), &nSize);
+                if (VmbErrorSuccess == res)
+                {
+                    validValues.swap(tmpValues);
+                }
+            }
+            catch (...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            validValues.clear();
+        }
+    }
+
+    return res;
+}
+
+inline VmbErrorType Feature::GetSelectedFeatures( FeaturePtrVector &rSelectedFeatures ) noexcept
+{
+    VmbErrorType    res;
+    VmbUint32_t     nSize;
+
+    res = GetSelectedFeatures( nullptr, nSize );
+    if ( VmbErrorSuccess == res )
+    {
+        if( 0 != nSize )
+        {
+            try
+            {
+                FeaturePtrVector tmpSelectedFeatures( nSize );
+                res = GetSelectedFeatures( &tmpSelectedFeatures[0], nSize );
+                if( VmbErrorSuccess == res )
+                {
+                    rSelectedFeatures.swap ( tmpSelectedFeatures );
+                }
+            }
+            catch(...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            rSelectedFeatures.clear();
+        }
+    }
+
+    return res;
+}
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/FeatureContainer.h b/VimbaX/api/include/VmbCPP/FeatureContainer.h
new file mode 100644
index 0000000000000000000000000000000000000000..fc3116a131eb40835e89d084f2cc749e5bc8c3ee
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/FeatureContainer.h
@@ -0,0 +1,143 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        FeatureContainer.h
+
+  Description: Definition of class VmbCPP::FeatureContainer.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_FEATURECONTAINER_H
+#define VMBCPP_FEATURECONTAINER_H
+
+/**
+* \file  FeatureContainer.h
+*
+* \brief Definition of class VmbCPP::FeatureContainer.
+*/
+
+#include <cstddef>
+
+#include <VmbC/VmbCommonTypes.h>
+
+#include "BasicLockable.h"
+#include "Feature.h"
+#include "SharedPointerDefines.h"
+#include "UniquePointer.hpp"
+#include "VmbCPPCommon.h"
+
+
+namespace VmbCPP {
+
+/**
+ * \brief A entity providing access to a set of features
+ */
+class FeatureContainer : protected virtual BasicLockable
+{
+public:
+
+    /**  
+    *  \brief     Creates an instance of class FeatureContainer
+    */  
+    IMEXPORT FeatureContainer();
+
+    /**
+     * \brief Object is non-copyable
+     */
+    FeatureContainer( const FeatureContainer& ) = delete;
+
+    /**
+     * \brief Object is non-copyable
+     */
+    FeatureContainer& operator=( const FeatureContainer& ) = delete;
+
+    /**
+    *  \brief     Destroys an instance of class FeatureContainer
+    */  
+    IMEXPORT ~FeatureContainer();
+
+    /**
+    *  \brief     Gets one particular feature of a feature container (e.g. a camera)
+    *  
+    *  \param[in ]    pName               The name of the feature to get
+    *  \param[out]    pFeature            The queried feature
+    *  
+    *  \returns ::VmbErrorType
+    *  
+    *  \retval ::VmbErrorSuccess           If no error
+    *  \retval ::VmbErrorDeviceNotOpen     Base feature class (e.g. Camera) was not opened.
+    *  \retval ::VmbErrorBadParameter      \p pName is null.
+    */  
+    IMEXPORT VmbErrorType GetFeatureByName( const char *pName, FeaturePtr &pFeature );
+
+    /**
+     * \brief the feature name must be non-null 
+     */
+    VmbErrorType GetFeatureByName(std::nullptr_t, FeaturePtr&) = delete;
+    
+    /**
+    *  \brief     Gets all features of a feature container (e.g. a camera)
+    * 
+    * Once queried, this information remains static throughout the object's lifetime
+    *  
+    *  \param[out]    features        The container for all queried features
+    *  
+    *  \returns ::VmbErrorType
+    *  
+    *  \retval ::VmbErrorSuccess        If no error
+    *  \retval ::VmbErrorBadParameter   \p features is empty.
+    */  
+    VmbErrorType GetFeatures( FeaturePtrVector &features );
+
+    /**
+     * \brief Gets the handle used for this container by the Vmb C API. 
+     */
+    VmbHandle_t GetHandle() const noexcept;
+
+  protected:
+    /**
+    * \brief    Sets the C handle of a feature container
+    */
+    IMEXPORT void SetHandle( const VmbHandle_t handle );
+    
+    /**
+    * \brief    Sets the C handle of a feature container to null
+    */
+    void RevokeHandle() noexcept;
+    
+    /**
+    * \brief    Sets the back reference to feature container that each feature holds to null and resets all known features
+    */
+    void Reset();
+  private:
+    struct Impl;
+    UniquePointer<Impl> m_pImpl;
+
+    IMEXPORT VmbErrorType GetFeatures( FeaturePtr *pFeatures, VmbUint32_t &size );
+
+};
+
+
+} // namespace VmbCPP
+
+#include "FeatureContainer.hpp"
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/FeatureContainer.hpp b/VimbaX/api/include/VmbCPP/FeatureContainer.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..069966e03eed86649ae99ff539e10dfe6e43d004
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/FeatureContainer.hpp
@@ -0,0 +1,78 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        FeatureContainer.hpp
+
+  Description: Inline wrapper functions for class 
+               VmbCPP::FeatureContainer.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_FEATURECONTAINER_HPP
+#define VMBCPP_FEATURECONTAINER_HPP
+
+/**
+* \file  FeatureContainer.hpp
+*
+* \brief Inline wrapper functions for class VmbCPP::FeatureContainer
+*        that allocate memory for STL objects in the application's context
+*        and to pass data across DLL boundaries using arrays
+*/
+
+namespace VmbCPP {
+
+// HINT: Once queried this information remains static throughout the object's lifetime
+inline VmbErrorType FeatureContainer::GetFeatures( FeaturePtrVector &features )
+{
+    VmbErrorType    res;
+    VmbUint32_t     nSize;
+
+    res = GetFeatures( nullptr, nSize );
+    if (    VmbErrorSuccess == res )
+    {
+        if( 0 != nSize)
+        {
+            try
+            {
+                FeaturePtrVector tmpFeatures( nSize );
+                res = GetFeatures( &tmpFeatures[0], nSize );
+                if( VmbErrorSuccess == res)
+                {
+                    features.swap( tmpFeatures );
+                }
+            }
+            catch(...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            features.clear();
+        }
+    }
+
+    return res;
+}
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/FileLogger.h b/VimbaX/api/include/VmbCPP/FileLogger.h
new file mode 100644
index 0000000000000000000000000000000000000000..bd3d4735a50a6914acade446031338cdf0d8c640
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/FileLogger.h
@@ -0,0 +1,94 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        FileLogger.h
+
+  Description: Definition of class VmbCPP::FileLogger.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_FILELOGGER_H
+#define VMBCPP_FILELOGGER_H
+
+/**
+* \file        FileLogger.h
+*
+* \brief Definition of class VmbCPP::FileLogger.
+*/
+
+#include <cstddef>
+#include <string>
+#include <fstream>
+
+#include "VmbCPPConfig/config.h"
+
+#include <VmbCPP/SharedPointerDefines.h>
+#include <VmbCPP/Mutex.h>
+
+
+namespace VmbCPP {
+
+/**
+ * \brief A logger implementation logging to a file. 
+ */
+class FileLogger
+{
+public:
+    /**
+     * \param[in] pFileName     the file name of the log file
+     * \param[in] append        determines, if the contents of an existing file are kept or not
+     */
+    FileLogger( const char *pFileName, bool append = true );
+
+    /**
+     * \brief Object is not copyable
+     */
+    FileLogger(const FileLogger&) = delete;
+
+    /**
+     * \brief Object is not copyable
+     */
+    FileLogger& operator=(const FileLogger&) = delete;
+
+    /**
+     * \brief null is not allowed as file name 
+     */
+    FileLogger(std::nullptr_t, bool) = delete;
+
+    virtual ~FileLogger();
+
+    /**
+     * \brief Log the time and \p StrMessage to the file
+     * 
+     * \param[in] StrMessage the message to log
+     */
+    void Log( const std::string &StrMessage );
+
+private:
+    std::ofstream   m_File;
+    MutexPtr        m_pMutex;
+
+    std::string GetTemporaryDirectoryPath();
+};
+
+} //namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/Frame.h b/VimbaX/api/include/VmbCPP/Frame.h
new file mode 100644
index 0000000000000000000000000000000000000000..212b07cec185d99b40ed854e57fe64b3b7c57129
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/Frame.h
@@ -0,0 +1,324 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Frame.h
+
+  Description: Definition of class VmbCPP::Frame.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_FRAME_H
+#define VMBCPP_FRAME_H
+
+/**
+* \file  Frame.h
+*
+* \brief Definition of class VmbCPP::Frame.
+*/
+
+#include <functional>
+#include <vector>
+
+#include <VmbC/VmbCommonTypes.h>
+
+#include "FeatureContainer.h"
+#include "IFrameObserver.h"
+#include "SharedPointerDefines.h"
+#include "UniquePointer.hpp"
+#include "VmbCPPCommon.h"
+
+struct VmbFrame;
+
+namespace VmbCPP {
+
+/**
+ * \brief UniquePointer to a FeatureContainer for Chunk access
+ */
+using ChunkFeatureContainerPtr = UniquePointer<FeatureContainer>;
+
+// forward declarations for befriending
+class Camera;
+class Stream;
+
+/**
+ * \brief An object representing a data buffer that can be filled by acquiring data from a camera. 
+ */
+class Frame 
+{
+  friend class Stream;
+  friend class Camera;
+
+  public:
+
+    /**
+    * \brief Type for an std::function for accessing ChunkData via a FeatureContainer
+    */
+    typedef std::function<VmbErrorType(ChunkFeatureContainerPtr&)> ChunkDataAccessFunction;
+
+    /** 
+    * 
+    * \brief     Creates an instance of class Frame of a certain size and memory alignment
+    * 
+    * \param[in ]   bufferSize          The size of the underlying buffer
+    * \param[in ]   allocationMode      Indicates if announce frame or alloc and announce frame is used
+    * \param[in ]   bufferAlignment     The alignment that needs to be satisfied for the frame buffer allocation
+    */ 
+    IMEXPORT explicit Frame( VmbInt64_t bufferSize, FrameAllocationMode allocationMode = FrameAllocation_AnnounceFrame, VmbUint32_t bufferAlignment = 1);
+
+    /** 
+    * 
+    * \brief     Creates an instance of class Frame with the given user buffer of the given size
+    * 
+    * \param[in ]   pBuffer     A pointer to an allocated buffer
+    * \param[in ]   bufferSize  The size of the underlying buffer
+    */ 
+    IMEXPORT Frame( VmbUchar_t *pBuffer, VmbInt64_t bufferSize );
+
+    /** 
+    * 
+    * \brief     Destroys an instance of class Frame
+    */ 
+    IMEXPORT ~Frame();
+
+    /** 
+    * 
+    * \brief     Registers an observer that will be called whenever a new frame arrives.
+    *            As new frames arrive, the observer's FrameReceived method will be called.
+    *            Only one observer can be registered.
+    * 
+    * \param[in ]   pObserver   An object that implements the IObserver interface
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    * \retval ::VmbErrorBadParameter  \p pObserver is null.
+    * \retval ::VmbErrorResources     The observer was in use
+    */ 
+    IMEXPORT VmbErrorType RegisterObserver( const IFrameObserverPtr &pObserver );
+
+    /** 
+    * 
+    * \brief     Unregisters the observer that was called whenever a new frame arrived
+    */ 
+    IMEXPORT VmbErrorType UnregisterObserver();
+
+    /** 
+    * 
+    * \brief     Returns the complete buffer including image and chunk data
+    * 
+    * \param[out]   pBuffer        A pointer to the buffer
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetBuffer( VmbUchar_t* &pBuffer );
+
+    /** 
+    * 
+    * \brief     Returns the complete buffer including image and chunk data
+    * 
+    * \param[out]   pBuffer  A pointer to the buffer
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetBuffer( const VmbUchar_t* &pBuffer ) const;
+
+    /** 
+    * 
+    * \brief     Returns only the image data
+    * 
+    * \param[out]   pBuffer     A pointer to the buffer
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetImage( VmbUchar_t* &pBuffer );
+
+    /** 
+    * \brief     Returns the pointer to the first byte of the image data
+    * 
+    * \param[out]   pBuffer    A pointer to the buffer
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetImage( const VmbUchar_t* &pBuffer ) const;
+
+    /**
+    * \brief     Returns the receive status of a frame
+    * 
+    * \param[out]   status    The receive status
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetReceiveStatus( VmbFrameStatusType &status ) const;
+
+    /**
+    * \brief     Returns the payload type of a frame
+    *
+    * \param[out]   payloadType    The payload type
+    *
+    * \returns ::VmbErrorType
+    *
+    * \retval ::VmbErrorSuccess       If no error
+    */
+    IMEXPORT VmbErrorType GetPayloadType(VmbPayloadType& payloadType) const;
+
+    /**
+    * \brief     Returns the memory size of the frame buffer holding
+    * 
+    * both the image data and the chunk data
+    * 
+    * \param[out]   bufferSize      The size in bytes
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetBufferSize( VmbUint32_t &bufferSize ) const;
+
+    /**
+    * \brief     Returns the GenICam pixel format
+    * 
+    * \param[out]   pixelFormat    The GenICam pixel format
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetPixelFormat( VmbPixelFormatType &pixelFormat ) const;
+
+    /**
+    * \brief     Returns the width of the image
+    * 
+    * \param[out]   width       The width in pixels
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetWidth( VmbUint32_t &width ) const;
+
+    /**
+    * \brief     Returns the height of the image
+    * 
+    * \param[out]   height       The height in pixels
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetHeight( VmbUint32_t &height ) const;
+
+    /** 
+    * \brief     Returns the X offset of the image
+    * 
+    * \param[out]   offsetX     The X offset in pixels
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetOffsetX( VmbUint32_t &offsetX ) const;
+
+    /** 
+    * \brief     Returns the Y offset of the image
+    * 
+    * \param[out]   offsetY     The Y offset in pixels
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetOffsetY( VmbUint32_t &offsetY ) const;
+
+    /** 
+    * \brief     Returns the frame ID
+    * 
+    * \param[out]   frameID    The frame ID
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetFrameID( VmbUint64_t &frameID ) const;
+
+    /** 
+    * \brief     Returns the timestamp
+    * 
+    * \param[out]   timestamp  The timestamp
+    * 
+    * \returns ::VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess       If no error
+    */ 
+    IMEXPORT VmbErrorType GetTimestamp( VmbUint64_t &timestamp ) const;
+
+    /**
+    * \brief     Access the frame's chunk data via a FeatureContainerPtr.
+    * 
+    * \note Chunk data can be accessed only in the scope of the given ChunkDataAccessFunction.
+    *
+    * \param[in]   chunkAccessFunction  Callback for Chunk data access
+    *
+    * \returns ::VmbErrorType
+    *
+    * \retval ::VmbErrorSuccess       If no error
+    */
+    VmbErrorType AccessChunkData(ChunkDataAccessFunction chunkAccessFunction);
+
+    /**
+     * \brief Getter for the frame observer.
+     * 
+     * \param[out] observer     the frame observer pointer to write the retrieved observer to.
+     * 
+     * \return True, if there was a non-null observer to retrieve, false otherwise.
+     */
+    bool GetObserver( IFrameObserverPtr &observer ) const;
+
+    ///  No default ctor
+    Frame() = delete;
+    ///  No copy ctor
+    Frame(Frame&) = delete;
+    ///  No assignment operator
+    Frame& operator=(const Frame&) = delete;
+
+  private:
+    struct Impl;
+    UniquePointer<Impl> m_pImpl;
+
+    static VmbError_t InternalChunkDataAccessCallback(VmbHandle_t featureAccessHandle, void* userContext);
+    IMEXPORT VmbErrorType GetFrameStruct(VmbFrame*& frame);
+    IMEXPORT VmbErrorType ChunkDataAccess(const VmbFrame* frame, VmbChunkAccessCallback chunkAccessCallback, void* userContext);
+};
+
+} // namespace VmbCPP
+
+#include <VmbCPP/Frame.hpp>
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/Frame.hpp b/VimbaX/api/include/VmbCPP/Frame.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..ad312a1ab83698d4efd72a18c2699c266d353ade
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/Frame.hpp
@@ -0,0 +1,73 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Frame.hpp
+
+  Description: Inline wrapper functions for class VmbCPP::Frame.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_FRAME_HPP
+#define VMBCPP_FRAME_HPP
+
+/**
+* \file  Frame.hpp
+*
+* \brief Inline wrapper functions for class VmbCPP::Frame
+*        that allocate memory for STL objects in the application's context
+*        and to pass data across DLL boundaries using arrays
+*/
+
+namespace VmbCPP {
+
+inline VmbErrorType Frame::AccessChunkData(ChunkDataAccessFunction chunkAccessFunction)
+{
+    VmbFrame_t* frame;
+    if (VmbErrorSuccess == GetFrameStruct(frame))
+    {
+        return ChunkDataAccess(frame, InternalChunkDataAccessCallback, &chunkAccessFunction);
+    }
+    else
+    {
+        return static_cast<VmbErrorType>(VmbErrorInternalFault);
+    }
+}
+
+inline VmbError_t Frame::InternalChunkDataAccessCallback(VmbHandle_t featureAccessHandle, void* userContext)
+{    
+    class ChunkFeatureContainer : public FeatureContainer
+    {
+    public:
+        ChunkFeatureContainer(const VmbHandle_t handle)
+        {
+            FeatureContainer::SetHandle(handle);
+        };
+    };
+    
+    ChunkFeatureContainerPtr chunkFeatureContainer(new ChunkFeatureContainer(featureAccessHandle));
+
+    auto chunkFunction = static_cast<ChunkDataAccessFunction*>(userContext);
+    return (*chunkFunction)(chunkFeatureContainer);
+}
+
+} // namespace VmbCPP
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/include/VmbCPP/ICameraFactory.h b/VimbaX/api/include/VmbCPP/ICameraFactory.h
new file mode 100644
index 0000000000000000000000000000000000000000..ab25b199b55f21cbfebe61199d0ff90f8e7c0320
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/ICameraFactory.h
@@ -0,0 +1,77 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ICameraFactory.h
+
+  Description: Definition of interface VmbCPP::ICameraFactory.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_ICAMERAFACTORY_H
+#define VMBCPP_ICAMERAFACTORY_H
+
+/**
+* \file  ICameraFactory.h
+*
+* \brief Definition of interface VmbCPP::ICameraFactory.
+*/
+
+#include <VmbC/VmbC.h>
+#include <VmbCPP/VmbCPPCommon.h>
+#include <VmbCPP/SharedPointerDefines.h>
+#include <VmbCPP/Interface.h>
+#include <VmbCPP/Camera.h>
+
+
+namespace VmbCPP {
+
+/**
+ * \brief A interface for creating camera objects.
+ *
+ * A object of an implementing class can be registered at VmbSystem level before startup of the API
+ * to customze the type of Camera objects created by the API.
+ */
+class ICameraFactory 
+{
+  public:
+    /** 
+     * \brief     Factory method to create a camera that extends the Camera class
+     *
+     *            The ID of the camera may be, among others, one of the following: "169.254.12.13",
+     *            "000f31000001", a plain serial number: "1234567890", or the device ID 
+     *            of the underlying transport layer.
+     *
+     * \param[in ]    cameraInfo         Reference to the camera info struct
+     * \param[in ]    pInterface         The shared pointer to the interface camera is connected to
+     */ 
+    IMEXPORT virtual CameraPtr CreateCamera(const VmbCameraInfo_t& cameraInfo,
+                                            const InterfacePtr& pInterface) = 0;
+
+    /**
+    * \brief     Destroys an instance of class Camera
+    */ 
+    IMEXPORT virtual ~ICameraFactory() {}
+
+};
+
+} // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/ICameraListObserver.h b/VimbaX/api/include/VmbCPP/ICameraListObserver.h
new file mode 100644
index 0000000000000000000000000000000000000000..5a3fd054d6062a1da3c12bc69fcf547d285ff38a
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/ICameraListObserver.h
@@ -0,0 +1,92 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ICameraListObserver.h
+
+  Description: Definition of interface VmbCPP::ICameraListObserver.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_ICAMERALISTOBSERVER_H
+#define VMBCPP_ICAMERALISTOBSERVER_H
+
+/**
+* \file  ICameraListObserver.h
+*
+* \brief Definition of interface VmbCPP::ICameraListObserver.
+*/
+
+#include <VmbCPP/VmbCPPCommon.h>
+#include <VmbCPP/SharedPointerDefines.h>
+#include <VmbCPP/Camera.h>
+#include <vector>
+
+
+
+namespace VmbCPP {
+
+/**
+ * \brief A base class for listeners observing the list of available cameras. 
+ */
+class ICameraListObserver 
+{
+public:
+    /**  
+    * \brief     The event handler function that gets called whenever
+    *            an ICameraListObserver is triggered. This occurs most
+    *            likely when a camera was plugged in or out.
+    * 
+    * \param[out]    pCam                    The camera that triggered the event
+    * \param[out]    reason                  The reason why the callback routine was triggered
+    *                                                       (e.g., a new camera was plugged in)
+    */ 
+    IMEXPORT virtual void CameraListChanged( CameraPtr pCam, UpdateTriggerType reason ) = 0;
+
+    /** 
+    * \brief     Destroys an instance of class ICameraListObserver
+    */ 
+    IMEXPORT virtual ~ICameraListObserver() {}
+
+protected:
+    /**
+     * \brief default constructor for use by derived classes. 
+     */
+    IMEXPORT ICameraListObserver() { }
+
+    /**
+     * \brief Copy constructor for use by derived classes. 
+     */
+    IMEXPORT ICameraListObserver( const ICameraListObserver&)
+    {
+    }
+
+    /**
+     * \brief Copy assignment operator for use by derived classes. 
+     */
+    IMEXPORT ICameraListObserver& operator=( const ICameraListObserver&)
+    {
+        return *this;
+    }
+};
+
+} // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/ICapturingModule.h b/VimbaX/api/include/VmbCPP/ICapturingModule.h
new file mode 100644
index 0000000000000000000000000000000000000000..9045e187826d4658238ae90562d1f5bd9fc3c80a
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/ICapturingModule.h
@@ -0,0 +1,196 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ICapturingModule.h
+
+  Description: Definition of interface VmbCPP::ICapturingModule.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_ICAPTURINGMODULE_H
+#define VMBCPP_ICAPTURINGMODULE_H
+
+
+/**
+* \file      ICapturingModule.h
+*
+* \brief     Definition of interface VmbCPP::ICapturingModule.
+*            Provides capturing functions for Camera and Stream classes.
+*/
+
+#include <VmbC/VmbCommonTypes.h>
+#include <VmbCPP/SharedPointerDefines.h>
+#include <VmbCPP/Frame.h>
+
+
+
+namespace VmbCPP {
+
+/**
+ * \brief Common interface for entities acquisition can be started for.
+ * 
+ * Stream and Camera both implement this interface. For Camera this interface provides
+ * access to the first stream.
+ */
+class ICapturingModule 
+{
+  public:
+
+    /**
+    * \brief     Announces a frame to the API that may be queued for frame capturing later.
+    *            Allows some preparation for frames like DMA preparation depending on the transport layer.
+    *            The order in which the frames are announced is not taken in consideration by the API.
+    *
+    * \param[in ]  pFrame             Shared pointer to a frame to announce
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    * \retval ::VmbErrorBadParameter   "pFrame" is null.
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this version of the API
+    */
+    IMEXPORT virtual VmbErrorType AnnounceFrame( const FramePtr &pFrame ) = 0;
+    
+
+    /**
+    * \brief     Revoke a frame from the API.
+    *            The referenced frame is removed from the pool of frames for capturing images.
+    *
+    * \param[in ]  pFrame             Shared pointer to a frame that is to be removed from the list of announced frames
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given frame pointer is not valid
+    * \retval ::VmbErrorBadParameter   "pFrame" is null.
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this version of the API
+    */
+    IMEXPORT virtual VmbErrorType RevokeFrame( const FramePtr &pFrame ) = 0;
+
+
+    /**
+    * \brief     Revoke all frames assigned to this certain camera.
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    */
+    IMEXPORT virtual VmbErrorType RevokeAllFrames() = 0;
+    
+
+    /**
+    * \brief     Queues a frame that may be filled during frame capturing.
+    *
+    *  The given frame is put into a queue that will be filled sequentially.
+    *  The order in which the frames are filled is determined by the order in which they are queued.
+    *  If the frame was announced with AnnounceFrame() before, the application
+    *  has to ensure that the frame is also revoked by calling RevokeFrame() or RevokeAll()
+    *  when cleaning up.
+    *
+    * \param[in ]  pFrame             A shared pointer to a frame
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given frame is not valid
+    * \retval ::VmbErrorBadParameter   "pFrame" is null.
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this version of the API
+    * \retval ::VmbErrorInvalidCall    StopContinuousImageAcquisition is currently running in another thread
+    */
+    IMEXPORT virtual VmbErrorType QueueFrame( const FramePtr &pFrame ) = 0;
+
+
+    /**
+    * \brief     Flushes the capture queue.
+    *
+    * All currently queued frames will be returned to the user, leaving no frames in the input queue.
+    * After this call, no frame notification will occur until frames are queued again.
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    */
+    IMEXPORT virtual VmbErrorType FlushQueue() = 0;
+    
+
+    /**
+    * \brief     Prepare the API for incoming frames from this camera.
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    * \retval ::VmbErrorDeviceNotOpen  Camera was not opened for usage
+    * \retval ::VmbErrorInvalidAccess  Operation is invalid with the current access mode
+    */
+    IMEXPORT virtual VmbErrorType StartCapture() = 0;
+
+
+    /**
+    * \brief     Stop the API from being able to receive frames from this camera.
+    * 
+    * Consequences of VmbCaptureEnd():
+    *    - The frame queue is flushed
+    *    - The frame callback will not be called any more
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    */
+    IMEXPORT virtual VmbErrorType EndCapture() = 0;
+
+    /**
+    * \brief    Retrieve the necessary buffer alignment size in bytes (equals 1 if Data Stream has no such restriction)
+    *
+    * \returns ::VmbErrorType
+    *
+    * \retval ::VmbErrorSuccess         If no error
+    * \retval ::VmbErrorApiNotStarted   VmbStartup() was not called before the current command
+    */
+    IMEXPORT virtual VmbErrorType GetStreamBufferAlignment(VmbUint32_t& nBufferAlignment) = 0;
+
+
+    /**
+    * \brief     Destroys an instance of class ICapturingModule
+    */
+    IMEXPORT virtual ~ICapturingModule() {}
+
+    /**
+     * \brief Object is non-copyable
+     */
+    ICapturingModule( const ICapturingModule& ) = delete;
+
+    /**
+     * \brief Object is non-copyable
+     */
+    ICapturingModule& operator=( const ICapturingModule& ) = delete;
+  protected:
+  
+    ICapturingModule() {}
+};
+
+} // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/IFeatureObserver.h b/VimbaX/api/include/VmbCPP/IFeatureObserver.h
new file mode 100644
index 0000000000000000000000000000000000000000..5c976b0ad8480534e34c5dae752646ae504029f3
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/IFeatureObserver.h
@@ -0,0 +1,86 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        IFeatureObserver.h
+
+  Description: Definition of interface VmbCPP::IFeatureObserver.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_IFEATUREOBSERVER_H
+#define VMBCPP_IFEATUREOBSERVER_H
+
+/**
+* \file  IFeatureObserver.h
+*
+* \brief Definition of interface VmbCPP::IFeatureObserver.
+*/
+
+#include <VmbCPP/SharedPointerDefines.h>
+
+namespace VmbCPP {
+
+/**
+ * \brief The base class to derive feature invalidation listeners from.
+ * 
+ * Derived classes must implement IFeatureObserver::FeatureChanged .
+ */
+class IFeatureObserver 
+{
+  public:
+    /**
+    * \brief     The event handler function that gets called whenever
+    *            a feature has changed
+    *
+    * \param[in]    pFeature    The feature that has changed
+    */
+    IMEXPORT virtual void FeatureChanged( const FeaturePtr &pFeature ) = 0;
+
+    /**
+    * \brief     Destroys an instance of class IFeatureObserver
+    */
+    IMEXPORT virtual ~IFeatureObserver() {}
+
+protected:
+
+    /**
+     * \brief Default constructor for use by derived classes. 
+     */
+    IMEXPORT IFeatureObserver() {}
+    
+    /**
+     * \brief Copy constructor for use by derived classes.
+     */
+    IMEXPORT IFeatureObserver( const IFeatureObserver& ) { }
+
+    /**
+     * \brief Copy assignment operator for use by derived classes.
+     */
+    IMEXPORT IFeatureObserver& operator=( const IFeatureObserver& )
+    {
+        return *this;
+    }
+};
+
+
+} // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/IFrameObserver.h b/VimbaX/api/include/VmbCPP/IFrameObserver.h
new file mode 100644
index 0000000000000000000000000000000000000000..6495e3532268d05d9a4d300ec5452ec150d88222
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/IFrameObserver.h
@@ -0,0 +1,122 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        IFrameObserver.h
+
+  Description: Definition of interface VmbCPP::IFrameObserver.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_IFRAMEOBSERVER_H
+#define VMBCPP_IFRAMEOBSERVER_H
+
+/**
+*
+* \file  IFrameObserver.h
+*
+* \brief Definition of interface VmbCPP::IFrameObserver.
+*/
+
+#include <VmbCPP/VmbCPPCommon.h>
+#include <VmbCPP/SharedPointerDefines.h>
+#include <VmbCPP/Frame.h>
+
+
+namespace VmbCPP {
+
+/**
+ * \brief The base class for observers listening for acquired frames.
+ * 
+ * A derived class must implement the FrameReceived function.
+ */
+class IFrameObserver 
+{
+public:
+    /**
+    * \brief     The event handler function that gets called whenever
+    *            a new frame is received
+    *
+    * \param[in]     pFrame                  The frame that was received
+    */
+    IMEXPORT virtual void FrameReceived( const FramePtr pFrame ) = 0;
+
+    /**
+    * \brief     Destroys an instance of class IFrameObserver
+    */
+    IMEXPORT virtual ~IFrameObserver() {}
+
+    /**
+     * \brief frame observers are not intended to be default constructed
+     */
+    IFrameObserver() = delete;
+
+protected:
+    /**
+     * \brief A pointer storing the camera pointer passed in teh constructor.
+     */
+    CameraPtr m_pCamera;
+
+    /**
+     * \brief A pointer to the stream pointer passed in the constructor.
+     *
+     * If IFrameObserver(CameraPtr) is used, this is the first stream of the camera, should it exist.
+     *
+     */
+    StreamPtr m_pStream;
+
+    /**
+     * \brief Creates an observer initializing both m_pCamera and m_pStream
+     * 
+     * \param[in] pCamera   the camera pointer to store in m_pCamera
+     * \param[in] pStream   the stream pointer to store in m_pStream
+     */
+    IMEXPORT IFrameObserver(CameraPtr pCamera, StreamPtr pStream);
+
+    /**
+     * \brief Creates an observer initializing m_pStream with the first stream of the camera provided.
+     * 
+     * \param[in] pCamera   the camera pointer to store in m_pCamera
+     */
+    IMEXPORT IFrameObserver(CameraPtr pCamera);
+
+    /**
+     * \brief copy constructor for use by a derived class
+     */
+    IMEXPORT IFrameObserver( const IFrameObserver& other)
+        : m_pCamera(other.m_pCamera),
+        m_pStream(other.m_pStream)
+    {
+    }
+
+    /**
+     * \brief copy assignment operator for use by a derived class
+     */
+    IMEXPORT IFrameObserver& operator=( IFrameObserver const& other)
+    {
+        m_pCamera = other.m_pCamera;
+        m_pStream = other.m_pStream;
+        return *this;
+    }
+};
+
+} // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/IInterfaceListObserver.h b/VimbaX/api/include/VmbCPP/IInterfaceListObserver.h
new file mode 100644
index 0000000000000000000000000000000000000000..9229fbe93f1dff9f61cfc9230a8c9360361ebba9
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/IInterfaceListObserver.h
@@ -0,0 +1,85 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        IInterfaceListObserver.h
+
+  Description: Definition of interface VmbCPP::IInterfaceListObserver.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_IINTERFACELISTOBSERVER_H
+#define VMBCPP_IINTERFACELISTOBSERVER_H
+
+/**
+* \file  IInterfaceListObserver.h
+*
+* \brief Definition of interface VmbCPP::IInterfaceListObserver.
+*/
+
+#include <VmbCPP/VmbCPPCommon.h>
+#include <VmbCPP/SharedPointerDefines.h>
+#include <VmbCPP/Interface.h>
+#include <vector>
+
+
+namespace VmbCPP {
+
+/**
+ * \brief Base class for Observers of the list of interfaces 
+ */
+class IInterfaceListObserver 
+{
+  public:
+    /**
+    * \brief     The event handler function that gets called whenever
+    *            an IInterfaceListObserver is triggered.
+    * 
+    * \param[out]    pInterface              The interface that triggered the event
+    * \param[out]    reason                  The reason why the callback routine was triggered
+    */ 
+    IMEXPORT virtual void InterfaceListChanged( InterfacePtr pInterface, UpdateTriggerType reason ) = 0;
+
+    /**
+    * \brief     Destroys an instance of class IInterfaceListObserver
+    */ 
+    IMEXPORT virtual ~IInterfaceListObserver() {}
+
+  protected:
+    /**
+     * \brief Constructor for use of derived classes
+     */
+    IMEXPORT IInterfaceListObserver() {}
+
+    /**
+     * \brief Copy constructor for use by derived classes.
+     */
+    IMEXPORT IInterfaceListObserver( const IInterfaceListObserver& ) {}
+
+    /**
+     * \brief copy assignment operator for use by derived classes. 
+     */
+    IMEXPORT IInterfaceListObserver& operator=( const IInterfaceListObserver& ) { return *this; }
+    
+};
+
+} // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/Interface.h b/VimbaX/api/include/VmbCPP/Interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..42e39f44ff18a99db9b02d08318eee2b78c1f078
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/Interface.h
@@ -0,0 +1,165 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Interface.h
+
+  Description: Definition of class VmbCPP::Interface.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_INTERFACE_H
+#define VMBCPP_INTERFACE_H
+
+/**
+* \file      Interface.h
+*
+*  \brief    Definition of class VmbCPP::Interface.
+*/
+
+#include <functional>
+#include <vector>
+
+#include <VmbC/VmbC.h>
+
+#include "PersistableFeatureContainer.h"
+#include "SharedPointerDefines.h"
+#include "UniquePointer.hpp"
+#include "VmbCPPCommon.h"
+
+namespace VmbCPP {
+
+using CameraPtrVector = std::vector<CameraPtr>;
+
+/**
+ * \brief An object representing the GenTL interface.
+ */
+class Interface : public PersistableFeatureContainer
+{
+public:
+
+    /**
+     *\brief Object is not default constructible
+     */
+    Interface() = delete;
+
+    /**
+     *\brief Object is not copyable
+     */
+    Interface(const Interface&) = delete;
+
+    /**
+     *\brief Object is not copyable
+     */
+    Interface& operator=(const Interface&) = delete;
+
+    /**
+    * \brief Type for an std::function to retrieve an Interface's cameras
+    */
+    using GetCamerasByInterfaceFunction = std::function<VmbErrorType(const Interface* pInterface, CameraPtr* pCameras, VmbUint32_t& size)>;
+
+    /**
+     * \brief Create an interface given the interface info and info about related objects.
+     * 
+     * \param[in] interfaceInfo             the information about the interface
+     * \param[in] pTransportLayerPtr        the pointer to the transport layer providing this interface
+     * \param[in] getCamerasByInterface     the function for retrieving the cameras of this interface
+     */
+    Interface(const VmbInterfaceInfo_t& interfaceInfo,
+              const TransportLayerPtr& pTransportLayerPtr,
+              GetCamerasByInterfaceFunction getCamerasByInterface);
+
+    virtual ~Interface();
+
+    /**
+    * \brief      Gets the ID of an interface.
+    *
+    * \param[out]   interfaceID          The ID of the interface
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    *
+    * \details    This information remains static throughout the object's lifetime
+    */
+    VmbErrorType GetID(std::string &interfaceID) const noexcept;
+
+    /**
+    * \brief     Gets the type, e.g. GigE or USB of an interface.
+    *
+    * \param[out]   type        The type of the interface
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    *
+    * \details    This information remains static throughout the object's lifetime
+    */
+    IMEXPORT VmbErrorType GetType(VmbTransportLayerType& type) const noexcept;
+
+    /**
+    * \brief     Gets the name of an interface.
+    *
+    * \param[out]   name        The name of the interface
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    *
+    * Details:     This information remains static throughout the object's lifetime
+    */
+    VmbErrorType GetName(std::string& name) const noexcept;
+
+    /**
+    * \brief     Gets the pointer of the related transport layer.
+    *
+    * \param[out]   pTransportLayer     The pointer of the related transport layer.
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    */
+    IMEXPORT VmbErrorType GetTransportLayer(TransportLayerPtr& pTransportLayer) const;
+
+    /**
+    * \brief     Get all cameras related to this transport layer.
+    *
+    * \param[out]  cameras         Returned list of related cameras
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorBadHandle      The handle is not valid
+    * \retval ::VmbErrorResources      Resources not available (e.g. memory)
+    * \retval ::VmbErrorInternalFault  An internal fault occurred
+    */
+    VmbErrorType GetCameras(CameraPtrVector& cameras);
+
+  private:
+
+    struct Impl;
+    UniquePointer<Impl> m_pImpl;
+
+    // Array functions to pass data across DLL boundaries
+    IMEXPORT VmbErrorType GetID(char* const pID, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType GetName(char* const pName, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType GetCameras(CameraPtr* pCameras, VmbUint32_t& size);
+};
+
+} // namespace VmbCPP
+
+#include "Interface.hpp"
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/Interface.hpp b/VimbaX/api/include/VmbCPP/Interface.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..d29b191f913f12b905f5089e985d00ae52bfa9b5
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/Interface.hpp
@@ -0,0 +1,90 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Interface.hpp
+
+  Description: Inline wrapper functions for class VmbCPP::Interface.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_INTERFACE_HPP
+#define VMBCPP_INTERFACE_HPP
+
+/**
+* \file  Interface.hpp
+*
+* \brief Inline wrapper functions for class VmbCPP::Interface
+*        that allocate memory for STL objects in the application's context
+*        and to pass data across DLL boundaries using arrays
+*/
+
+#include "CopyHelper.hpp"
+
+namespace VmbCPP {
+
+// HINT: This information remains static throughout the object's lifetime
+inline VmbErrorType Interface::GetID( std::string &rStrID ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrID, &Interface::GetID);
+}
+
+// HINT: This information remains static throughout the object's lifetime
+inline VmbErrorType Interface::GetName( std::string &rStrName ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrName, &Interface::GetName);
+}
+
+inline VmbErrorType Interface::GetCameras(CameraPtrVector& rCameras)
+{
+    VmbErrorType    res;
+    VmbUint32_t     nSize;
+
+    res = GetCameras(nullptr, nSize);
+    if (VmbErrorSuccess == res)
+    {
+        if (0 != nSize)
+        {
+            try
+            {
+                CameraPtrVector tmpCameras(nSize);
+                res = GetCameras(&tmpCameras[0], nSize);
+                if (VmbErrorSuccess == res)
+                {
+                    tmpCameras.resize(nSize);
+                    rCameras = std::move(tmpCameras);
+                }
+            }
+            catch (...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            rCameras.clear();
+        }
+    }
+    return res;
+}
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/LocalDevice.h b/VimbaX/api/include/VmbCPP/LocalDevice.h
new file mode 100644
index 0000000000000000000000000000000000000000..0f60925ed463772834f709d4784fa86ec32eb48d
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/LocalDevice.h
@@ -0,0 +1,76 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        LocalDevice.h
+
+  Description: Definition of class VmbCPP::LocalDevice.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_LOCALDEVICE_H
+#define VMBCPP_LOCALDEVICE_H
+
+/**
+* \file             LocalDevice.h
+*
+* \brief            Definition of class VmbCPP::LocalDevice.
+*/
+
+#include <VmbC/VmbC.h>
+
+#include "PersistableFeatureContainer.h"
+#include "VmbCPPCommon.h"
+
+namespace VmbCPP {
+
+/**
+ * \brief A module providing access to the features of the local device GenTL module. 
+ */
+class LocalDevice : public PersistableFeatureContainer
+{
+public:
+  
+    /**  
+    *  \brief     Creates an instance of class LocalDevice
+    * 
+    *  \param[in] handle    The handle of the local device
+    */  
+    IMEXPORT LocalDevice( VmbHandle_t handle);
+
+    // default destructor auto-generated by compiler
+    
+    /**
+     * \brief Object is not copyable 
+     */
+    LocalDevice(const LocalDevice&) = delete;
+
+    /**
+     * \brief Object is not copyable
+     */
+    LocalDevice& operator=(const LocalDevice&) = delete;
+
+private:
+    
+};    
+    
+} // namespace VmbCPP
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/include/VmbCPP/LoggerDefines.h b/VimbaX/api/include/VmbCPP/LoggerDefines.h
new file mode 100644
index 0000000000000000000000000000000000000000..2f0749faa8047946eb02ffe70e25e573ea9c35e1
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/LoggerDefines.h
@@ -0,0 +1,112 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        LoggerDefines.h
+
+  Description: Definition of macros for logging.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_LOGGERDEFINES_H
+#define VMBCPP_LOGGERDEFINES_H
+
+/**
+* \file      LoggerDefines.h
+*
+* \brief     Definition of macros for logging.
+*/
+
+#include <utility>
+
+#include "VmbCPPConfig/config.h"
+
+#ifndef USER_LOGGER
+
+#include "FileLogger.h"
+
+namespace VmbCPP {
+
+    /**
+     * \brief A type alias determining the logger type to be used by the VmbCPP API.
+     */
+    using Logger = FileLogger;                       
+
+    /**
+     * \brief The used to pass the log info on to the logger object.
+     *
+     * \param[in] logger        a pointer to the logger object; may be null resulting in the log message being dropped
+     * \param[in] loggingInfo   the info that should be logged
+     * 
+     * \tparam LoggingInfoType  the type of information to be forwarded to the logger.
+     */
+    template<typename LoggingInfoType>
+    inline void LOGGER_LOG(Logger* logger, LoggingInfoType&& loggingInfo)
+    {
+        if (nullptr != logger)
+        {
+            logger->Log(std::forward<LoggingInfoType>(loggingInfo));
+        }
+    }
+
+    /**
+     * \brief Create a file logger object.
+     * 
+     * The created logger appends log entries to VmbCPP.log in the temporary directory.
+     * 
+     * \return a raw pointer to the newly created file object.
+     */
+    inline Logger* CreateLogger()
+    {
+        return new FileLogger("VmbCPP.log", true);
+    }
+}    
+
+#endif
+
+#include <VmbCPP/VmbSystem.h>
+
+/**
+ * \brief Macro for logging the provided text.
+ *
+ * The function using the macro is logged too.
+ * 
+ * \note May throw std::bad_alloc, if there is insufficient memory to create
+ * log message string.
+ */
+#define LOG_FREE_TEXT( txt )                                                \
+{                                                                           \
+    std::string strExc( txt );                                              \
+    strExc.append( " in function: " );                                      \
+    strExc.append( __FUNCTION__ );                                          \
+    LOGGER_LOG(VmbSystem::GetInstance().GetLogger(), std::move(strExc));    \
+}
+
+#define LOG_ERROR( txt, errCode )                                           \
+{                                                                           \
+    std::string strExc( txt );                                              \
+    strExc.append( " in function: " );                                      \
+    strExc.append( __FUNCTION__ );                                          \
+    strExc.append( ", VmbErrorType: ");                                            \
+    strExc.append( std::to_string(errCode) );                               \
+    LOGGER_LOG(VmbSystem::GetInstance().GetLogger(), std::move(strExc));    \
+}
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/Mutex.h b/VimbaX/api/include/VmbCPP/Mutex.h
new file mode 100644
index 0000000000000000000000000000000000000000..1a25f6b09759086aaf4f97d49522115fe4ddd5b1
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/Mutex.h
@@ -0,0 +1,102 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Mutex.h
+
+  Description: Definition of class VmbCPP::Mutex.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_MUTEX
+#define VMBCPP_MUTEX
+
+/**
+* \file    Mutex.h
+*
+* \brief   Definition of class VmbCPP::Mutex.
+*/
+
+#include <VmbCPP/VmbCPPCommon.h>
+
+#ifdef _WIN32
+    #include <windows.h>
+#else
+    #include <pthread.h>
+#endif
+
+
+namespace VmbCPP {
+
+/**
+ * \brief a mutex implementation 
+ */
+class Mutex
+{
+public:
+    /**
+     * \brief creates a mutex that may be locked initially 
+     */
+    IMEXPORT explicit Mutex( bool bInitLock = false );
+
+    /**
+     * \brief mutexes are non-copyable 
+     */
+    Mutex& operator=(const Mutex&) = delete;
+
+    /**
+     * \brief mutexes are not copy-assignable. 
+     */
+    Mutex(const Mutex&) = delete;
+
+    /**
+     * \brief destroys the mutex
+     */
+    IMEXPORT ~Mutex();
+
+    /**
+     * \brief Lock this mutex.
+     *
+     * The call blocks, until the mutex is available
+     */
+    IMEXPORT void Lock();
+
+    /**
+     * \brief Release the lock on this mutex .
+     */
+    IMEXPORT void Unlock();
+
+protected:
+#ifdef _WIN32
+      /**
+       * \brief windows handle for the mutex 
+       */
+    HANDLE          m_hMutex;
+#else
+    /**
+     * \brief the pthread handle for the mutex 
+     */
+    pthread_mutex_t m_Mutex;
+#endif
+};
+
+} //namespace VmbCPP
+
+#endif //VMBCPP_MUTEX
diff --git a/VimbaX/api/include/VmbCPP/PersistableFeatureContainer.h b/VimbaX/api/include/VmbCPP/PersistableFeatureContainer.h
new file mode 100644
index 0000000000000000000000000000000000000000..dcf82ecb168717510a9c7db865e2b63657c144ed
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/PersistableFeatureContainer.h
@@ -0,0 +1,123 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        PersistableFeatureContainer.h
+
+  Description: Definition of class VmbCPP::PersistableFeatureContainer.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_PERSISTABLEFEATURECONTAINER_H
+#define VMBCPP_PERSISTABLEFEATURECONTAINER_H
+
+/**
+* \file             PersistableFeatureContainer.h
+*
+* \brief            Definition of class VmbCPP::PersistableFeatureContainer.
+*/
+
+#include <cstddef>
+#include <string>
+
+#include <VmbC/VmbC.h>
+#include <VmbCPP/VmbCPPCommon.h>
+#include <VmbCPP/FeatureContainer.h>
+
+namespace VmbCPP {
+
+/**
+ * \brief An interface providing access and persistance functionality for features.
+ */
+class PersistableFeatureContainer : public FeatureContainer
+{
+public:
+    /**
+    *  \brief     Creates an instance of class FeatureContainer
+    */
+    IMEXPORT PersistableFeatureContainer();
+  
+    /**
+     * \brief Object is not copyable
+     */
+    PersistableFeatureContainer(const PersistableFeatureContainer&) = delete;
+    
+    /**
+     * \brief Object is not copyable
+     */
+    PersistableFeatureContainer& operator=(const PersistableFeatureContainer&) = delete;
+  
+    /**
+    * 
+    * \brief     Saves the current module setup to an XML file
+    * 
+    * \param[in ]   filePath        Path of the XML file
+    * \param[in ]   pSettings       Pointer to settings struct
+    * 
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess            If no error
+    * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+    * \retval ::VmbErrorBadParameter       If \p filePath is or the settings struct is invalid
+    * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadHandle          The object handle is not valid
+    * \retval ::VmbErrorNotFound           The object handle is insufficient to identify the module that should be saved
+    * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+    * \retval ::VmbErrorIO                 There was an issue writing the file.
+    */
+    IMEXPORT VmbErrorType SaveSettings(const VmbFilePathChar_t* filePath, VmbFeaturePersistSettings_t* pSettings = nullptr) const noexcept;
+
+    /**
+     * \brief Settings cannot be saved given null as file path
+     */
+    VmbErrorType SaveSettings(std::nullptr_t, VmbFeaturePersistSettings_t* pSettings = nullptr) const noexcept = delete;
+
+    /**
+    * 
+    * \brief     Loads the current module setup from an XML file into the camera
+    * 
+    * \param[in] filePath        Name of the XML file
+    * \param[in] pSettings       Pointer to settings struct
+    * 
+    * \return An error code indicating success or the type of error that occured.
+    * \retval ::VmbErrorSuccess            If no error
+    * \retval ::VmbErrorApiNotStarted      ::VmbStartup() was not called before the current command
+    * \retval ::VmbErrorInvalidCall        If called from a chunk access callback
+    * \retval ::VmbErrorBadHandle          The object handle is not valid
+    * \retval ::VmbErrorAmbiguous          The module to restore the settings for cannot be uniquely identified based on the information available
+    * \retval ::VmbErrorNotFound           The object handle is insufficient to identify the module that should be restored
+    * \retval ::VmbErrorRetriesExceeded    Some or all of the features could not be restored with the max iterations specified
+    * \retval ::VmbErrorInvalidAccess      Operation is invalid with the current access mode
+    * \retval ::VmbErrorBadParameter       If \p filePath is null or the settings struct is invalid
+    * \retval ::VmbErrorIO                 There was an issue with reading the file.
+    */ 
+    IMEXPORT VmbErrorType LoadSettings(const VmbFilePathChar_t* const filePath, VmbFeaturePersistSettings_t* pSettings = nullptr) const noexcept;
+
+    /**
+     * \brief Loading settings requires a non-null path 
+     */
+    VmbErrorType LoadSettings(std::nullptr_t, VmbFeaturePersistSettings_t* pSettings= nullptr) const noexcept = delete;
+private:
+
+};
+
+    
+} // namespace VmbCPP
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/include/VmbCPP/SharedPointer.h b/VimbaX/api/include/VmbCPP/SharedPointer.h
new file mode 100644
index 0000000000000000000000000000000000000000..4ed80e5a9ff3fae6bd80d19a7111808a00cd2c12
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/SharedPointer.h
@@ -0,0 +1,399 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        SharedPointer.h
+
+  Description: Definition of an example shared pointer class that can be 
+               used with VmbCPP.
+               (This include file contains example code only.)
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_SHAREDPOINTER_H
+#define VMBCPP_SHAREDPOINTER_H
+
+/**
+* \file      SharedPointer.h
+*
+* \brief     Definition of an example shared pointer class that can be 
+*            used with VmbCPP.
+* \note      (This include file contains example code only.)
+*/
+
+#include <cstddef>
+#include <type_traits>
+
+namespace VmbCPP {
+
+    //Coding style of this file is different to mimic the shared_ptr classes of std and boost.
+
+    struct dynamic_cast_tag
+    {
+    };
+
+    class ref_count_base;
+
+    /**
+     * \brief A custom shared pointer implementation used by default by the VmbCPP API.
+     *
+     * \tparam T    The object type partially owned by this object.
+     */
+    template <class T>
+    class shared_ptr final
+    {
+    private:
+        class ref_count;
+
+        typedef shared_ptr<T> this_type;
+        
+        template<class T2>
+        friend class shared_ptr;
+
+        VmbCPP::ref_count_base  *m_pRefCount;
+        T                       *m_pObject;
+
+        template <class T2>
+        static void swap(T2 &rValue1, T2 &rValue2);
+
+    public:
+        shared_ptr() noexcept;
+
+        /**
+         * \brief Create a shared pointer object given a raw pointer to take ownership of
+         *
+         * \param[in] pObject   the raw pointer to take ownership of
+         * 
+         * \tparam T2   The pointer type passed as parameter.
+         */
+        template <class T2>
+        explicit shared_ptr(T2 *pObject);
+
+        /**
+         * \brief Creates a shared pointer object not owning any object. 
+         */
+        explicit shared_ptr(std::nullptr_t) noexcept;
+
+        /**
+         * \brief copy constructor for a shared pointer 
+         */
+        shared_ptr(const shared_ptr &rSharedPointer);
+
+        /**
+         * \brief Constructor for taking shared ownership of a object owned by a shared pointer
+         * to a different shared pointer type.
+         * 
+         * The raw pointers are converted using implicit conversion.
+         * 
+         * \param[in] rSharedPointer the pointer the ownership is shared with
+         */
+        template <class T2>
+        shared_ptr(const shared_ptr<T2> &rSharedPointer);
+
+        /**
+         * \brief Constructor for taking shared ownership of a object owned by a shared pointer
+         * to a different shared pointer type using dynamic_cast to attempt to convert
+         * the raw pointers.
+         * 
+         * \param[in] rSharedPointer
+         */
+        template <class T2>
+        shared_ptr(const shared_ptr<T2> &rSharedPointer, dynamic_cast_tag);
+
+        ~shared_ptr();
+
+        /**
+         * \brief copy assignment operator
+         * 
+         * \param[in]   rSharedPointer  the pointer to copy
+         * 
+         * \return a reference to this object
+         */
+        shared_ptr& operator=(const shared_ptr &rSharedPointer);
+
+        /**
+         * \brief assignment operator using implicit conversion to convert the raw pointers.
+         * 
+         * \param[in]   rSharedPointer  the pointer to copy
+         * 
+         * \tparam T2 the pointer type of the source of the assignment
+         * 
+         * \return a reference to this object
+         */
+        template <class T2>
+        shared_ptr<T>& operator=(const shared_ptr<T2> &rSharedPointer);
+        
+        /**
+         * \brief reset this pointer to null 
+         */
+        void reset();
+
+        /**
+         * \brief replace the object owned by the object provided
+         * 
+         * The raw pointers are convererted using implicit conversion
+         * 
+         * \param[in]   pObject the pointer to the object to take ownership of.
+         * 
+         * \tparam T2 the type of the pointer
+         */
+        template <class T2>
+        void reset(T2 *pObject);
+
+        /**
+         * \brief Getter for the raw pointer to the object owned by this object.
+         *
+         * \return the raw pointer to the object owned
+         */
+        T* get() const noexcept;
+
+        /**
+         * \brief Dereference operator for this object
+         *
+         * \note This operator will result in an assertion error, if this object is a null pointer.
+         * 
+         * \return a reference to the owned object.
+         */
+        T& operator * () const noexcept;
+
+        /**
+         * \brief Operator for member access of the owned object
+         *
+         * \note This operator will result in an assertion error, if this object is a null pointer.
+         * 
+         * \return the pointer to the object to access.
+         */
+        T* operator -> () const noexcept;
+
+        /**
+         * \brief Get the number of shared pointers currently sharing ownership of this object.
+         * 
+         * The result includes this object in the count.
+         * 
+         * \return the number of shared pointers sharing ownership of the object pointed to.
+         */
+        long use_count() const;
+
+        /**
+         * \brief Checks, if this object is currently the sole owner of the object pointed to.
+         * 
+         * \return true if and only if the object is currently owned by this object exclusively.
+         */
+        bool unique() const;
+
+        /**
+         * \brief Checks, if this object is not a null pointer.
+         * 
+         * \return true if and only if this object is not a null pointer.
+         */
+        operator bool() const noexcept
+        {
+            return m_pObject != nullptr;
+        }
+
+        /**
+         * \brief Exchange the objects owned by this pointer and the pointer provided
+         *
+         * \param[in,out]   rSharedPointer  the pointer to exchange the owned objects with.
+         */
+        void swap(shared_ptr &rSharedPointer) noexcept;
+    };
+
+    /**
+     * \brief Convert from one shared pointer type to another using dynamic_cast.
+     *
+     * \param[in] rSharedPointer    the shared pointer object that should be converted.
+     * 
+     * \tparam T    The target type of the conversion
+     * \tparam T2   The source type of the conversion
+     * 
+     * \return A shared pointer sharing the reference counter of \p rSharedPointer, if the conversion was successful
+     *         and a null pointer otherwise.
+     */
+    template<class T, class T2>
+    shared_ptr<T> dynamic_pointer_cast(const shared_ptr<T2> &rSharedPointer);
+
+    /**
+     * \brief Operator checking, if the shared pointers point to the same object.
+     *
+     * \param[in] sp1   one of the shared pointers to compare
+     * \param[in] sp2   the other shared pointer to compare
+     *
+     * \tparam T1   The type of the first shared pointer
+     * \tparam T2   The type of the second shared pointer
+     *
+     * \return true, if the pointers point to the same object, false otherwise
+     */
+    template<class T1, class T2>
+    bool operator==(const shared_ptr<T1>& sp1, const shared_ptr<T2>& sp2);
+
+    /**
+     * \brief Operator checking, if the shared pointers point to different objects.
+     *
+     * \param[in] sp1   one of the shared pointers to compare
+     * \param[in] sp2   the other shared pointer to compare
+     *
+     * \tparam T1   The type of the first shared pointer
+     * \tparam T2   The type of the second shared pointer
+     *
+     * \return false, if the pointers point to the same object, false otherwise
+     */
+    template<class T1, class T2>
+    bool operator!=(const shared_ptr<T1>& sp1, const shared_ptr<T2>& sp2);
+
+    /**
+     * \brief Operator checking, a shared pointer for null
+     *
+     * \param[in] sp   the shared pointer to check for null
+     *
+     * \tparam T    The type of the shared pointer
+     *
+     * \return true, if and only if \p sp contains null
+     */
+    template<class T>
+    bool operator==(const shared_ptr<T>& sp, std::nullptr_t);
+
+    /**
+     * \brief Operator checking, a shared pointer for null
+     *
+     * \param[in] sp   the shared pointer to check for null
+     *
+     * \tparam T    The type of the shared pointer
+     *
+     * \return true, if and only if \p sp contains null
+     */
+    template<class T>
+    bool operator==(std::nullptr_t, const shared_ptr<T>& sp);
+
+    /**
+     * \brief Operator checking, a shared pointer for null
+     *
+     * \param[in] sp   the shared pointer to check for null
+     *
+     * \tparam T    The type of the shared pointer
+     *
+     * \return false, if and only if \p sp contains null
+     */
+    template<class T>
+    bool operator!=(const shared_ptr<T>& sp, std::nullptr_t);
+
+    /**
+     * \brief Operator checking, a shared pointer for null
+     *
+     * \param[in] sp   the shared pointer to check for null
+     *
+     * \tparam T    The type of the shared pointer
+     *
+     * \return false, if and only if \p sp contains null
+     */
+    template<class T>
+    bool operator!=(std::nullptr_t, const shared_ptr<T>& sp);
+
+    /**
+     * \defgroup AccessFunctions Functions for accessing shared pointer objects
+     * \{
+     */
+
+    template<class T>
+    using SharedPointer = shared_ptr<T>;
+
+    /**
+     * \brief The function used for assigning ownership of a raw pointer to a shared pointer object.
+     * 
+     * \param[out]  target  the shared pointer to assign the ownership to.
+     * \param[in]   rawPtr  the raw pointer \p target should receive ownership of.
+     * 
+     * \tparam T    the type of shared pointer receiving the ownership.
+     * \tparam U    the type of the raw pointer; `U*` must be assignable to `T*`
+     */
+    template<class T, class U, typename std::enable_if<std::is_assignable<T*&, U*>::value, int>::type = 0>
+    void SP_SET(shared_ptr<T>& target, U* rawPtr);
+
+    /**
+     * \brief Function for resetting a shared pointer to null.
+     *
+     * \param[out] target   the shared pointer to set to null
+     *
+     * \tparam T    type the pointer points to
+     */
+    template<class T>
+    void SP_RESET(shared_ptr<T>& target);
+
+    /**
+     * \brief A function used for checking, if to shared pointers point to the same object.
+     * 
+     * \param[in]   lhs the first pointer to compare
+     * \param[in]   rhs the second pointer to compare
+     * 
+     * \tparam T    The first pointer type
+     * \tparam U    The second pointer type
+     * 
+     * \return true if and only if the pointers point to the same object.
+     */
+    template<class T, class U>
+    bool SP_ISEQUAL(const shared_ptr<T>& lhs, const shared_ptr<U>& rhs);
+
+    /**
+     * \brief A function used to check a shared pointer for null
+     *
+     * \param[in]   sp  the shared pointer to check for null
+     *
+     * \tparam T    The type of pointer
+     *
+     * \return true if and only if the pointer points to null
+     */
+    template<class T>
+    bool SP_ISNULL(const shared_ptr<T>& sp);
+
+    /**
+     * \brief a function for accessing the raw pointer of the shared pointer.
+     *
+     * \param[in] sp the shared pointer to get the raw pointer from
+     * 
+     * \tparam T    the type of the pointer
+     * 
+     * \return a raw pointer to the object owned by \p sp
+     */
+    template<class T>
+    T* SP_ACCESS(const shared_ptr<T>& sp);
+
+    /**
+     * \brief Convert from one shared pointer type to another using dynamic_cast.
+     *
+     * \param[in] sp    the shared pointer object that should be converted.
+     *
+     * \tparam T    The target type of the conversion
+     * \tparam U    The source type of the conversion
+     *
+     * \return A shared pointer sharing the reference counter of \p sp, if the conversion was successful
+     *         and a null pointer otherwise.
+     */
+    template<class T, class U>
+    shared_ptr<T> SP_DYN_CAST(shared_ptr<U>& sp);
+
+    /**
+     * \}
+     */
+
+} //namespace VmbCPP
+
+#include <VmbCPP/SharedPointer_impl.h>
+
+#endif //VMBCPP_SHAREDPOINTER_H
diff --git a/VimbaX/api/include/VmbCPP/SharedPointerDefines.h b/VimbaX/api/include/VmbCPP/SharedPointerDefines.h
new file mode 100644
index 0000000000000000000000000000000000000000..6ac799425f19381b9396cffcaa57867289c23d94
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/SharedPointerDefines.h
@@ -0,0 +1,166 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        SharedPointerDefines.h
+
+  Description: Definition of macros for using the standard shared pointer 
+               (std::tr1) for VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_SHAREDPOINTERDEFINES_H
+#define VMBCPP_SHAREDPOINTERDEFINES_H
+
+/**
+* \file SharedPointerDefines.h
+* \brief Definition of macros for using the standard shared pointer (std::tr1) for VmbCPP.
+*
+* \note If your version of STL does not provide a shared pointer implementation please see UserSharedPointerDefines.h for information on 
+* how to use another shared pointer than std::shared_ptr.
+*
+*/
+
+// include the implementation of the shared pointer
+#ifndef USER_SHARED_POINTER
+#   include <VmbCPP/SharedPointer.h>
+#else
+// expected to specialize ::VmbCPP::UsedSharedPointerDefinitions
+#   include "VmbCPPConfig/config.h"
+#endif
+
+namespace VmbCPP {
+
+// These are all uses of a SharedPointer shared_ptr type alias
+class BasicLockable;
+
+/**
+ * \brief An alias for a shared pointer to a BasicLockable. 
+ */
+using BasicLockablePtr = SharedPointer<BasicLockable>;
+
+class Camera;
+
+/**
+ * \brief An alias for a shared pointer to a Camera.
+ */
+using CameraPtr = SharedPointer<Camera>;
+
+class Feature;
+
+/**
+ * \brief An alias for a shared pointer to a Feature.
+ */
+using FeaturePtr = SharedPointer<Feature>;
+
+class FeatureContainer;
+
+/**
+ * \brief An alias for a shared pointer to a FeatureContainer.
+ */
+using FeatureContainerPtr = SharedPointer<FeatureContainer>;
+
+class Frame;
+
+/**
+ * \brief An alias for a shared pointer to a Frame.
+ */
+using FramePtr = SharedPointer<Frame>;
+
+class FrameHandler;
+
+/**
+ * \brief An alias for a shared pointer to a FrameHandler.
+ */
+using FrameHandlerPtr = SharedPointer<FrameHandler>;
+
+class ICameraFactory;
+
+/**
+ * \brief An alias for a shared pointer to a camera factory.
+ */
+using ICameraFactoryPtr = SharedPointer<ICameraFactory>;
+
+class ICameraListObserver;
+
+/**
+ * \brief An alias for a shared pointer to a camera list observer.
+ */
+using ICameraListObserverPtr = SharedPointer<ICameraListObserver>;
+
+class IFeatureObserver;
+
+/**
+ * \brief An alias for a shared pointer to a feature observer.
+ */
+using IFeatureObserverPtr = SharedPointer<IFeatureObserver>;
+
+class IFrameObserver;
+
+/**
+ * \brief An alias for a shared pointer to a frame observer.
+ */
+using IFrameObserverPtr = SharedPointer<IFrameObserver>;
+
+class Interface;
+
+/**
+ * \brief An alias for a shared pointer to an Interface.
+ */
+using InterfacePtr = SharedPointer<Interface>;
+
+class IInterfaceListObserver;
+
+/**
+ * \brief An alias for a shared pointer to an interface list observer.
+ */
+using IInterfaceListObserverPtr = SharedPointer<IInterfaceListObserver>;
+
+class LocalDevice;
+
+/**
+ * \brief An alias for a shared pointer to a LocalDevice.
+ */
+using LocalDevicePtr = SharedPointer<LocalDevice>;
+
+class Mutex;
+
+/**
+ * \brief An alias for a shared pointer to a Mutex.
+ */
+using MutexPtr = SharedPointer<Mutex>;
+
+class Stream;
+
+/**
+ * \brief An alias for a shared pointer to a Stream.
+ */
+using StreamPtr = SharedPointer<Stream>;
+
+class TransportLayer;
+
+/**
+ * \brief An alias for a shared pointer to a TransportLayer.
+ */
+using TransportLayerPtr = SharedPointer<TransportLayer>;
+
+}  // namespace VmbCPP
+
+#endif // VMBCPP_SHAREDPOINTERDEFINES_H
diff --git a/VimbaX/api/include/VmbCPP/SharedPointer_impl.h b/VimbaX/api/include/VmbCPP/SharedPointer_impl.h
new file mode 100644
index 0000000000000000000000000000000000000000..31927087dcfe4452dd03f25dde1de61bb63a1a35
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/SharedPointer_impl.h
@@ -0,0 +1,398 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        SharedPointer_impl.h
+
+  Description: Implementation of an example shared pointer class for VmbCPP.
+               (This include file contains example code only.)
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_SHAREDPOINTER_IMPL_H
+#define VMBCPP_SHAREDPOINTER_IMPL_H
+
+/**
+* \file        SharedPointer_impl.h
+*
+* \brief       Implementation of an example shared pointer class for the VmbCPP.
+* \note        (This include file contains example code only.)
+*/
+
+#include <cassert>
+#include <cstddef>
+#include <stdexcept>
+
+#include <VmbCPP/Mutex.h>
+
+namespace VmbCPP {
+
+    /**
+     * \brief The base class of pointer references for use by shared_ptr. 
+     */
+    class ref_count_base
+    {
+    public:
+        virtual ~ref_count_base() = default;
+
+        /**
+         * \brief Increment the reference count. 
+         */
+        virtual void inc() = 0;
+
+        /**
+         * \brief decrement the reference count 
+         */
+        virtual void dec() = 0;
+
+        /**
+         * \brief Get the current reference count.
+         *
+         * \return the current reference count.
+         */
+        virtual long use_count() const = 0;
+    };
+
+    /**
+     * \brief Reference counter implementation for shared_ptr.
+     *
+     * \tparam T    The type of object the shared pointer refers to
+     */
+    template <class T>
+    class shared_ptr<T>::ref_count : public ref_count_base
+    {
+    private:
+        T* m_pObject;
+        long            m_nCount;
+        Mutex           m_Mutex;
+
+    public:
+        /**
+         * \brief constructor creating a reference counter for a given raw pointer
+         *
+         * \param[in]   pObject     a pointer to the object the created object counts references for
+         */
+        explicit ref_count(T* pObject)
+            : m_pObject(pObject),
+            m_nCount(1)
+        {
+        }
+
+        virtual ~ref_count()
+        {
+            if (nullptr != m_pObject)
+            {
+                delete m_pObject;
+            }
+
+            m_Mutex.Unlock();
+        }
+
+        ref_count(const ref_count& rRefCount) = delete;
+        ref_count& operator=(const ref_count& rRefCount) = delete;
+
+        virtual void inc() override
+        {
+            m_Mutex.Lock();
+
+            m_nCount++;
+
+            m_Mutex.Unlock();
+        }
+
+        virtual void dec() override
+        {
+            m_Mutex.Lock();
+            if (m_nCount == 0)
+            {
+                throw std::logic_error("shared pointer, used incorrectly");
+            }
+            if (m_nCount > 1)
+            {
+                m_nCount--;
+
+                m_Mutex.Unlock();
+            }
+            else
+            {
+                // m_Mutex will be unlocked in d'tor
+                delete this;
+            }
+        }
+
+        virtual long use_count() const override
+        {
+            return m_nCount;
+        }
+    };
+
+    template <class T>
+    template <class T2>
+    void shared_ptr<T>::swap(T2 &rValue1, T2 &rValue2)
+    {
+        T2 buffer = rValue1;
+        rValue1 = rValue2;
+        rValue2 = buffer;
+    }
+
+    template <class T>
+    shared_ptr<T>::shared_ptr() noexcept
+        :   m_pRefCount(nullptr)
+        ,   m_pObject(nullptr)
+    {
+    }
+    
+    template <class T>
+    template <class T2>
+    shared_ptr<T>::shared_ptr(T2 *pObject)
+        :   m_pRefCount(nullptr)
+        ,   m_pObject(nullptr)
+    {
+        m_pRefCount = new typename shared_ptr<T2>::ref_count(pObject);
+        if(nullptr == m_pRefCount)
+        {
+            delete pObject;
+
+            throw std::bad_alloc();
+        }
+
+        m_pObject = pObject;
+    }
+
+    template <class T>
+    shared_ptr<T>::shared_ptr(std::nullptr_t) noexcept
+        : shared_ptr(static_cast<T*>(nullptr))
+    {
+    }
+    
+    template <class T>
+    template <class T2>
+    shared_ptr<T>::shared_ptr(const shared_ptr<T2> &rSharedPointer)
+        :   m_pRefCount(nullptr)
+        ,   m_pObject(nullptr)
+    {
+        if(nullptr != rSharedPointer.m_pRefCount)
+        {
+            rSharedPointer.m_pRefCount->inc();
+
+            m_pRefCount = rSharedPointer.m_pRefCount;
+            m_pObject = rSharedPointer.m_pObject;
+        }
+    }
+
+    template <class T>
+    template <class T2>
+    shared_ptr<T>::shared_ptr(const shared_ptr<T2> &rSharedPointer, dynamic_cast_tag)
+        :   m_pRefCount(nullptr)
+        ,   m_pObject(nullptr)
+    {
+        if(nullptr != rSharedPointer.m_pRefCount)
+        {
+            T *pObject = dynamic_cast<T*>(rSharedPointer.m_pObject);
+            if(nullptr != pObject)
+            {
+                rSharedPointer.m_pRefCount->inc();
+
+                m_pRefCount = rSharedPointer.m_pRefCount;
+                m_pObject = pObject;
+            }
+        }
+    }
+
+    template <class T>
+    shared_ptr<T>::shared_ptr(const shared_ptr &rSharedPointer)
+        :   m_pRefCount(nullptr)
+        ,   m_pObject(nullptr)
+    {
+        if(nullptr != rSharedPointer.m_pRefCount)
+        {
+            rSharedPointer.m_pRefCount->inc();
+
+            m_pRefCount = rSharedPointer.m_pRefCount;
+            m_pObject = rSharedPointer.m_pObject;
+        }
+    }
+
+    template <class T>
+    shared_ptr<T>::~shared_ptr()
+    {
+        if(nullptr != m_pRefCount)
+        {
+            m_pRefCount->dec();
+            m_pRefCount = nullptr;
+            m_pObject = nullptr;
+        }
+    }
+
+    template <class T>
+    template <class T2>
+    shared_ptr<T>& shared_ptr<T>::operator=(const shared_ptr<T2> &rSharedPointer)
+    {
+        shared_ptr(rSharedPointer).swap(*this);
+
+        return *this;
+    }
+
+    template <class T>
+    shared_ptr<T>& shared_ptr<T>::operator=(const shared_ptr &rSharedPointer)
+    {
+        shared_ptr(rSharedPointer).swap(*this);
+
+        return *this;
+    }
+
+    template <class T>
+    void shared_ptr<T>::reset()
+    {
+        shared_ptr().swap(*this);
+    }
+    
+    template <class T>
+    template <class T2>
+    void shared_ptr<T>::reset(T2 *pObject)
+    {
+        shared_ptr(pObject).swap(*this);
+    }
+
+    template <class T>
+    T* shared_ptr<T>::get() const noexcept
+    {
+        return m_pObject;
+    }
+    
+    template <class T>
+    T& shared_ptr<T>::operator * () const noexcept
+    {
+        assert(m_pObject != nullptr);
+        return *m_pObject;
+    }
+    
+    template <class T>
+    T* shared_ptr<T>::operator -> () const noexcept
+    {
+        assert(m_pObject != nullptr);
+        return m_pObject;
+    }
+    
+    template <class T>
+    long shared_ptr<T>::use_count() const
+    {
+        if(nullptr == m_pRefCount)
+        {
+            return 0;
+        }
+
+        return m_pRefCount->use_count();
+    }
+    
+    template <class T>
+    bool shared_ptr<T>::unique() const
+    {
+        return (use_count() == 1);
+    }
+
+    template <class T>
+    void shared_ptr<T>::swap(shared_ptr &rSharedPointer) noexcept
+    {
+        swap(m_pObject, rSharedPointer.m_pObject);
+        swap(m_pRefCount, rSharedPointer.m_pRefCount);
+    }
+
+    template<class T, class T2>
+    shared_ptr<T> dynamic_pointer_cast(const shared_ptr<T2> &rSharedPointer)
+    {
+        return shared_ptr<T>(rSharedPointer, dynamic_cast_tag());
+    }
+
+    template <class T1, class T2>
+    bool operator==(const shared_ptr<T1>& sp1, const shared_ptr<T2>& sp2)
+    {
+        return sp1.get() == sp2.get();
+    }
+
+    template <class T1, class T2>
+    bool operator!=(const shared_ptr<T1>& sp1, const shared_ptr<T2>& sp2)
+    {
+        return sp1.get() != sp2.get();
+    }
+
+    template<class T>
+    bool operator==(const shared_ptr<T>& sp, std::nullptr_t)
+    {
+        return sp.get() == nullptr;
+    }
+
+    template<class T>
+    bool operator==(std::nullptr_t, const shared_ptr<T>& sp)
+    {
+        return sp.get() == nullptr;
+    }
+
+    template<class T>
+    bool operator!=(const shared_ptr<T>& sp, std::nullptr_t)
+    {
+        return sp.get() != nullptr;
+    }
+
+    template<class T>
+    bool operator!=(std::nullptr_t, const shared_ptr<T>& sp)
+    {
+        return sp.get() != nullptr;
+    }
+
+    template<class T, class U, typename std::enable_if<std::is_assignable<T*&, U*>::value, int>::type>
+    inline void SP_SET(shared_ptr<T>& target, U* rawPtr)
+    {
+        return target.reset(rawPtr);
+    }
+
+    template<class T>
+    inline void SP_RESET(shared_ptr<T>& target)
+    {
+        return target.reset();
+    }
+
+    template<class T, class U>
+    inline bool SP_ISEQUAL(const shared_ptr<T>& lhs, const shared_ptr<U>& rhs)
+    {
+        return lhs == rhs;
+    }
+
+    template<class T>
+    inline bool SP_ISNULL(const shared_ptr<T>& sp)
+    {
+        return nullptr == sp.get();
+    }
+
+    template<class T>
+    inline T* SP_ACCESS(const shared_ptr<T>& sp)
+    {
+        return sp.get();
+    }
+
+    template<class T, class U>
+    inline shared_ptr<T> SP_DYN_CAST(shared_ptr<U>& sp)
+    {
+        return dynamic_pointer_cast<T>(sp);
+    }
+
+} //namespace VmbCPP
+
+#endif //VMBCPP_SHAREDPOINTER_IMPL_H
diff --git a/VimbaX/api/include/VmbCPP/Stream.h b/VimbaX/api/include/VmbCPP/Stream.h
new file mode 100644
index 0000000000000000000000000000000000000000..bcca88e5bb17e94c63cbc3139fb7f63aaf09840c
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/Stream.h
@@ -0,0 +1,241 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Stream.h
+
+  Description: Definition of class VmbCPP::Stream.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_STREAM_H
+#define VMBCPP_STREAM_H
+
+/**
+* \file             Stream.h
+*
+* \brief            Definition of class VmbCPP::Stream.
+*/
+
+#include <string>
+
+#include <VmbC/VmbC.h>
+
+#include "ICapturingModule.h"
+#include "PersistableFeatureContainer.h"
+#include "UniquePointer.hpp"
+#include "VmbCPPCommon.h"
+
+
+namespace VmbCPP {
+
+/**
+ * \brief A class providing access to a single stream of a single camera.
+ * 
+ * The class provides functionality for acquiring data via the stream. Furthermore it
+ * provides access to information about the corresponding GenTL stream module.
+ */
+class Stream : public PersistableFeatureContainer, public ICapturingModule
+{
+public:
+  
+    /**  
+    *  \brief     Creates an instance of class Stream
+    * 
+    * \param[in]    streamHandle    Handle to the stream
+    * \param[in]    deviceIsOpen    Sets the internal status to know if the camera device is open or not
+    */  
+    IMEXPORT Stream(VmbHandle_t streamHandle, bool deviceIsOpen);
+
+    /**
+    * \brief Object is not default constructible 
+    */
+    Stream() = delete;
+
+    /**
+    * \brief Object is not copyable 
+    */
+    Stream(const Stream&) = delete;
+
+    /**
+    * \brief Object is not copyable
+    */
+    Stream& operator=(const Stream&) = delete;
+
+    /**
+    *
+    * \brief     Destroys an instance of class Stream.
+    *            Destroying a stream implicitly closes it beforehand.
+    */
+    IMEXPORT virtual ~Stream();
+
+    /**
+    *
+    * \brief     Opens the specified stream.
+    *
+    * \returns VmbErrorType
+    *
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorDeviceNotOpen  VmbSystem or Camera was not opened before the current command
+    */
+    IMEXPORT virtual VmbErrorType Open();
+
+    /**
+    *
+    * \brief     Closes the specified stream.
+    *
+    * \returns VmbErrorType
+    *
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorDeviceNotOpen  Camera was not opened before the current command
+    */
+    IMEXPORT virtual VmbErrorType Close();
+
+    /**
+    * \brief     Announces a frame to the API that may be queued for frame capturing later.
+    *            Allows some preparation for frames like DMA preparation depending on the transport layer.
+    *            The order in which the frames are announced is not taken in consideration by the API.
+    *
+    * \param[in ]  pFrame              Shared pointer to a frame to announce
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorDeviceNotOpen  Camera was not opened before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    * \retval ::VmbErrorBadParameter   "pFrame" is null.
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this version of the API
+    */
+    IMEXPORT virtual VmbErrorType AnnounceFrame(const FramePtr& pFrame) override;
+
+
+    /**
+    * \brief     Revoke a frame from the API.
+    *            The referenced frame is removed from the pool of frames for capturing images.
+    *
+    * \param[in ]  pFrame             Shared pointer to a frame that is to be removed from the list of announced frames
+    *
+    * \returns VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorDeviceNotOpen  Camera was not opened before the current command
+    * \retval ::VmbErrorBadHandle      The given frame pointer is not valid
+    * \retval ::VmbErrorBadParameter   "pFrame" is null.
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this version of the API
+    */
+    IMEXPORT virtual VmbErrorType RevokeFrame(const FramePtr& pFrame) override;
+
+
+    /**
+    * \brief     Revoke all frames assigned to this certain camera.
+    *
+    * \returns VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorDeviceNotOpen  Camera was not opened before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    */
+    IMEXPORT virtual VmbErrorType RevokeAllFrames() override;
+
+
+    /**
+    * \brief     Queues a frame that may be filled during frame capturing.
+    *
+    *  The given frame is put into a queue that will be filled sequentially.
+    *  The order in which the frames are filled is determined by the order in which they are queued.
+    *  If the frame was announced with AnnounceFrame() before, the application
+    *  has to ensure that the frame is also revoked by calling RevokeFrame() or RevokeAll()
+    *  when cleaning up.
+    *
+    * \param[in ]  pFrame             A shared pointer to a frame
+    *
+    * \returns VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorDeviceNotOpen  Camera was not opened before the current command
+    * \retval ::VmbErrorBadHandle      The given frame is not valid
+    * \retval ::VmbErrorBadParameter   "pFrame" is null.
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this version of the API
+    * \retval ::VmbErrorInvalidCall    StopContinuousImageAcquisition is currently running in another thread
+    */
+    IMEXPORT virtual VmbErrorType QueueFrame(const FramePtr& pFrame) override;
+
+
+    /**
+    * \brief     Flushes the capture queue.
+    *
+    * All currently queued frames will be returned to the user, leaving no frames in the input queue.
+    * After this call, no frame notification will occur until frames are queued again.
+    *
+    * \returns VmbErrorType
+    * 
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorDeviceNotOpen  Camera was not opened before the current command
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    */
+    IMEXPORT virtual VmbErrorType FlushQueue() override;
+
+
+    /**
+    * \brief     Prepare the API for incoming frames from this camera.
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorBadHandle      The given handle is not valid
+    * \retval ::VmbErrorDeviceNotOpen  Camera was not opened for usage
+    * \retval ::VmbErrorInvalidAccess  Operation is invalid with the current access mode
+    */
+    IMEXPORT virtual VmbErrorType StartCapture() noexcept override;
+
+
+    /**
+    * \brief     Stop the API from being able to receive frames from this camera.
+    *
+    * Consequences of VmbCaptureEnd():
+    *    - The frame queue is flushed
+    *    - The frame callback will not be called any more
+    *
+    * \returns VmbErrorType
+    * \retval ::VmbErrorSuccess       If no error
+    * \retval ::VmbErrorDeviceNotOpen Camera was not opened before the current command
+    * \retval ::VmbErrorBadHandle     The given handle is not valid
+    */
+    IMEXPORT virtual VmbErrorType EndCapture() noexcept override;
+
+    /**
+    * \brief    Retrieve the necessary buffer alignment size in bytes (equals 1 if Data Stream has no such restriction)
+    *
+    * \returns ::VmbErrorType
+    *
+    * \retval ::VmbErrorSuccess         If no error
+    * \retval ::VmbErrorApiNotStarted   VmbStartup() was not called before the current command
+    * \retval ::VmbErrorDeviceNotOpen  Camera was not opened before the current command
+    */
+    IMEXPORT virtual VmbErrorType GetStreamBufferAlignment(VmbUint32_t& nBufferAlignment) override;
+    
+private:
+    
+    struct Impl;
+    UniquePointer<Impl> m_pImpl;
+};
+
+    
+} // namespace VmbCPP
+
+#endif
\ No newline at end of file
diff --git a/VimbaX/api/include/VmbCPP/StringLike.hpp b/VimbaX/api/include/VmbCPP/StringLike.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..8361a62cd0cfd2272372591852d7799d6c766459
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/StringLike.hpp
@@ -0,0 +1,85 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        StringLike.hpp
+
+  Description: Helper functionality for types convertible to char const*.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_STRINGLIKE_HPP
+#define VMBCPP_STRINGLIKE_HPP
+
+/**
+* \file  StringLike.hpp
+*
+* \brief Helper functionality for types convertible to char const*
+*/
+#include <string>
+#include <type_traits>
+
+namespace VmbCPP {
+
+/**
+ * \brief Traits helping to determine, if a reference to a const object of type T
+ *        is convertible to `char const*`.
+ * 
+ * Specializations must provide a static constexpr bool member variable IsCStringLike.
+ * If this member variable evaluates to `true`, a static ToString function needs to be
+ * provided that takes `const T&` and returns `char const*`
+ * 
+ */
+template<class T>
+struct CStringLikeTraits
+{
+    /**
+     * \brief Marks objects as non-stringlike by default 
+     */
+    static constexpr bool IsCStringLike = false;
+};
+
+/**
+ * \brief CStringLikeTraits specialization for std::string 
+ */
+template<>
+struct CStringLikeTraits<std::string>
+{
+    /**
+     * \brief marks this type of object as stringlike 
+     */
+    static constexpr bool IsCStringLike = true;
+
+    /**
+     * \brief Conversion function for the stringlike object to `const char*`
+     * 
+     * \param[in]   str the object to retrieve the data from.
+     * 
+     * \return a c string pointing to the data of \p str
+     */
+    static char const* ToString(const std::string& str) noexcept
+    {
+        return str.c_str();
+    }
+};
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/TransportLayer.h b/VimbaX/api/include/VmbCPP/TransportLayer.h
new file mode 100644
index 0000000000000000000000000000000000000000..c637c3803e2d24064a8ea62595349fc2fe45c9b2
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/TransportLayer.h
@@ -0,0 +1,233 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        TransportLayer.h
+
+  Description: Definition of class VmbCPP::TransportLayer.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_TRANSPORTLAYER_H
+#define VMBCPP_TRANSPORTLAYER_H
+
+/**
+* \file      TransportLayer.h
+*
+* \brief     Definition of class VmbCPP::TransportLayer.
+*/
+
+#include <functional>
+#include <vector>
+
+#include <VmbC/VmbC.h>
+
+#include "Camera.h"
+#include "PersistableFeatureContainer.h"
+#include "UniquePointer.hpp"
+#include "VmbCPPCommon.h"
+
+namespace VmbCPP {
+
+/**
+ * \brief An alias for a vector of shared pointers to Camera.
+ */
+using CameraPtrVector = std::vector<CameraPtr>;
+
+/**
+ * \brief An alias for a vector of shared pointers to Interface.
+ */
+using InterfacePtrVector = std::vector<InterfacePtr>;
+
+/**
+ * \brief A class providing access to GenTL system module specific functionality and information.
+ */
+class TransportLayer : public PersistableFeatureContainer
+{
+public:
+
+    /**
+    * \brief Type for an std::function to retrieve a Transport Layer's interfaces
+    */
+    typedef std::function<VmbErrorType(const TransportLayer* pTransportLayer, InterfacePtr* pInterfaces, VmbUint32_t& size)> GetInterfacesByTLFunction;
+
+    /**
+    * \brief Type for an std::function to retrieve a Transport Layer's cameras
+    */
+    typedef std::function<VmbErrorType(const TransportLayer* pTransportLayer, CameraPtr* pCameras, VmbUint32_t& size)> GetCamerasByTLFunction;
+    
+    /**
+    * \brief Transport Layer constructor.
+    * 
+    * \param[out]   transportLayerInfo      The transport layer info struct
+    * \param[in]    getInterfacesByTL       The function used to find interfaces
+    * \param[in]    getCamerasByTL          The function used to find transport layers
+    * 
+    * \exception std::bad_alloc   not enough memory is available to store the data for the object constructed
+    */
+    TransportLayer(const VmbTransportLayerInfo_t& transportLayerInfo, GetInterfacesByTLFunction getInterfacesByTL, GetCamerasByTLFunction getCamerasByTL);
+
+    /**
+     * \brief the class is non-default-constructible
+     */
+    TransportLayer() = delete;
+
+    /**
+     * \brief the class is non-copyable
+     */
+    TransportLayer(const TransportLayer&) = delete;
+
+    /**
+      * \brief the class is non-copyable
+      */
+    TransportLayer& operator=(const TransportLayer&) = delete;
+
+    virtual ~TransportLayer() noexcept;
+
+    /**
+    * \brief     Get all interfaces related to this transport layer.
+    *
+    * \param[out]  interfaces         Returned list of related interfaces
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorBadHandle      The handle is not valid
+    * \retval ::VmbErrorResources      Resources not available (e.g. memory)
+    * \retval ::VmbErrorInternalFault  An internal fault occurred
+    */
+    VmbErrorType GetInterfaces(InterfacePtrVector& interfaces);
+
+    /**
+    * \brief     Get all cameras related to this transport layer.
+    *
+    * \param[out]  cameras         Returned list of related cameras
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorBadHandle      The handle is not valid
+    * \retval ::VmbErrorResources      Resources not available (e.g. memory)
+    * \retval ::VmbErrorInternalFault  An internal fault occurred
+    */
+    VmbErrorType GetCameras(CameraPtrVector& cameras);
+    
+    /**
+    * \brief     Gets the transport layer ID.
+    *
+    * \note    This information remains static throughout the object's lifetime
+    *
+    * \param[out]   transportLayerID          The ID of the transport layer
+    *
+    * \returns
+    * \retval ::VmbErrorSuccess        If no error
+    */
+    VmbErrorType GetID(std::string& transportLayerID) const noexcept;
+
+    /**
+    * \brief     Gets the transport layer name.
+    *
+    * \note    This information remains static throughout the object's lifetime
+    * 
+    * \param[out]   name          The name of the transport layer
+    *
+    * \returns
+    * \retval ::VmbErrorSuccess        If no error
+    */
+    VmbErrorType GetName(std::string& name) const noexcept;
+
+   /**
+   * \brief     Gets the model name of the transport layer.
+   *
+   * \note    This information remains static throughout the object's lifetime
+   * 
+   * \param[out]   modelName        The model name of the transport layer
+   *
+   * \returns
+   * \retval ::VmbErrorSuccess        If no error
+   */
+    VmbErrorType GetModelName(std::string& modelName) const noexcept;
+
+   /**
+   * \brief     Gets the vendor of the transport layer.
+   *
+   * \note    This information remains static throughout the object's lifetime
+   *
+   * \param[out]   vendor           The vendor of the transport layer
+   *
+   * \returns
+   * \retval ::VmbErrorSuccess        If no error
+   */
+    VmbErrorType GetVendor(std::string& vendor) const noexcept;
+
+   /**
+   * \brief     Gets the version of the transport layer.
+   *
+   * \note    This information remains static throughout the object's lifetime
+   *
+   * \param[out]   version          The version of the transport layer
+   *
+   * \returns
+   * \retval ::VmbErrorSuccess        If no error
+   */
+    VmbErrorType GetVersion(std::string& version) const noexcept;
+
+   /**
+   * \brief     Gets the full path of the transport layer.
+   *
+   * \note    This information remains static throughout the object's lifetime
+   *
+   * \param[out]   path             The full path of the transport layer
+   *
+   * \returns
+   * \retval ::VmbErrorSuccess        If no error
+   */
+    VmbErrorType GetPath(std::string& path) const noexcept;
+
+    /**
+    * \brief     Gets the type, e.g. GigE or USB of the transport layer.
+    * 
+    * \note    This information remains static throughout the object's lifetime
+    *
+    * \param[out]   type        The type of the transport layer
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    */
+    IMEXPORT VmbErrorType GetType(VmbTransportLayerType& type) const noexcept;
+  private:
+
+    struct Impl;
+    UniquePointer<Impl> m_pImpl;
+   
+    // Array functions to pass data across DLL boundaries
+    IMEXPORT VmbErrorType GetID(char* const pID, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType GetName(char* const name, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType GetModelName(char* const modelName, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType GetVendor(char* const vendor, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType GetVersion(char* const version, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType GetPath(char* const path, VmbUint32_t& length) const noexcept;
+    IMEXPORT VmbErrorType GetInterfaces(InterfacePtr* pInterfaces, VmbUint32_t& size);
+    IMEXPORT VmbErrorType GetCameras(CameraPtr* pCameras, VmbUint32_t& size);
+};
+
+} // namespace VmbCPP
+
+#include "TransportLayer.hpp"
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/TransportLayer.hpp b/VimbaX/api/include/VmbCPP/TransportLayer.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..84fbbcfa6a063e02b73118855e86f2477ed254d5
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/TransportLayer.hpp
@@ -0,0 +1,143 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        TransportLayer.hpp
+
+  Description: Inline wrapper functions for class VmbCPP::TransportLayer.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_TRANSPORTLAYER_HPP
+#define VMBCPP_TRANSPORTLAYER_HPP
+
+/**
+* \file  TransportLayer.hpp
+*
+* \brief Inline wrapper functions for class VmbCPP::TransportLayer
+*        that allocate memory for STL objects in the application's context
+*        and to pass data across DLL boundaries using arrays
+*/
+#include <utility>
+
+#include "CopyHelper.hpp"
+
+namespace VmbCPP {
+
+inline VmbErrorType TransportLayer::GetInterfaces( InterfacePtrVector &rInterfaces )
+{
+    VmbErrorType    res;
+    VmbUint32_t     nSize;
+
+    res = GetInterfaces(nullptr, nSize);
+    if (VmbErrorSuccess == res)
+    {
+        if (0 != nSize)
+        {
+            try
+            {
+                InterfacePtrVector tmpInterfaces(nSize);
+                res = GetInterfaces(&tmpInterfaces[0], nSize);
+                if (VmbErrorSuccess == res)
+                {
+                    tmpInterfaces.resize(nSize);
+                    rInterfaces = std::move(tmpInterfaces);
+                }
+            }
+            catch (...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            rInterfaces.clear();
+        }
+    }
+    return res;
+}
+
+inline VmbErrorType TransportLayer::GetCameras( CameraPtrVector &rCameras )
+{
+    VmbErrorType    res;
+    VmbUint32_t     nSize;
+
+    res = GetCameras(nullptr, nSize);
+    if (VmbErrorSuccess == res)
+    {
+        if (0 != nSize)
+        {
+            try
+            {
+                CameraPtrVector tmpCameras(nSize);
+                res = GetCameras(&tmpCameras[0], nSize);
+                if (VmbErrorSuccess == res)
+                {
+                    tmpCameras.resize(nSize);
+                    rCameras = std::move(tmpCameras);
+                }
+            }
+            catch (...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            rCameras.clear();
+        }
+    }
+    return res;
+}
+
+inline VmbErrorType TransportLayer::GetID( std::string &rStrID ) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rStrID, &TransportLayer::GetID);
+}
+
+inline VmbErrorType TransportLayer::GetName(std::string& rName) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rName, &TransportLayer::GetName);
+}
+
+inline VmbErrorType TransportLayer::GetModelName(std::string& rModelName) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rModelName, &TransportLayer::GetModelName);
+}
+
+inline VmbErrorType TransportLayer::GetVendor(std::string& rVendor) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rVendor, &TransportLayer::GetVendor);
+}
+
+inline VmbErrorType TransportLayer::GetVersion(std::string& rVersion) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rVersion, &TransportLayer::GetVersion);
+}
+
+inline VmbErrorType TransportLayer::GetPath(std::string& rPath) const noexcept
+{
+    return impl::ArrayGetHelper(*this, rPath, &TransportLayer::GetPath);
+}
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/UniquePointer.hpp b/VimbaX/api/include/VmbCPP/UniquePointer.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..55f33405ec8bc6098c030c96f626002f24b533a5
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/UniquePointer.hpp
@@ -0,0 +1,153 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        UniquePointer.hpp
+
+  Description: Definition of a class ensuring destruction of a stored object
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_UNIQUE_POINTER_H
+#define VMBCPP_UNIQUE_POINTER_H
+
+/**
+* \file      UniquePointer.hpp
+*
+* \brief     Definition of a smart pointer class that can be 
+*            used with VmbCPP.
+*/
+
+#include <cassert>
+#include <cstddef>
+#include <type_traits>
+
+namespace VmbCPP {
+
+/**
+ * \brief Smart pointer with sole ownership of the wrapped object.
+ * 
+ * \tparam the type of the object owned by the smart pointer
+ */
+template<class T>
+class UniquePointer
+{
+public:
+    /**
+     * \brief The type of object owned by this type this smart pointer type 
+     */
+    using ValueType = T;
+
+    /**
+     * \brief Constructor taking ownership of \p ptr
+     *
+     * \param[in]   ptr     The object to take ownership of; may be null
+     */
+    explicit UniquePointer(ValueType* ptr) noexcept
+        : m_ptr(ptr)
+    {
+    }
+
+    UniquePointer(UniquePointer const&) = delete;
+    UniquePointer& operator=(UniquePointer const&) = delete;
+
+    /**
+     * \brief Destroy this object freeing the owned object, if it exists. 
+     */
+    ~UniquePointer()
+    {
+        delete m_ptr;
+    }
+
+    /**
+     * \brief Change the value of this pointer to a new one.
+     *
+     * Frees a previously owned object
+     */
+    void reset(ValueType* newPtr)
+    {
+        delete m_ptr;
+        m_ptr = newPtr;
+    }
+    
+    /**
+     * \brief Member access to this pointer
+     *
+     * \note This function yields an assertion error, if the pointer is null 
+     */
+    ValueType* operator->() const noexcept
+    {
+        assert(m_ptr != nullptr);
+        return m_ptr;
+    }
+
+    /**
+     * \brief Dereferences this pointer
+     *
+     * \note This function yields an assertion error, if the pointer is null
+     */
+    ValueType& operator*() const noexcept
+    {
+        assert(m_ptr != nullptr);
+        return *m_ptr;
+    }
+
+    /**
+     * \brief Checks, if this pointer contains null
+     */
+    bool operator==(std::nullptr_t) const noexcept
+    {
+        return m_ptr == nullptr;
+    }
+
+    /**
+     * \brief Checks, if \p ptr contains null
+     * 
+     * \param[in] ptr the unique pointer to check for null
+     */
+    friend bool operator==(std::nullptr_t, UniquePointer const& ptr) noexcept
+    {
+        return ptr.m_ptr == nullptr;
+    }
+
+    /**
+     * \brief Checks, if this pointer contains something other than null
+     */
+    bool operator!=(std::nullptr_t) const noexcept
+    {
+        return m_ptr != nullptr;
+    }
+
+    /**
+     * \brief Checks, if \p ptr contains something other than null
+     * 
+     * \param[in] ptr   the pointer to check for null
+     */
+    friend bool operator!=(std::nullptr_t, UniquePointer const& ptr) noexcept
+    {
+        return ptr.m_ptr != nullptr;
+    }
+private:
+    ValueType* m_ptr;
+};
+
+} //namespace VmbCPP
+
+#endif // VMBCPP_UNIQUE_POINTER_H
diff --git a/VimbaX/api/include/VmbCPP/UserLoggerDefines.h b/VimbaX/api/include/VmbCPP/UserLoggerDefines.h
new file mode 100644
index 0000000000000000000000000000000000000000..9023eb0f8dfc330f705c95d92f960f88c60de08c
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/UserLoggerDefines.h
@@ -0,0 +1,65 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        UserLoggerDefines.h
+
+  Description: Definition of macros used for different logging methods.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_USERLOGGERDEFINES_H
+#define VMBCPP_USERLOGGERDEFINES_H
+
+/**
+* \file UserLoggerDefines.h
+* \brief Definition of macros used for different logging methods.
+*
+* To use your own logger implementation add the define USER_LOGGER to your project / compiler settings and complete this header file.
+*
+* Add all your required logger implementation headers here.
+* \p HINT: `#include "FileLogger.h"` is an example and can be safely removed.
+*/
+
+#include <utility>
+
+#include "FileLogger.h"
+
+namespace VmbCPP
+{
+
+    using Logger = FileLogger;
+
+    template<typename LoggingInfoType>
+    inline void LOGGER_LOG(Logger* logger, LoggingInfoType&& loggingInfo)
+    {
+        if (nullptr != logger)
+        {
+            logger->Log(std::forward<LoggingInfoType>(loggingInfo));
+        }
+    }
+
+    inline Logger* CreateLogger()
+    {
+        return new FileLogger("VmbCPP.log", true);
+    }
+}
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/UserSharedPointerDefines.h b/VimbaX/api/include/VmbCPP/UserSharedPointerDefines.h
new file mode 100644
index 0000000000000000000000000000000000000000..498f977f9c3a3103526a8449a7fe5e5f70658083
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/UserSharedPointerDefines.h
@@ -0,0 +1,133 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        UserSharedPointerDefines.h
+
+  Description: Definition of macros for using different shared pointer 
+               implementations.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_USERSHAREDPOINTERDEFINES_H
+#define VMBCPP_USERSHAREDPOINTERDEFINES_H
+
+/**
+* \file UserSharedPointerDefines.h
+* \brief Definition of macros for using different shared pointer implementations
+* 
+* VmbCPP does not necessarily rely on VmbCPP::shared_ptr. You might want to use your own shared pointer type or the one that ships with your
+* implementation of the C++ standard.
+* To use a custom shared pointer implementation simply add the define USER_SHARED_POINTER to your project / compiler settings and complete this header file.
+*
+* Set the calls for your implementation of the shared pointer functions
+* + Declaration
+* + Reset with argument
+* + Reset without argument
+* + == operator
+* + null test
+* + Access to underlying raw pointer
+* + Dynamic cast of shared pointer
+*
+* Add all your required shared pointer implementation headers here.
+* HINT: `#include <memory>` is used for std::shared_ptr
+*/
+
+#include <memory>
+#include <type_traits>
+
+namespace VmbCPP {
+
+
+
+/// This is the define for a declaration.
+template<class T>
+using SharedPointer = std::shared_ptr<T>;
+
+/**
+ * This is the define for setting an existing shared pointer.
+ * 
+ * The definition may also reside in the namespace of the shared pointer.
+ */
+template<class T, class U, typename std::enable_if<std::is_assignable<T*&, U*>::value, int>::type = 0>
+void SP_SET(std::shared_ptr<T>& sp, U* rawPtr)
+{
+    sp.reset(rawPtr);
+}
+
+/**
+ * This is the define for resetting without an argument to decrease the ref count.
+ *
+ * The definition may also reside in the namespace of the shared pointer.
+ */
+template<class T>
+void SP_RESET(std::shared_ptr<T>& sp) noexcept
+{
+    sp.reset();
+}
+
+/**
+ * This is the define for the equal operator. Shared pointers are usually considered equal when the raw pointers point to the same address.
+ *
+ * The definition may also reside in the namespace of the shared pointer.
+ */
+template<class T, class U>
+bool SP_ISEQUAL(const std::shared_ptr<T>& sp1, const std::shared_ptr<U>& sp2) noexcept
+{
+    return sp1 == sp2;
+}
+
+/**
+ * This is the define for the null check.
+ *
+ * The definition may also reside in the namespace of the shared pointer.
+ */
+template<class T>
+bool SP_ISNULL(const std::shared_ptr<T>& sp)
+{
+    return nullptr == sp;
+}
+
+/**
+ * This is the define for the raw pointer access. This is usually accomplished through the dereferencing operator (->).
+ *
+ * The definition may also reside in the namespace of the shared pointer.
+ */
+template<class T>
+T* SP_ACCESS(const std::shared_ptr<T>& sp) noexcept
+{
+    return sp.get();
+}
+
+/**
+ * This is the define for the dynamic cast of the pointer.
+ *
+ * The definition may also reside in the namespace of the shared pointer.
+ */
+template<class T, class U>
+std::shared_ptr<T> SP_DYN_CAST(const std::shared_ptr<U>& sp) noexcept
+{
+    return std::dynamic_pointer_cast<T>(sp);
+}
+
+} // namespace VmbCPP
+
+
+#endif //VMBCPP_USERSHAREDPOINTERDEFINES_H
diff --git a/VimbaX/api/include/VmbCPP/VmbCPP.h b/VimbaX/api/include/VmbCPP/VmbCPP.h
new file mode 100644
index 0000000000000000000000000000000000000000..87605daef74d582bd7447cdb58a91b3662b746bf
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/VmbCPP.h
@@ -0,0 +1,46 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbCPP.h
+
+  Description: Main include file for VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+/**
+* \file      VmbCPP.h
+*
+* \brief     Main include file for VmbCPP.
+*/
+
+// #include <VmbCPP/VmbCPPCommon.h>
+#include <VimbaX/api/include/VmbCPP/VmbCPPCommon.h>
+
+#include <VmbCPP/Camera.h>
+#include <VmbCPP/Interface.h>
+#include <VmbCPP/VmbSystem.h>
+#include <VmbCPP/FeatureContainer.h>
+#include <VmbCPP/ICameraFactory.h>
+#include <VmbCPP/ICameraListObserver.h>
+#include <VmbCPP/IInterfaceListObserver.h>
+#include <VmbCPP/IFeatureObserver.h>
+#include <VmbCPP/IFrameObserver.h>
+#include <VmbCPP/Frame.h>
diff --git a/VimbaX/api/include/VmbCPP/VmbCPPCommon.h b/VimbaX/api/include/VmbCPP/VmbCPPCommon.h
new file mode 100644
index 0000000000000000000000000000000000000000..f3c14758ff7eb62d857157a4c9577d6f88390107
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/VmbCPPCommon.h
@@ -0,0 +1,108 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2017 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbCPPCommon.h
+
+  Description: Common type definitions used in VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_CPPCOMMON_H
+#define VMBCPP_CPPCOMMON_H
+
+
+/**
+* \file VmbCPPCommon.h
+* \brief Common type definitions used in VmbCPP.
+*/
+
+#if defined (_WIN32)
+    #if defined VMBCPP_CPP_EXPORTS          // DLL exports
+        #define IMEXPORT __declspec(dllexport)
+    #elif defined VMBCPP_CPP_LIB            // static LIB
+        #define IMEXPORT
+    #else                                       // import
+        #define IMEXPORT __declspec(dllimport)
+    #endif
+#elif defined (__GNUC__) && (__GNUC__ >= 4) && defined (__ELF__)
+    #define IMEXPORT
+#elif defined (__APPLE__)
+    #define IMEXPORT
+#else
+    #error Unknown platform, file needs adaption
+#endif
+
+#include <string>
+#include <vector>
+#include <VmbC/VmbCommonTypes.h>
+
+namespace VmbCPP {
+
+
+/**
+*  \brief Trigger Types
+*/
+enum UpdateTriggerType
+{
+    UpdateTriggerPluggedIn           = 0,           //!< A new camera was discovered by VmbCPP
+    UpdateTriggerPluggedOut          = 1,           //!< A camera has disappeared from the bus
+    UpdateTriggerOpenStateChanged    = 3            //!< The possible opening mode of a camera has changed (e.g., because it was opened by another application)
+};
+
+/**
+*  \brief Indicate the frame allocation mode
+*/
+enum FrameAllocationMode
+{
+    FrameAllocation_AnnounceFrame = 0,          //!< Use announce frame mode
+    FrameAllocation_AllocAndAnnounceFrame = 1   //!< Use alloc and announce mode
+};
+
+/**
+ * \brief An alias for a vector of 64 bit unsigned integers. 
+ */
+typedef std::vector<VmbUint64_t>    Uint64Vector;
+
+/**
+ * \brief An alias for a vector of 64 bit signed integers.
+ */
+typedef std::vector<VmbInt64_t>     Int64Vector;
+
+/**
+ * \brief An alias for a vector of unsigned chars.
+ */
+typedef std::vector<VmbUchar_t>     UcharVector;
+
+/**
+ * \brief An alias for a vector of strings.
+ */
+typedef std::vector<std::string>    StringVector;
+
+class EnumEntry;
+
+/**
+ * \brief An alias for a vector of enum entries.
+ */
+typedef std::vector<EnumEntry>      EnumEntryVector;
+
+} // VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/VmbSystem.h b/VimbaX/api/include/VmbCPP/VmbSystem.h
new file mode 100644
index 0000000000000000000000000000000000000000..e4b1d4222cf3880b7757509e1c4e01d62f5e8227
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/VmbSystem.h
@@ -0,0 +1,460 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        VmbSystem.h
+
+  Description: Definition of class VmbCPP::VmbSystem.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_SYSTEM_H
+#define VMBCPP_SYSTEM_H
+
+/**
+* \file  VmbSystem.h
+*
+* \brief Definition of class VmbCPP::VmbSystem.
+*/
+
+#include <cstddef>
+#include <string>
+#include <type_traits>
+#include <utility>
+#include <vector>
+
+#include <VmbC/VmbC.h>
+
+#include "Camera.h"
+#include "ICameraFactory.h"
+#include "ICameraListObserver.h"
+#include "IInterfaceListObserver.h"
+#include "Interface.h"
+#include "LoggerDefines.h"
+#include "SharedPointerDefines.h"
+#include "StringLike.hpp"
+#include "TransportLayer.h"
+#include "UniquePointer.hpp"
+#include "VmbCPPCommon.h"
+
+
+namespace VmbCPP {
+
+/**
+ * \brief An alias for a vector of shared pointers to transport layers.
+ */
+using TransportLayerPtrVector = std::vector<TransportLayerPtr>;
+
+/**
+ * \brief A class providing access to functionality and information about the Vmb API itself.
+ * 
+ * A singleton object is provided by the GetInstance function.
+ * 
+ * Access to any information other than the version of the VmbCPP API can only be accessed
+ * after calling Startup and before calling Shutdown.
+ * 
+ * If a custom camera factory is used, this must be set before calling Startup.
+ */
+class VmbSystem : public FeatureContainer
+{
+public:
+    /**
+     * \brief the class is not copyable 
+     */
+    VmbSystem(const VmbSystem&) = delete;
+
+    /**
+     * \brief the class is not copyable 
+     */
+    VmbSystem& operator=(const VmbSystem& system) = delete;
+
+    /**
+    * \brief     Returns a reference to the System singleton.
+    * 
+    * \retval VmbSystem&
+    */
+    IMEXPORT static VmbSystem& GetInstance() noexcept;
+
+    /**
+    * \brief   Retrieve the version number of VmbCPP.
+    * 
+    * This function can be called at any time, even before the API is
+    * initialized. All other version numbers can be queried via feature access
+    * 
+    * \param[out]  version      Reference to the struct where version information is copied
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        always returned
+    */
+    IMEXPORT VmbErrorType QueryVersion( VmbVersionInfo_t &version ) const noexcept;
+    
+    /**
+     * \brief Initialize the VmbCPP module.
+     * 
+     * On successful return, the API is initialized; this is a necessary call.
+     * This method must be called before any other VmbCPP function is run.
+     * 
+     * \param[in] pathConfiguration     A string containing the semicolon separated list of paths. The paths contain directories to search for .cti files,
+     *                                  paths to .cti files and optionally the path to a configuration xml file. If null is passed the parameter is considered to contain the values
+     *                                  from the GENICAM_GENTLXX_PATH environment variable
+     * \returns
+     * \retval ::VmbErrorSuccess        If no error
+     * \retval ::VmbErrorInternalFault  An internal fault occurred
+     */
+    IMEXPORT VmbErrorType Startup(const VmbFilePathChar_t* pathConfiguration);
+
+    /**
+     * \brief Initialize the VmbCPP module (overload, without starting parameter pathConfiguration)
+     *
+     * On successful return, the API is initialized; this is a necessary call.
+     * This method must be called before any other VmbCPP function is run.
+     *
+     * \returns
+     * \retval ::VmbErrorSuccess        If no error
+     * \retval ::VmbErrorInternalFault  An internal fault occurred
+     */
+    IMEXPORT VmbErrorType Startup();
+
+    /**
+    * \brief   Perform a shutdown of the API module.
+    *          This will free some resources and deallocate all physical resources if applicable.
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        always returned
+    */
+    IMEXPORT VmbErrorType Shutdown();
+
+    /**
+    * \brief   List all the interfaces currently visible to VmbCPP.
+    * 
+    * All the interfaces known via a GenTL are listed by this command and filled into the vector provided.
+    * If the vector is not empty, new elements will be appended.
+    * Interfaces can be adapter cards or frame grabber cards, for instance.
+    * 
+    * \param[out]  interfaces       Vector of shared pointer to Interface object
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this API version
+    * \retval ::VmbErrorMoreData       More data were returned than space was provided
+    * \retval ::VmbErrorInternalFault  An internal fault occurred
+    */
+    VmbErrorType GetInterfaces( InterfacePtrVector &interfaces );
+
+    /**
+    * \brief   Gets a specific interface identified by an ID.
+    *
+    * An interface known via a GenTL is listed by this command and filled into the pointer provided.
+    * Interface can be an adapter card or a frame grabber card, for instance.
+    * 
+    * \param[in ]  pID                 The ID of the interface to get (returned by GetInterfaces())
+    * \param[out]  pInterface          Shared pointer to Interface object
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess           If no error
+    * \retval ::VmbErrorApiNotStarted     VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadParameter      \p pID is null.
+    * \retval ::VmbErrorStructSize        The given struct size is not valid for this API version
+    * \retval ::VmbErrorMoreData          More data were returned than space was provided
+    */
+    IMEXPORT VmbErrorType GetInterfaceByID( const char *pID, InterfacePtr &pInterface );
+
+    /**
+     * \brief null is not allowed as interface id parameter 
+     */
+    VmbErrorType GetInterfaceByID(std::nullptr_t, InterfacePtr&) = delete;
+
+    /**
+     * \brief Convenience function for calling GetInterfaceByID(char const*, InterfacePtr&)
+     *        with \p id converted to `const char*`.
+     *
+     * This is a convenience function for calling `GetInterfaceById(CStringLikeTraits<T>::%ToString(id), pInterface)`.
+     * 
+     * Types other than std::string may be passed to this function, if CStringLikeTraits is specialized
+     * before including this header.
+     * 
+     * \tparam T a type that is considered to be a c string like
+     */
+    template<class T>
+    typename std::enable_if<CStringLikeTraits<T>::IsCStringLike, VmbErrorType>::type GetInterfaceByID(const T& id, InterfacePtr& pInterface);
+
+    /**
+    * \brief   Retrieve a list of all cameras.
+    * 
+    * \param[out]  cameras            Vector of shared pointer to Camera object
+    *                                 A camera known via a GenTL is listed by this command and filled into the pointer provided.
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this API version
+    * \retval ::VmbErrorMoreData       More data were returned than space was provided
+    */
+    VmbErrorType GetCameras( CameraPtrVector &cameras );
+
+    /**
+    * \brief   Gets a specific camera identified by an ID. The returned camera is still closed.
+    *
+    * A camera known via a GenTL is listed by this command and filled into the pointer provided.
+    * Only static properties of the camera can be fetched until the camera has been opened.
+    * "pID" can be one of the following:
+    *  - "169.254.12.13" for an IP address,
+    *  - "000F314C4BE5" for a MAC address or
+    *  - "DEV_1234567890" for an ID as reported by VmbCPP
+    *
+    * \param[in ]  pID                 The ID of the camera to get
+    * \param[out]  pCamera             Shared pointer to camera object
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess           If no error
+    * \retval ::VmbErrorApiNotStarted     VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadParameter      \p pID is null.
+    * \retval ::VmbErrorStructSize        The given struct size is not valid for this API version
+    * \retval ::VmbErrorMoreData          More data were returned than space was provided
+    */
+    IMEXPORT VmbErrorType GetCameraByID( const char *pID, CameraPtr &pCamera );
+
+    /**
+     * \brief It's not possible to identify a camera given null as id.
+     */
+    VmbErrorType GetCameraByID(std::nullptr_t, CameraPtr&) = delete;
+
+    /**
+     * \brief Convenience function for calling GetCameraByID(char const*, CameraPtr&)
+     *        with \p id converted to `const char*`.
+     *
+     * This is a convenience function for calling `GetCameraByID(CStringLikeTraits<T>::%ToString(id), pCamera)`.
+     *
+     * Types other than std::string may be passed to this function, if CStringLikeTraits is specialized
+     * before including this header.
+     *
+     * \tparam IdType a type that is considered to be a c string like
+     */
+    template<class IdType>
+    typename std::enable_if<CStringLikeTraits<IdType>::IsCStringLike, VmbErrorType>::type
+    GetCameraByID(
+        const IdType& id,
+        VmbAccessModeType eAccessMode,
+        CameraPtr& pCamera);
+    
+    /**
+    * \brief     Gets a specific camera identified by an ID. The returned camera is already open.
+    *
+    * A camera can be opened if camera-specific control is required, such as I/O pins
+    * on a frame grabber card. Control is then possible via feature access methods.
+    * "pID" can be one of the following: 
+    *  - "169.254.12.13" for an IP address,
+    *  - "000F314C4BE5" for a MAC address or 
+    *  - "DEV_1234567890" for an ID as reported by VmbCPP
+    * 
+    * \param[in ]   pID                 The unique ID of the camera to get
+    * \param[in ]   eAccessMode         The requested access mode
+    * \param[out]   pCamera             A shared pointer to the camera
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess           If no error
+    * \retval ::VmbErrorApiNotStarted     VmbStartup() was not called before the current command
+    * \retval ::VmbErrorNotFound          The designated interface cannot be found
+    * \retval ::VmbErrorBadParameter      \p pID is null.
+    */
+    IMEXPORT VmbErrorType OpenCameraByID( const char *pID, VmbAccessModeType eAccessMode, CameraPtr &pCamera );
+
+    /**
+     * \brief It's not possible to identify a camera given null as id.
+     */
+    VmbErrorType OpenCameraByID(std::nullptr_t, VmbAccessModeType, CameraPtr& ) = delete;
+
+
+    /**
+     * \brief Convenience function for calling OpenCameraByID(char const*, VmbAccessModeType, CameraPtr&)
+     *        with \p id converted to `const char*`.
+     *
+     * This is a convenience function for calling
+     * `OpenCameraByID(CStringLikeTraits<T>::%ToString(id), eAccessMode, pCamera)`.
+     *
+     * Types other than std::string may be passed to this function, if CStringLikeTraits is specialized
+     * before including this header.
+     *
+     * \tparam IdType a type that is considered to be a c string like
+     */
+    template<class IdType>
+    typename std::enable_if<CStringLikeTraits<IdType>::IsCStringLike, VmbErrorType>::type
+        OpenCameraByID(
+            const IdType& id,
+            VmbAccessModeType eAccessMode,
+            CameraPtr& pCamera);
+
+    /**
+    * \brief     Registers an instance of camera observer whose CameraListChanged() method gets called
+    *            as soon as a camera is plugged in, plugged out, or changes its access status
+    * 
+    * \param[in ]       pObserver   A shared pointer to an object derived from ICameraListObserver
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess       If no error
+    * \retval ::VmbErrorBadParameter  \p pObserver is null.
+    * \retval ::VmbErrorInvalidCall   If the very same observer is already registered
+    */
+    IMEXPORT VmbErrorType RegisterCameraListObserver( const ICameraListObserverPtr &pObserver );
+
+    /**
+    * \brief     Unregisters a camera observer
+    * 
+    * \param[in ]       pObserver   A shared pointer to an object derived from ICameraListObserver
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess       If no error
+    * \retval ::VmbErrorNotFound      If the observer is not registered
+    * \retval ::VmbErrorBadParameter  \p pObserver is null.
+    */
+    IMEXPORT VmbErrorType UnregisterCameraListObserver( const ICameraListObserverPtr &pObserver );
+
+    /**
+    * \brief     Registers an instance of interface observer whose InterfaceListChanged() method gets called
+    *            as soon as an interface is plugged in, plugged out, or changes its access status
+    * 
+    * \param[in ]       pObserver   A shared pointer to an object derived from IInterfaceListObserver
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess       If no error
+    * \retval ::VmbErrorBadParameter  \p pObserver is null.
+    * \retval ::VmbErrorInvalidCall   If the very same observer is already registered
+    */
+    IMEXPORT VmbErrorType RegisterInterfaceListObserver( const IInterfaceListObserverPtr &pObserver );
+
+    /**
+    * \brief     Unregisters an interface observer
+    * 
+    * \param[in ]       pObserver   A shared pointer to an object derived from IInterfaceListObserver
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess       If no error
+    * \retval ::VmbErrorNotFound      If the observer is not registered
+    * \retval ::VmbErrorBadParameter  \p pObserver is null.
+    */
+    IMEXPORT VmbErrorType UnregisterInterfaceListObserver( const IInterfaceListObserverPtr &pObserver );
+
+    /**
+    * \brief     Registers an instance of camera factory. When a custom camera factory is registered, all instances of type camera
+    *            will be set up accordingly.
+    * 
+    * \param[in ]   pCameraFactory  A shared pointer to an object derived from ICameraFactory
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess       If no error
+    * \retval ::VmbErrorBadParameter  \p pCameraFactory is null.
+    */
+    IMEXPORT VmbErrorType RegisterCameraFactory( const ICameraFactoryPtr &pCameraFactory );
+
+    /**
+    * \brief     Unregisters the camera factory. After unregistering the default camera class is used.
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess       If no error
+    */
+    IMEXPORT VmbErrorType UnregisterCameraFactory();
+
+    
+    /**
+    * \brief        Retrieve a list of all transport layers.
+    *
+    * \param[out]  transportLayers      Vector of shared pointer to TransportLayer object
+    *
+    * \details     All transport layers known via GenTL are listed by this command and filled into the pointer provided.
+    * 
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess        If no error
+    * \retval ::VmbErrorApiNotStarted  VmbStartup() was not called before the current command
+    * \retval ::VmbErrorStructSize     The given struct size is not valid for this API version
+    * \retval ::VmbErrorMoreData       More data were returned than space was provided
+    *
+    */
+    VmbErrorType GetTransportLayers( TransportLayerPtrVector &transportLayers );
+    
+    /**
+    * \brief       Gets a specific transport layer identified by an ID.
+    * 
+    * \details     An interface known via a GenTL is listed by this command and filled into the pointer provided.
+    *              Interface can be an adapter card or a frame grabber card, for instance.
+    *
+    * \param[in ]  pID                     The ID of the interface to get (returned by GetInterfaces())
+    * \param[out]  pTransportLayer         Shared pointer to Transport Layer object
+    * 
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess           If no error
+    * \retval ::VmbErrorApiNotStarted     VmbStartup() was not called before the current command
+    * \retval ::VmbErrorBadParameter      \p pID is null.
+    * \retval ::VmbErrorStructSize        The given struct size is not valid for this API version
+    * \retval ::VmbErrorMoreData          More data were returned than space was provided
+    *
+    */
+    IMEXPORT VmbErrorType GetTransportLayerByID(const char* pID, TransportLayerPtr& pTransportLayer);
+
+    /**
+     * \brief Convenience function for calling GetTransportLayerByID(char const*, TransportLayerPtr&)
+     *        with \p id converted to `const char*`.
+     *
+     * This is a convenience function for calling
+     * `GetTransportLayerByID(CStringLikeTraits<T>::%ToString(id), pTransportLayer)`.
+     *
+     * Types other than std::string may be passed to this function, if CStringLikeTraits is specialized
+     * before including this header.
+     *
+     * \tparam T a type that is considered to be a c string like
+     */
+    template<class T>
+    typename std::enable_if<CStringLikeTraits<T>::IsCStringLike, VmbErrorType>::type
+        GetTransportLayerByID(T const& id, TransportLayerPtr& pTransportLayer);
+
+    /**
+     * \brief the transport layer cannot retrieved given null as id. 
+     */
+    VmbErrorType GetTransportLayerByID(std::nullptr_t, TransportLayerPtr&) = delete;
+    
+    /// Mapping of handle to CameraPtr
+    CameraPtr GetCameraPtrByHandle( const VmbHandle_t handle ) const;
+
+    /**
+     * \brief get the logger for the VmbCPP Api
+     *
+     * \return A pointer to the logger or null
+     */
+    Logger* GetLogger() const noexcept;
+
+  private:
+    /// Singleton.
+    static VmbSystem _instance;
+    VmbSystem();
+    ~VmbSystem() noexcept;
+    
+    struct Impl;
+    UniquePointer<Impl> m_pImpl;
+
+    IMEXPORT VmbErrorType GetCameras( CameraPtr *pCameras, VmbUint32_t &size );
+    IMEXPORT VmbErrorType GetInterfaces( InterfacePtr *pInterfaces, VmbUint32_t &size );
+    IMEXPORT VmbErrorType GetTransportLayers( TransportLayerPtr *pTransportLayers, VmbUint32_t &size ) noexcept;
+};
+
+} // namespace VmbCPP
+
+#include "VmbSystem.hpp"
+
+#endif
diff --git a/VimbaX/api/include/VmbCPP/VmbSystem.hpp b/VimbaX/api/include/VmbCPP/VmbSystem.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..9d791cd0ef37c72e4a6099d08a429b286b232955
--- /dev/null
+++ b/VimbaX/api/include/VmbCPP/VmbSystem.hpp
@@ -0,0 +1,183 @@
+#include "VmbSystem.h"
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+  -----------------------------------------------------------------------------
+
+  File:        VmbSystem.hpp
+
+  Description: Inline wrapper functions for class VmbCPP::VmbSystem.
+
+  -----------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_VMBSYSTEM_HPP
+#define VMBCPP_VMBSYSTEM_HPP
+
+/**
+* \file  VmbSystem.hpp
+*
+* \brief Inline wrapper functions for class VmbCPP::VmbSystem
+*        that allocate memory for STL objects in the application's context
+*        and to pass data across DLL boundaries using arrays
+*/
+
+namespace VmbCPP {
+
+inline VmbErrorType VmbSystem::GetInterfaces( InterfacePtrVector &rInterfaces )
+{
+    VmbErrorType    res;
+    VmbUint32_t     nSize;
+
+    res = GetInterfaces(nullptr, nSize );
+    if ( VmbErrorSuccess == res )
+    {
+        if( 0 != nSize)
+        {
+            try
+            {
+                InterfacePtrVector tmpInterfaces( nSize );
+                res = GetInterfaces( &tmpInterfaces[0], nSize );
+                if( VmbErrorSuccess == res )
+                {
+                    rInterfaces.swap( tmpInterfaces);
+                }
+            }
+            catch(...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            rInterfaces.clear();
+        }
+    }
+
+    return res;
+}
+
+inline VmbErrorType VmbSystem::GetCameras( CameraPtrVector &rCameras )
+{
+    VmbErrorType    res;
+    VmbUint32_t     nSize;
+
+    res = GetCameras(nullptr, nSize );
+    if (    VmbErrorSuccess == res)
+    {
+        if( 0 != nSize)
+        {
+            try
+            {
+                CameraPtrVector tmpCameras( nSize );
+                res = GetCameras( &tmpCameras[0], nSize );
+                if( VmbErrorSuccess == res )
+                {
+                    if( nSize < tmpCameras.size() )
+                    {
+                        tmpCameras.resize( nSize);
+                    }
+                    rCameras.swap( tmpCameras );
+                }
+            }
+            catch(...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            rCameras.clear();
+        }
+    }
+
+    return res;
+}
+
+inline VmbErrorType VmbSystem::GetTransportLayers( TransportLayerPtrVector &rTransportLayers )
+{
+    VmbErrorType    res;
+    VmbUint32_t     nSize;
+
+    res = GetTransportLayers(nullptr, nSize );
+    if ( VmbErrorSuccess == res )
+    {
+        if( 0 != nSize)
+        {
+            try
+            {
+                TransportLayerPtrVector tmpTransportLayers( nSize );
+                res = GetTransportLayers( &tmpTransportLayers[0], nSize );
+                if( VmbErrorSuccess == res )
+                {
+                    rTransportLayers.swap( tmpTransportLayers);
+                }
+            }
+            catch(...)
+            {
+                return VmbErrorResources;
+            }
+        }
+        else
+        {
+            rTransportLayers.clear();
+        }
+    }
+
+    return res;
+}
+
+template<class T>
+inline typename std::enable_if<CStringLikeTraits<T>::IsCStringLike, VmbErrorType>::type VmbSystem::GetInterfaceByID(const T& id, InterfacePtr& pInterface)
+{
+    static_assert(std::is_same<char const*, decltype(CStringLikeTraits<T>::ToString(id))>::value, "CStringLikeTraits<T>::ToString(const T&) does not return char const*");
+    return GetInterfaceByID(CStringLikeTraits<T>::ToString(id), pInterface);
+}
+
+template<class IdType>
+inline
+typename std::enable_if<CStringLikeTraits<IdType>::IsCStringLike, VmbErrorType>::type
+VmbSystem::OpenCameraByID(
+    const IdType& id,
+    VmbAccessModeType eAccessMode,
+    CameraPtr& pCamera)
+{
+    static_assert(std::is_same<char const*, decltype(CStringLikeTraits<IdType>::ToString(id))>::value,
+                  "CStringLikeTraits<IdType>::ToString(const IdType&) does not return char const*");
+    return OpenCameraByID(CStringLikeTraits<IdType>::ToString(id), eAccessMode, pCamera);
+}
+
+template<class T>
+inline typename std::enable_if<CStringLikeTraits<T>::IsCStringLike, VmbErrorType>::type VmbSystem::GetTransportLayerByID(T const& id, TransportLayerPtr& pTransportLayer)
+{
+    static_assert(std::is_same<char const*, decltype(CStringLikeTraits<T>::ToString(id))>::value,
+                  "CStringLikeTraits<T>::ToString(const IdType&) does not return char const*");
+    return GetTransportLayerByID(CStringLikeTraits<T>::ToString(id), pTransportLayer);
+}
+
+template<class IdType>
+inline typename std::enable_if<CStringLikeTraits<IdType>::IsCStringLike, VmbErrorType>::type VmbSystem::GetCameraByID(const IdType& id, VmbAccessModeType eAccessMode, CameraPtr& pCamera)
+{
+    static_assert(std::is_same<char const*, decltype(CStringLikeTraits<IdType>::ToString(id))>::value,
+                  "CStringLikeTraits<IdType>::ToString(const IdType&) does not return char const*");
+    return GetCameraByID(CStringLikeTraits<IdType>::ToString(id), pCamera);
+}
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/include/VmbCPPConfig/config.h b/VimbaX/api/include/VmbCPPConfig/config.h
new file mode 100644
index 0000000000000000000000000000000000000000..5e48cb5e9a942911f6ce4be508f63a6755f9716d
--- /dev/null
+++ b/VimbaX/api/include/VmbCPPConfig/config.h
@@ -0,0 +1 @@
+// VmbCPP configuration file
\ No newline at end of file
diff --git a/VimbaX/api/include/VmbImageTransform/VmbTransform.h b/VimbaX/api/include/VmbImageTransform/VmbTransform.h
new file mode 100644
index 0000000000000000000000000000000000000000..1de398b997ee03c9d00a59dca8002ddd7b4cf412
--- /dev/null
+++ b/VimbaX/api/include/VmbImageTransform/VmbTransform.h
@@ -0,0 +1,336 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this header file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbTransform.h
+
+  Description: Definition of image transform functions for the Vmb APIs.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+/**
+ * \file
+ */
+#ifndef VMB_TRANSFORM_H_
+#define VMB_TRANSFORM_H_
+#ifndef VMB_TRANSFORM
+#define VMB_TRANSFORM
+#endif
+
+#include <VmbImageTransform/VmbTransformTypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef VMBIMAGETRANSFORM_API
+#   ifndef VMB_NO_EXPORT
+#       ifdef VMB_EXPORTS
+#           if defined(__ELF__) && (defined(__clang__) || defined(__GNUC__))
+#               define VMBIMAGETRANSFORM_API __attribute__((visibility("default")))
+#           elif defined( __APPLE__ ) || defined(__MACH__)
+#               define VMBIMAGETRANSFORM_API __attribute__((visibility("default")))
+#           else
+#               ifndef _WIN64
+#                   define VMBIMAGETRANSFORM_API __declspec(dllexport) __stdcall
+#               else
+#                   define VMBIMAGETRANSFORM_API __stdcall
+#               endif
+#           endif
+#       else
+#           if defined (__ELF__) && (defined(__clang__) || defined(__GNUC__))
+#               define VMBIMAGETRANSFORM_API
+#           elif defined( __APPLE__ ) || defined(__MACH__)
+#               define VMBIMAGETRANSFORM_API
+#           else
+#               define VMBIMAGETRANSFORM_API __declspec(dllimport) __stdcall
+#           endif
+#       endif
+#   else
+#       define VMBIMAGETRANSFORM_API
+#   endif
+#endif
+
+/**
+ * \brief Inquire the library version.
+ *
+ * \param[out] value      Contains the library version (Major,Minor,Sub,Build).
+ *
+ * This function can be called at anytime, even before the library is initialized.
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess        The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter   \p value is null.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbGetImageTransformVersion ( VmbUint32_t*  value );
+
+/**
+ * \brief Get information about processor supported features.
+ *
+ * This should be called before using any SIMD (MMX,SSE) optimized functions.
+ *
+ * \param[out] technoInfo    Returns the supported SIMD technologies.
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess        The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter   If \p technoInfo is null.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbGetTechnoInfo( VmbTechInfo_t*  technoInfo );
+
+/**
+ * \brief Translate an Vmb error code to a human-readable string.
+ *
+ * \param[in]  errorCode       The error code to get a readable string for.
+ * \param[out] info            Pointer to a zero terminated string the error description is written to.
+ * \param[in]  maxInfoLength   The size of the \p info buffer.
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess        The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter   \p info is null, or if maxInfoLength is 0.
+ *
+ * \retval ::VmbErrorMoreData       If \p maxInfoLength is too small to hold the complete information.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbGetErrorInfo(VmbError_t     errorCode,
+                                                 VmbANSIChar_t* info,
+                                                 VmbUint32_t    maxInfoLength );
+
+/**
+ * \brief Get information about the currently loaded Vmb ImageTransform API.
+ *
+ *
+ * \p infoType may be one of the following values:
+ *  - ::VmbAPIInfoAll:         Returns all information about the API
+ *  - ::VmbAPIInfoPlatform:    Returns information about the platform the API was built for (x86 or x64)
+ *  - ::VmbAPIInfoBuild:       Returns info about the API built (debug or release)
+ *  - ::VmbAPIInfoTechnology:  Returns info about the supported technologies the API was built for (OpenMP or OpenCL)
+ *
+ * \param[in]   infoType        Type of information to return
+ * \param[out]  info            Pointer to a zero terminated string that
+ * \param[in]   maxInfoLength   The length of the \p info buffer
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess        The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter   \p info is null.
+ *
+ * \retval ::VmbErrorMoreData       If chars are insufficient \p maxInfoLength to hold the complete information.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbGetApiInfoString(VmbAPIInfo_t   infoType,
+                                                     VmbANSIChar_t* info,
+                                                     VmbUint32_t    maxInfoLength );
+
+/**
+ * \brief Set transformation options to a predefined debayering mode.
+ *
+ * The default mode is 2x2 debayering. Debayering modes only work for image widths and heights
+ * divisible by two.
+ *
+ * \param[in]     debayerMode     The mode used for debayering the raw source image.
+ *
+ * \param[in,out] transformInfo   Parameter that contains information about special
+ *                                transform functionality
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess        The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter   \p transformInfo is null.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbSetDebayerMode(VmbDebayerMode_t     debayerMode,
+                                                   VmbTransformInfo*    transformInfo );
+
+/**
+ * \brief Set transformation options to a 3x3 color matrix transformation.
+ *
+ * \param[in]       matrix          Color correction matrix.
+ *
+ * \param[in,out]   transformInfo   Parameter that is filled with information
+ *                                  about special transform functionality.
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess        The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter   If \p matrix or \p transformInfo are null.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbSetColorCorrectionMatrix3x3(const VmbFloat_t*   matrix,
+                                                                VmbTransformInfo*   transformInfo );
+
+/**
+ * \brief Initialize the give VmbTransformInfo with gamma correction information.
+ *
+ * \param[in]       gamma           Float gamma correction to set
+ * \param[in,out]   transformInfo   Transform info to set gamma correction to
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess        The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter   \p transformInfo is null.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbSetGammaCorrection(VmbFloat_t           gamma,
+                                                       VmbTransformInfo*    transformInfo );
+
+/**
+ * \brief Set the pixel related info of a VmbImage to the values appropriate for the given pixel format.
+ *
+ * A VmbPixelFormat_t can be obtained from Vmb C/C++ APIs frame.
+ * For displaying images, it is suggested to use ::VmbSetImageInfoFromString() or to look up
+ * a matching VmbPixelFormat_t.
+ *
+ * \param[in]       pixelFormat     The pixel format describes the pixel format to be used.
+ * \param[in]       width           The width of the image in pixels.
+ * \param[in]       height          The height of the image in pixels.
+ * \param[in,out]   image           A pointer to the image struct to write the info to.
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess        The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter  If \p image is null or one of the members of \p image is invalid.
+ *
+ * \retval ::VmbErrorStructSize    If the Size member of the image is incorrect.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbSetImageInfoFromPixelFormat(VmbPixelFormat_t    pixelFormat,
+                                                                VmbUint32_t         width,
+                                                                VmbUint32_t         height,
+                                                                VmbImage*           image);
+
+/**
+ * \brief Set image info member values in VmbImage from string.
+ *
+ * This function does not read or write to VmbImage::Data member.
+ *
+ * \param[in]       imageFormat     The string containing the image format. This parameter is case insensitive.
+ * \param[in]       width           The width of the image in pixels.
+ * \param[in]       height          The height of the image in pixels.
+ * \param[in,out]   image           A pointer to the image struct to write the info to.
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess        The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter   \p imageFormat or \p image are null.
+ *
+ * \retval ::VmbErrorStructSize     The Size member of \p image contains an invalid value.
+ *
+ * \retval ::VmbErrorResources      The function ran out of memory while processing.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbSetImageInfoFromString(const VmbANSIChar_t* imageFormat,
+                                                           VmbUint32_t          width,
+                                                           VmbUint32_t          height,
+                                                           VmbImage*            image);
+
+/**
+ * \brief Set output image dependent on the input image, user specifies pixel layout and bit depth of the out format.
+ *
+ * \param[in]    inputPixelFormat    Input Vmb pixel format
+ * \param[in]    width               width of the output image
+ * \param[in]    height              height of the output image
+ * \param[in]    outputPixelLayout   pixel component layout for output image
+ * \param[in]    bitsPerPixel        bit depth of output 8 and 16 supported
+ * \param[out]   outputImage         The output image to write the compatible format to.
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter       \p outputImage is null.
+ *
+ * \retval ::VmbErrorStructSize         The Size member of \p outputImage contains an invalid size.
+ *
+ * \retval ::VmbErrorNotImplemented     No suitable transformation is implemented.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbSetImageInfoFromInputParameters(VmbPixelFormat_t    inputPixelFormat,
+                                                                    VmbUint32_t         width,
+                                                                    VmbUint32_t         height,
+                                                                    VmbPixelLayout_t    outputPixelLayout,
+                                                                    VmbUint32_t         bitsPerPixel,
+                                                                    VmbImage*           outputImage);
+
+/**
+ * \brief Set output image compatible to input image with given layout and bit depth.
+ *        The output image will have same dimensions as the input image.
+ *
+ * \param[in]   inputImage          The input image with fully initialized image info elements.
+ * \param[in]   outputPixelLayout   The desired layout for the output image.
+ * \param[in]   bitsPerPixel        The desided bit depth for output image. 8 bit and 16 bit are supported.
+ * \param[out]  outputImage         The output image to write the compatible format to.
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess            The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter       \p inputImage or \p outputImage are null,
+ *                                      or the PixelInfo member of the ImageInfo member of the \p inputImage does not correspond to a supported pixel format.
+ *
+ * \retval ::VmbErrorStructSize         The Size member of \p outputImage contains an invalid size.
+ *
+ * \retval ::VmbErrorNotImplemented     No suitable transformation is implemented.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbSetImageInfoFromInputImage(const VmbImage*  inputImage,
+                                                               VmbPixelLayout_t outputPixelLayout,
+                                                               VmbUint32_t      bitsPerPixel,
+                                                               VmbImage*        outputImage);
+
+/**
+ * \brief Transform an image from one pixel format to another providing additional transformation options, if necessary.
+ *
+ * The transformation is defined by the provided images and the \p parameter.
+ *
+ * Create the source and destination image info structure with VmbSetImageInfoFromPixelFormat
+ * or VmbSetimageInfoFromString and keep those structures as template.
+ * For calls to transform, simply attach the image to the Data member.
+ * The optional parameters, when set, are constraints on the transform.
+ *
+ * \param[in]       source          The pointer to source image.
+ * \param[in,out]   destination     The pointer to destination image.
+ * \param[in]       parameter       An array of transform parameters; may be null.
+ * \param[in]       parameterCount  The number of transform parameters.
+ *
+ * \return An error code indicating success or the type of error.
+ *
+ * \retval ::VmbErrorSuccess        The call was successful.
+ *
+ * \retval ::VmbErrorBadParameter   if any image pointer or their "Data" members is NULL, or
+ *                                  if "Width" or "Height" don't match between source and destination, or
+ *                                  if one of the parameters for the conversion does not fit
+ *
+ * \retval ::VmbErrorStructSize     The Size member of \p source or \p destination contain an invalid value.
+ *
+ * \retval ::VmbErrorNotImplemented The transformation from the format of \p source to the format of \p destination is not implemented.
+ */
+VmbError_t VMBIMAGETRANSFORM_API VmbImageTransform(const VmbImage*          source,
+                                                   VmbImage*                destination,
+                                                   const VmbTransformInfo*  parameter,
+                                                   VmbUint32_t              parameterCount);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VMB_TRANSFORM_H_
diff --git a/VimbaX/api/include/VmbImageTransform/VmbTransformTypes.h b/VimbaX/api/include/VmbImageTransform/VmbTransformTypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..1464d7943abb88c73d8ba279aabc2b7d916a9d19
--- /dev/null
+++ b/VimbaX/api/include/VmbImageTransform/VmbTransformTypes.h
@@ -0,0 +1,1018 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this header file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        VmbTransformTypes.h
+
+  Description: Definition of types used in the Vmb Image Transform library.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+/**
+ * \file
+ */
+#ifndef VMB_TRANSFORM_TYPES_H_
+#define VMB_TRANSFORM_TYPES_H_
+
+#include <VmbC/VmbCommonTypes.h>
+
+/**
+ * \brief the type of character to use for strings. 
+ */
+typedef char                    VmbANSIChar_t;
+
+/**
+ * \brief The floating point type to use for matrices.
+ */
+typedef float                   VmbFloat_t;
+
+/**
+ * \brief Enumeration for the Bayer pattern.
+ */
+typedef enum VmbBayerPattern
+{
+    VmbBayerPatternRGGB=0,     //!< RGGB pattern, red pixel comes first
+    VmbBayerPatternGBRG,       //!< RGGB pattern, green pixel of blue row comes first
+    VmbBayerPatternGRBG,       //!< RGGB pattern, green pixel of red row comes first
+    VmbBayerPatternBGGR,       //!< RGGB pattern, blue pixel comes first
+    VmbBayerPatternCYGM=128,   //!< CYGM pattern, cyan pixel comes first in the first row, green in the second row (of the sensor)
+    VmbBayerPatternGMCY,       //!< CYGM pattern, green pixel comes first in the first row, cyan in the second row (of the sensor)
+    VmbBayerPatternCYMG,       //!< CYGM pattern, cyan pixel comes first in the first row, magenta in the second row (of the sensor)
+    VmbBayerPatternMGCY,       //!< CYGM pattern, magenta pixel comes first in the first row, cyan in the second row (of the sensor)
+    VmbBayerPatternLAST=255
+} VmbBayerPattern;
+
+/**
+ * \brief Type for an error returned by API methods; for values see ::VmbBayerPattern.
+ */
+typedef VmbUint32_t  VmbBayerPattern_t;
+
+/**
+ * \brief Enumeration for the endianness.
+ */
+typedef enum VmbEndianness
+{
+    VmbEndiannessLittle=0, //!< Little endian data format
+    VmbEndiannessBig,      //!< Big endian data format
+    VmbEndiannessLast=255
+} VmbEndianness;
+
+/**
+ * \brief Type for the endianness; for values see ::VmbEndianness.
+ */
+typedef VmbUint32_t VmbEndianness_t;
+
+/**
+ * \brief Enumeration for the image alignment.
+ */
+typedef enum VmbAlignment
+{
+    VmbAlignmentMSB=0,    //!< Data is MSB aligned (pppp pppp pppp ....)
+    VmbAlignmentLSB,      //!< Data is LSB aligned (.... pppp pppp pppp)
+    VmbAlignmentLAST=255
+} VmbAlignment;
+
+/**
+ * \brief Enumeration for the image alignment; for values see ::VmbAlignment
+ */
+typedef VmbUint32_t VmbAlignment_t;
+
+/**
+ * \name Library Info
+ * \defgroup Library Info
+ * \{
+ */
+
+/**
+ * \brief States of the multi media technology support for operating system and processor.
+ */
+typedef struct VmbSupportState_t
+{
+    VmbBool_t Processor;         //!< technology supported by the processor
+    VmbBool_t OperatingSystem;   //!< technology supported by the OS
+} VmbSupportState_t;
+
+/**
+ * \brief States of the support for different multimedia technologies
+ */
+typedef struct VmbTechInfo_t
+{
+    VmbSupportState_t IntelMMX;       //!< INTEL first gen MultiMedia eXtension
+    VmbSupportState_t IntelSSE;       //!< INTEL Streaming SIMD Extension
+    VmbSupportState_t IntelSSE2;      //!< INTEL Streaming SIMD Extension 2
+    VmbSupportState_t IntelSSE3;      //!< INTEL Streaming SIMD Extension 3
+    VmbSupportState_t IntelSSSE3;     //!< INTEL Supplemental Streaming SIMD Extension 3
+    VmbSupportState_t AMD3DNow;       //!< AMD 3DNow
+} VmbTechInfo_t;
+
+/**
+ * \brief API info types
+ */
+typedef enum VmbAPIInfo
+{
+    VmbAPIInfoAll,          //!< All the info (platform, build type and technologies)
+    VmbAPIInfoPlatform,     //!< Platform the api was build for
+    VmbAPIInfoBuild,        //!< build type (debug or release)
+    VmbAPIInfoTechnology,   //!< info about special technologies uses in building the API
+    VmbAPIInfoLast
+} VmbAPIInfo;
+
+/**
+ * \brief API info type; for values see ::VmbAPIInfo
+ */
+typedef VmbUint32_t VmbAPIInfo_t;
+
+/**
+ * \}
+ */
+
+/**
+ * \name Pixel Access Structs
+ * \defgroup Pixel Access Structs
+ * \{
+ */
+
+/**
+ * \brief Structure for accessing data in 12-bit transfer mode.
+ *
+ * Two pixel are coded into 3 bytes.
+ */
+typedef struct Vmb12BitPackedPair_t
+{
+    VmbUint8_t   m_nVal8_1       ;   //!< High byte of the first Pixel
+    VmbUint8_t   m_nVal8_1Low : 4;   //!< Low nibble of the first pixel
+    VmbUint8_t   m_nVal8_2Low : 4;   //!< Low nibble of the second pixel
+    VmbUint8_t   m_nVal8_2       ;   //!< High byte of the second pixel
+} Vmb12BitPackedPair_t;
+
+/**
+ * \brief Struct for accessing data of a 8 bit grayscale image stored as unsigned integer.
+ * 
+ * This corresponds to ::VmbPixelFormatMono8.
+ */
+typedef struct VmbMono8_t
+{
+#ifdef __cplusplus
+    typedef VmbUint8_t value_type;
+#endif
+    VmbUint8_t Y;   //!< gray part
+} VmbMono8_t;
+
+/**
+ * \brief Struct for accessing data of a 8 bit grayscale image stored as signed integer.
+ */
+typedef struct VmbMono8s_t
+{
+#ifdef __cplusplus
+    typedef VmbInt8_t value_type;
+#endif
+    VmbInt8_t Y;   //!< gray part
+} VmbMono8s_t;
+
+/**
+ * \brief Struct for accessing pixel data of a 10 bit mono padded buffer.
+ * 
+ * The pixel data is LSB aligned and little endianness encoded on little endian systems.
+ * 
+ * The pixel data is MSB aligned and big endianness encoded on big endian systems.
+ * 
+ * On little endian systems this corresponds to ::VmbPixelFormatMono10.
+ */
+typedef struct VmbMono10_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t Y;   //!< gray part
+} VmbMono10_t;
+
+/**
+ * \brief Struct for accessing pixel data of a 12 bit mono padded buffer.
+ *
+ * The pixel data is LSB aligned and little endianness encoded on little endian systems.
+ * 
+ * The pixel data is MSB aligned and big endianness encoded on big endian systems.
+ * 
+ * On little endian systems this corresponds to ::VmbPixelFormatMono12.
+ */
+typedef struct VmbMono12_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t Y;   //!< gray part
+} VmbMono12_t;
+
+/**
+ * \brief Struct for accessing pixel data of a 14 bit mono padded buffer.
+ * 
+ * The pixel data is LSB aligned and little endianness encoded on little endian systems.
+ * 
+ * The pixel data is MSB aligned and big endianness encoded on big endian systems.
+ * 
+ * On little endian systems this corresponds to ::VmbPixelFormatMono14.
+ */
+typedef struct VmbMono14_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t Y;   //!< gray part
+} VmbMono14_t;
+
+/**
+ * \brief Struct for accessing 16 bit grayscale image stored as unsigned integer.
+ * 
+ * The pixel data is LSB aligned and little endianness encoded on little endian systems.
+ * 
+ * The pixel data is MSB aligned and big endianness encoded on big endian systems.
+ * 
+ * On little endian systems this corresponds to ::VmbPixelFormatMono16.
+ */
+typedef struct VmbMono16_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t Y;   //!< gray part
+} VmbMono16_t;
+
+/**
+ * \brief Struct for accessing 16 bit grayscale image stored as signed integer.
+ */
+typedef struct VmbMono16s_t
+{
+#ifdef __cplusplus
+    typedef VmbInt16_t value_type;
+#endif
+    VmbInt16_t Y;   //!< gray part
+} VmbMono16s_t;
+
+/**
+ * \brief Structure for accessing RGB data using 8 bit per channel.
+ * 
+ * This corresponds to ::VmbPixelFormatRgb8
+ */
+typedef struct VmbRGB8_t
+{
+#ifdef __cplusplus
+    typedef VmbUint8_t value_type;
+#endif
+    VmbUint8_t R;   //!< red part
+    VmbUint8_t G;   //!< green part
+    VmbUint8_t B;   //!< blue part
+} VmbRGB8_t;
+
+/**
+ * \brief Structure for accessing RGB data using 10 bit per channel padded to 16 bit; 48 bits per pixel are used in total.
+ * 
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ * 
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ * 
+ * Corresponds to ::VmbPixelFormatRgb10 on little endian systems.
+ */
+typedef struct VmbRGB10_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t B;   //!< blue part
+} VmbRGB10_t;
+
+/**
+ * \brief Structure for accessing RGB data using 12 bit per channel padded to 16 bit; 48 bits per pixel are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatRgb12 on little endian systems.
+ */
+typedef struct VmbRGB12_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t B;   //!< blue part
+} VmbRGB12_t;
+
+/**
+ * \brief Structure for accessing RGB data using 14 bit per channel padded to 16 bit; 48 bits per pixel are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatRgb14 on little endian systems.
+ */
+typedef struct VmbRGB14_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t B;   //!< blue part
+} VmbRGB14_t;
+
+/**
+ * \brief Struct for accessing RGB pixels stored as 16 bit unsigend integer per channel.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatRgb16 on little endian systems.
+ */
+typedef struct VmbRGB16_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t B;   //!< blue part
+} VmbRGB16_t;
+
+/**
+ * \brief Structure for accessing BGR data using 8 bit per channel.
+ * 
+ * Corresponds to ::VmbPixelFormatBgr8
+ */
+typedef struct VmbBGR8_t
+{
+#ifdef __cplusplus
+    typedef VmbUint8_t value_type;
+#endif
+    VmbUint8_t B;   //!< blue part
+    VmbUint8_t G;   //!< green part
+    VmbUint8_t R;   //!< red part
+} VmbBGR8_t;
+
+/**
+ * \brief Structure for accessing BGR data using 10 bit per channel padded to 16 bit; 48 bits per pixel are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatBgr10 on little endian systems.
+ */
+typedef struct VmbBGR10_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t R;   //!< red part
+} VmbBGR10_t;
+
+/**
+ * \brief Structure for accessing BGR data using 12 bit per channel padded to 16 bit; 48 bits per pixel are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatBgr12 on little endian systems.
+ */
+typedef struct VmbBGR12_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t R;   //!< red part
+} VmbBGR12_t;
+
+/**
+ * \brief Structure for accessing BGR data using 14 bit per channel padded to 16 bit; 48 bits per pixel are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatBgr14 on little endian systems.
+ */
+typedef struct VmbBGR14_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t R;   //!< red part
+} VmbBGR14_t;
+
+/**
+ * \brief Structure for accessing BGR data using 16 bit per channel; 48 bits per pixel are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatBgr16 on little endian systems.
+ */
+typedef struct VmbBGR16_t
+{
+#ifdef __cplusplus
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t B;  //!< blue part
+    VmbUint16_t G;  //!< green part
+    VmbUint16_t R;  //!< red part
+} VmbBGR16_t;
+
+/**
+ * \brief Structure for accessing RGBA data using 8 bit per channel.
+ */
+typedef struct VmbRGBA8_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint8_t value_type;
+#endif
+    VmbUint8_t R;   //!< red part
+    VmbUint8_t G;   //!< green part
+    VmbUint8_t B;   //!< blue part
+    VmbUint8_t A;   //!< unused
+} VmbRGBA8_t;
+
+/**
+ * \brief Alias for ::VmbRGBA8_t
+ */
+typedef VmbRGBA8_t VmbRGBA32_t;
+
+/**
+ * \brief Structure for accessing BGRA data using 8 bit per channel.
+ *
+ * This corresponds to ::VmbPixelFormatBgra8
+ */
+typedef struct VmbBGRA8_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint8_t value_type;
+#endif
+    VmbUint8_t B;   //!< blue part
+    VmbUint8_t G;   //!< green part
+    VmbUint8_t R;   //!< red part
+    VmbUint8_t A;   //!< unused
+} VmbBGRA8_t;
+
+/**
+ * \brief Alias for ::VmbBGRA8_t
+ */
+typedef VmbBGRA8_t VmbBGRA32_t;
+
+/**
+ * \brief Struct for accessing ARGB values stored using a 8 bit unsigned integer per channel.
+ * 
+ * Corresponds to ::VmbPixelFormatArgb8
+ */
+typedef struct VmbARGB8_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint8_t value_type;
+#endif
+    VmbUint8_t A;   //!< unused
+    VmbUint8_t R;   //!< red part
+    VmbUint8_t G;   //!< green part
+    VmbUint8_t B;   //!< blue part
+} VmbARGB8_t;
+
+/**
+ * \brief Alias for ::VmbARGB8_t 
+ */
+typedef VmbARGB8_t VmbARGB32_t;
+
+/**
+ * \brief Structure for accessing BGRA data using a 8 bit unsigned integer per channel.
+ */
+typedef struct VmbABGR8_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint8_t value_type;
+#endif
+    VmbUint8_t A;   //!< unused
+    VmbUint8_t B;   //!< blue part
+    VmbUint8_t G;   //!< green part
+    VmbUint8_t R;   //!< red part
+} VmbABGR8_t;
+
+/**
+ * \brief Alias for ::VmbABGR8_t
+ */
+typedef VmbABGR8_t VmbABGR32_t;
+
+/**
+ * \brief Structure for accessing RGBA data using 10 bit per channel padded to 16 bit; 64 bit are used in total.
+ * 
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatRgba10 on little endian systems.
+ */
+typedef struct VmbRGBA10_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t A;   //!< unused
+} VmbRGBA10_t;
+
+/**
+ * \brief Structure for accessing BGRA data using 10 bit per channel padded to 16 bit; 64 bit are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatBgra10 on little endian systems.
+ */
+typedef struct VmbBGRA10_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t A;   //!< unused
+} VmbBGRA10_t;
+
+/**
+ * \brief Structure for accessing RGBA data using 12 bit per channel padded to 16 bit; 64 bit are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatRgba12 on little endian systems.
+ */
+typedef struct VmbRGBA12_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t A;   //!< unused
+} VmbRGBA12_t;
+
+/**
+ * \brief Structure for accessing RGBA data using 14 bit per channel padded to 16 bit; 64 bit are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatRgba14 on little endian systems.
+ */
+typedef struct VmbRGBA14_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t A;   //!< unused
+} VmbRGBA14_t;
+
+/**
+ * \brief Structure for accessing BGRA data using 12 bit per channel padded to 16 bit; 64 bit are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatBgra12 on little endian systems.
+ */
+typedef struct VmbBGRA12_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t A;   //!< unused
+} VmbBGRA12_t;
+
+/**
+ * \brief Structure for accessing BGRA data using 14 bit per channel padded to 16 bit; 64 bit are used in total.
+ *
+ * Each channel is LSB aligned and little endianness encoded on little endian systems.
+ *
+ * Each channel is MSB aligned and big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatBgra14 on little endian systems.
+ */
+typedef struct VmbBGRA14_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t A;   //!< unused
+} VmbBGRA14_t;
+
+/**
+ * \brief Structure for accessing RGBA data using 16 bit per channel.
+ *
+ * Each channel is little endianness encoded on little endian systems.
+ *
+ * Each channel is big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatRgba16 on little endian systems.
+ */
+typedef struct VmbRGBA16_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t A;   //!< unused
+} VmbRGBA16_t;
+
+/**
+ * \brief Alias for ::VmbRGBA16_t
+ */
+typedef VmbRGBA16_t VmbRGBA64_t;
+
+/**
+ * \brief Structure for accessing BGRA data using 16 bit per channel.
+ *
+ * Each channel is little endianness encoded on little endian systems.
+ *
+ * Each channel is big endianness encoded on big endian systems.
+ *
+ * Corresponds to ::VmbPixelFormatBgra16 on little endian systems.
+ */
+typedef struct VmbBGRA16_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint16_t value_type;
+#endif
+    VmbUint16_t B;   //!< blue part
+    VmbUint16_t G;   //!< green part
+    VmbUint16_t R;   //!< red part
+    VmbUint16_t A;   //!< unused
+} VmbBGRA16_t;
+
+/**
+ * \brief Alias for ::VmbBGRA64_t
+ */
+typedef VmbBGRA16_t VmbBGRA64_t;
+
+/**
+ * \brief Structure for accessing data in the YUV 4:4:4 format (YUV) prosilica component order.
+ * 
+ * Corresponds to ::VmbPixelFormatYuv444
+ */
+typedef struct VmbYUV444_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint8_t value_type;
+#endif
+    VmbUint8_t U;   //!< U
+    VmbUint8_t Y;   //!< Luma
+    VmbUint8_t V;   //!< V
+} VmbYUV444_t;
+
+/**
+ * \brief Structure for accessing data in the YUV 4:2:2 format (UYVY)
+ * 
+ * This struct provides data for 2 pixels (Y0, U, V) and (Y1, U, V)
+ * 
+ * Corresponds to ::VmbPixelFormatYuv422
+ */
+typedef struct VmbYUV422_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint8_t value_type;
+#endif
+    VmbUint8_t U;   //!< the U part for both pixels
+    VmbUint8_t Y0;  //!< the intensity of the first pixel
+    VmbUint8_t V;   //!< the V part for both pixels
+    VmbUint8_t Y1;  //!< the intensity of the second pixel
+} VmbYUV422_t;
+
+/**
+ * \brief Structure for accessing data in the YUV 4:1:1 format (UYYVYY)
+ * 
+ * This struct provides data for 2 pixels (Y0, U, V), (Y1, U, V), (Y2, U, V) and (Y3, U, V)
+ * 
+ * Corresponds to ::VmbPixelFormatYuv411
+ */
+typedef struct VmbYUV411_t
+{
+#ifdef __cplusplus
+    /**
+     * \brief The data type used to store one channel.
+     */
+    typedef VmbUint8_t value_type;
+#endif
+    VmbUint8_t U;   //!< the U part for all four pixels
+    VmbUint8_t Y0;  //!< the intensity of the first pixel
+    VmbUint8_t Y1;  //!< the intensity of the second pixel
+    VmbUint8_t V;   //!< the V part for all four pixels
+    VmbUint8_t Y2;  //!< the intensity of the third pixel
+    VmbUint8_t Y3;  //!< the intensity of the fourth pixel
+} VmbYUV411_t;
+
+/**
+ * \}
+ */
+
+/**
+ * \brief Image pixel layout information.
+ */
+typedef enum VmbPixelLayout
+{
+    VmbPixelLayoutMono,                                         //!< Monochrome pixel data; pixels are padded, if necessary. 
+    VmbPixelLayoutMonoPacked,                                   //!< Monochrome pixel data; pixels some bytes contain data for more than one pixel.
+    VmbPixelLayoutRaw,                                          //!< Some Bayer pixel format where pixels each byte contains only data for a single pixel.
+    VmbPixelLayoutRawPacked,                                    //!< Some Bayer pixel format where some bytes contain data for more than one pixel.
+    VmbPixelLayoutRGB,                                          //!< Non-packed RGB data in channel order R, G, B
+    VmbPixelLayoutBGR,                                          //!< Non-packed RGB data in channel order B, G, R
+    VmbPixelLayoutRGBA,                                         //!< Non-packed RGBA data in channel order R, G, B, A
+    VmbPixelLayoutBGRA,                                         //!< Non-packed RGBA data in channel order B, G, R, A
+    VmbPixelLayoutYUV411_UYYVYY,                                //!< YUV data; pixel order for 4 pixels is U, Y0, Y1, V, Y2, Y3
+    VmbPixelLayoutYUV411_YYUYYV,                                //!< YUV data; pixel order for 4 pixels is Y0, Y1, U, Y2, Y3, V
+    VmbPixelLayoutYUV422_UYVY,                                  //!< YUV data; pixel order for 2 pixels is U, Y0, V, Y1
+    VmbPixelLayoutYUV422_YUYV,                                  //!< YUV data; pixel order for 2 pixels is Y0, U, Y1, V
+    VmbPixelLayoutYUV444_UYV,                                   //!< YUV data; pixel order is U, Y, V
+    VmbPixelLayoutYUV444_YUV,                                   //!< YUV data; pixel order is Y, U, V
+    VmbPixelLayoutMonoP,                                        //!< Monochrome pixel data; pixels are padded, if necessary. \todo What is the difference to VmbPixelLayoutMono?
+    VmbPixelLayoutMonoPl,                                       //!< \todo unused, remove?
+    VmbPixelLayoutRawP,                                         //!< Some Bayer pixel format where pixels each byte contains only data for a single pixel. \todo What's the difference to VmbPixelLayoutRawPacked?
+    VmbPixelLayoutRawPl,                                        //!< \todo unused, remove?
+    VmbPixelLayoutYYCbYYCr411 = VmbPixelLayoutYUV411_YYUYYV,    //!< Alias for ::VmbPixelLayoutYUV411_YYUYYV
+    VmbPixelLayoutCbYYCrYY411 = VmbPixelLayoutYUV411_UYYVYY,    //!< Alias for ::VmbPixelLayoutYUV411_UYYVYY
+    VmbPixelLayoutYCbYCr422 = VmbPixelLayoutYUV422_YUYV,        //!< Alias for ::VmbPixelLayoutYUV422_YUYV
+    VmbPixelLayoutCbYCrY422 = VmbPixelLayoutYUV422_UYVY,        //!< Alias for ::VmbPixelLayoutYUV422_UYVY
+    VmbPixelLayoutYCbCr444 = VmbPixelLayoutYUV444_YUV,          //!< Alias for ::VmbPixelLayoutYUV444_YUV
+    VmbPixelLayoutCbYCr444 = VmbPixelLayoutYUV444_UYV,          //!< Alias for ::VmbPixelLayoutYUV444_UYV
+
+    VmbPixelLayoutLAST,
+} VmbPixelLayout;
+
+/**
+ * \brief Image pixel layout information; for values see ::VmbPixelLayout
+ */
+typedef VmbUint32_t VmbPixelLayout_t;
+
+/**
+ * \brief Image color space information.
+ */
+typedef enum VmbColorSpace
+{
+    VmbColorSpaceUndefined,
+    VmbColorSpaceITU_BT709, //!< \todo color space description
+    VmbColorSpaceITU_BT601, //!< \todo color space description
+
+} VmbColorSpace;
+
+/**
+ * \brief Image color space information; for values see ::VmbColorSpace
+ */
+typedef VmbUint32_t VmbColorSpace_t;
+
+/**
+ * \brief Image pixel information
+ */
+typedef struct VmbPixelInfo
+{
+    VmbUint32_t         BitsPerPixel;   //!< The number of bits used to store the data for one pixel
+    VmbUint32_t         BitsUsed;       //!< The number of bits that actually contain data.
+    VmbAlignment_t      Alignment;      //!< Indicates, if the most significant or the least significant bit is filled for pixel formats not using all bits of the buffer to store data.
+    VmbEndianness_t     Endianness;     //!< Endianness of the pixel data
+    VmbPixelLayout_t    PixelLayout;    //!< Channel order, and in case of YUV formats relative order.
+    VmbBayerPattern_t   BayerPattern;   //!< The bayer pattern
+    VmbColorSpace_t     Reserved;       //!< Unused member reserved for future use.
+} VmbPixelInfo;
+
+/**
+ * \brief Struct containing information about the image data in the Data member of a ::VmbImage.
+ */
+typedef struct VmbImageInfo
+{
+    VmbUint32_t     Width;      //!< The width of the image in pixels
+    VmbUint32_t     Height;     //!< The height of the image in pixels
+    VmbInt32_t      Stride;     //!< \todo description; do we actually use this
+    VmbPixelInfo    PixelInfo;  //!< Information about the pixel format
+} VmbImageInfo;
+
+/**
+ * \brief vmb image type
+ */
+typedef struct VmbImage
+{
+    VmbUint32_t     Size;       //!< The size of this struct; If set incorrectly, API functions will return ::VmbErrorStructSize
+    void*           Data;       //!< The image data
+    VmbImageInfo    ImageInfo;  //!< Information about pixel format, size, and stride of the image.
+
+} VmbImage;
+
+/**
+ * \brief Transform info for special debayering modes.
+ */
+typedef enum VmbDebayerMode
+{
+    VmbDebayerMode2x2,      //!< \todo description
+    VmbDebayerMode3x3,      //!< \todo description
+    VmbDebayerModeLCAA,     //!< \todo description
+    VmbDebayerModeLCAAV,    //!< \todo description
+    VmbDebayerModeYUV422,   //!< \todo description
+} VmbDebayerMode;
+
+/**
+ * \brief Transform info for special debayering mode; for values see ::VmbDebayerMode
+ */
+typedef VmbUint32_t  VmbDebayerMode_t;
+
+/**
+ * \name Transformation Parameters
+ * \defgroup Transformation Parameters
+ * \{
+ */
+
+/**
+ * \brief Transform parameter types.
+ */
+typedef enum VmbTransformType
+{
+    VmbTransformTypeNone,                   //!< Invalid type
+    VmbTransformTypeDebayerMode,            //!< Debayering mode
+    VmbTransformTypeColorCorrectionMatrix,  //!< Color correction matrix
+    VmbTransformTypeGammaCorrection,        //!< Gamma correction
+    VmbTransformTypeOffset,                 //!< Offset
+    VmbTransformTypeGain,                   //!< Gain
+} VmbTransformType;
+
+/**
+ * \brief Transform parameter type; for avalues see ::VmbTransformType
+ */
+typedef VmbUint32_t VmbTransformType_t;
+
+/**
+ * \brief Struct definition for holding the debayering mode.
+ *
+ * The struct is used to pass the data to ::VmbImageTransform via transform parameter.
+ * It corresponds to the ::VmbTransformTypeDebayerMode parameter type.
+ */
+typedef struct VmbTransformParameteDebayer
+{
+    VmbDebayerMode_t  Method; //!< The DeBayering method to use.
+} VmbTransformParameterDebayer;
+
+
+/**
+ * \brief Transform info for color correction using a 3x3 matrix multiplication.
+ *
+ * The struct is used to pass the data to ::VmbImageTransform via transform parameter.
+ * It corresponds to the ::VmbTransformTypeColorCorrectionMatrix parameter type.
+ *
+ * \todo what does each index represent; how to get from 2d to 1d?
+ */
+typedef struct VmbTransformParameterMatrix3x3
+{
+    VmbFloat_t          Matrix[9]; //!< The color correction matrix to use for the transformation.
+} VmbTransformParameterMatrix3x3;
+
+/**
+ * \brief Struct definition for a gamma value.
+ *
+ * This is currently not supported by ::VmbImageTransform.
+ * It corresponds to the ::VmbTransformTypeGammaCorrection parameter type.
+ */
+typedef struct VmbTransformParameterGamma
+{
+    VmbFloat_t          Gamma; //!< The gamma value to use for the transformation
+} VmbTransformParameterGamma;
+
+/**
+ * \brief Struct definition for holding the offset to pass via transform parameter.
+ *
+ * The struct is used to pass the data to ::VmbImageTransform via transform parameter.
+ * It corresponds to the ::VmbTransformTypeOffset parameter type.
+ */
+typedef struct VmbTransformParameterOffset
+{
+    VmbInt32_t Offset; //!< The offset to use for the transformation.
+} VmbTransformParameterOffset;
+
+/**
+ * \brief Struct definition for holding the gain value.
+ *
+ * The struct is used to pass the data to ::VmbImageTransform via transform parameter.
+ * It corresponds to the ::VmbTransformTypeGain parameter type.
+ */
+typedef struct VmbTransformParameterGain
+{
+    VmbUint32_t Gain; //!< The gain to use for the transformation
+} VmbTransformParameterGain;
+
+/**
+ * \brief Union for possible transformation parameter types.
+ *
+ * Each possible data type corresponds to a constant of ::VmbTransformType.
+ */
+typedef union VmbTransformParameter
+{
+    VmbTransformParameterMatrix3x3  Matrix3x3;  //!< A matrix with 3 rows and 3 columns.
+    VmbTransformParameterDebayer    Debayer;    //!< A debayering mode
+    VmbTransformParameterGamma      Gamma;      //!< A gamma value
+    VmbTransformParameterOffset     Offset;     //!< \todo offset (is this even used?)
+    VmbTransformParameterGain       Gain;       //!< A gain value
+} VmbTransformParameter;
+
+/**
+ * \}
+ */
+
+/**
+ * \brief Transform info interface structure.
+ */
+typedef struct VmbTransformInfo
+{
+    VmbTransformType_t      TransformType;  //!< The type of the information stored in the Parameter member.
+    VmbTransformParameter   Parameter;      //!< The parameter data.
+} VmbTransformInfo;
+
+#endif // VMB_TRANSFORM_TYPES_H_
diff --git a/VimbaX/api/lib/GenICam/libGCBase_GNU8_4_0_v3_2_AVT.so b/VimbaX/api/lib/GenICam/libGCBase_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..b94a76fcb5d22229534d0cb33a1f5715d76eeea6
Binary files /dev/null and b/VimbaX/api/lib/GenICam/libGCBase_GNU8_4_0_v3_2_AVT.so differ
diff --git a/VimbaX/api/lib/GenICam/libGenApi_GNU8_4_0_v3_2_AVT.so b/VimbaX/api/lib/GenICam/libGenApi_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..467e03b283283a584531553f96e9cdedfcebb1be
Binary files /dev/null and b/VimbaX/api/lib/GenICam/libGenApi_GNU8_4_0_v3_2_AVT.so differ
diff --git a/VimbaX/api/lib/GenICam/libLog_GNU8_4_0_v3_2_AVT.so b/VimbaX/api/lib/GenICam/libLog_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..be336e10f254a0d16943b2da616eae723f6a678e
Binary files /dev/null and b/VimbaX/api/lib/GenICam/libLog_GNU8_4_0_v3_2_AVT.so differ
diff --git a/VimbaX/api/lib/GenICam/libMathParser_GNU8_4_0_v3_2_AVT.so b/VimbaX/api/lib/GenICam/libMathParser_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..d35f8e71ec53130aa8e15c5ee4bb7185ff74536c
Binary files /dev/null and b/VimbaX/api/lib/GenICam/libMathParser_GNU8_4_0_v3_2_AVT.so differ
diff --git a/VimbaX/api/lib/GenICam/libNodeMapData_GNU8_4_0_v3_2_AVT.so b/VimbaX/api/lib/GenICam/libNodeMapData_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..612a0ceadbdaa59e1b5f25f721585cca1e54ae08
Binary files /dev/null and b/VimbaX/api/lib/GenICam/libNodeMapData_GNU8_4_0_v3_2_AVT.so differ
diff --git a/VimbaX/api/lib/GenICam/libXmlParser_GNU8_4_0_v3_2_AVT.so b/VimbaX/api/lib/GenICam/libXmlParser_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..7e6d76ba4096bf68ef4b34bdc3933f0f8f94bda8
Binary files /dev/null and b/VimbaX/api/lib/GenICam/libXmlParser_GNU8_4_0_v3_2_AVT.so differ
diff --git a/VimbaX/api/lib/GenICam/liblog4cpp_GNU8_4_0_v3_2_AVT.so b/VimbaX/api/lib/GenICam/liblog4cpp_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..4e028fe43d48f3c3afd93d259174518dee7c82bb
Binary files /dev/null and b/VimbaX/api/lib/GenICam/liblog4cpp_GNU8_4_0_v3_2_AVT.so differ
diff --git a/VimbaX/api/lib/VmbC.xml b/VimbaX/api/lib/VmbC.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d826fbb0340b908efd0667d27385fb2ca886dbce
--- /dev/null
+++ b/VimbaX/api/lib/VmbC.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" standalone="no" ?>
+<Settings>
+
+    <!--
+            Use this to activate logging and set filename for logging (path can be absolute or relative to API)
+            Default behavior if omitted:    Logging is deactivated
+    -->
+    <!-- <LogFileName>VmbC.log</LogFileName> -->
+    
+
+    <!--
+            Append messages to log file or reset log file at each API restart (if logging is enabled)
+            True:                           Always append log messages
+            False:                          Reset log file at each API restart
+            Default behavior if omitted:    Reset log file at each API restart
+    -->		
+	<!-- <AppendLog>False</AppendLog> -->
+
+
+    <TlLoading>
+
+        <CtiPaths>
+            <!-- <Path required="false">.</Path> -->
+        </CtiPaths>
+        
+        <!--    
+        <TlVendor vendor-type="AVT" active="true"/>
+        -->
+
+        <!--
+        <InterfaceType type="GEV" active="true"/>
+        -->
+
+        <!-- poll for interfaces every 2000 ms -->
+        <InterfacePollingPeriod>2000</InterfacePollingPeriod>
+        
+        <!--
+        <DevicePollingPeriod tl-vendor="NET" interface-type="GEV">20</DevicePollingPeriod>
+        -->
+
+        <!--
+        <UpdateDeviceListTimeout tl-vendor="NET" interface-type="GEV">50</UpdateDeviceListTimeout>
+        -->
+
+    </TlLoading>
+
+</Settings>
diff --git a/VimbaX/api/lib/cmake/vmb/configs/vmb_c-release.cmake b/VimbaX/api/lib/cmake/vmb/configs/vmb_c-release.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..052f2af548e4c0922f04ab26664730d965333fc5
--- /dev/null
+++ b/VimbaX/api/lib/cmake/vmb/configs/vmb_c-release.cmake
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "Release".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "Vmb::C" for configuration "Release"
+set_property(TARGET Vmb::C APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+set_target_properties(Vmb::C PROPERTIES
+  IMPORTED_LINK_DEPENDENT_LIBRARIES_RELEASE "GenApi"
+  IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libVmbC.so"
+  IMPORTED_SONAME_RELEASE "libVmbC.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS Vmb::C )
+list(APPEND _IMPORT_CHECK_FILES_FOR_Vmb::C "${_IMPORT_PREFIX}/lib/libVmbC.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/VimbaX/api/lib/cmake/vmb/configs/vmb_c.cmake b/VimbaX/api/lib/cmake/vmb/configs/vmb_c.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..2454510c9b81d744449606dadbf4154111f8360b
--- /dev/null
+++ b/VimbaX/api/lib/cmake/vmb/configs/vmb_c.cmake
@@ -0,0 +1,95 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.21)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget Vmb::C)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target Vmb::C
+add_library(Vmb::C SHARED IMPORTED)
+
+set_target_properties(Vmb::C PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
+)
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/vmb_c-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)
diff --git a/VimbaX/api/lib/cmake/vmb/configs/vmb_cpp-release.cmake b/VimbaX/api/lib/cmake/vmb/configs/vmb_cpp-release.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..231da46def75c30e982604f9c861460155d9bf8c
--- /dev/null
+++ b/VimbaX/api/lib/cmake/vmb/configs/vmb_cpp-release.cmake
@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "Release".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "Vmb::CPP" for configuration "Release"
+set_property(TARGET Vmb::CPP APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+set_target_properties(Vmb::CPP PROPERTIES
+  IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libVmbCPP.so"
+  IMPORTED_SONAME_RELEASE "libVmbCPP.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS Vmb::CPP )
+list(APPEND _IMPORT_CHECK_FILES_FOR_Vmb::CPP "${_IMPORT_PREFIX}/lib/libVmbCPP.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/VimbaX/api/lib/cmake/vmb/configs/vmb_cpp.cmake b/VimbaX/api/lib/cmake/vmb/configs/vmb_cpp.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..b9d8494e23004bf9b9a28f77e3d895d7cc75b902
--- /dev/null
+++ b/VimbaX/api/lib/cmake/vmb/configs/vmb_cpp.cmake
@@ -0,0 +1,117 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.21)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget Vmb::CPP)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target Vmb::CPP
+add_library(Vmb::CPP SHARED IMPORTED)
+
+set_target_properties(Vmb::CPP PROPERTIES
+  INTERFACE_COMPILE_FEATURES "cxx_std_11"
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
+  INTERFACE_LINK_LIBRARIES "Vmb::C"
+)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+  message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/vmb_cpp-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# Make sure the targets which have been exported in some other
+# export set exist.
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+foreach(_target "Vmb::C" )
+  if(NOT TARGET "${_target}" )
+    set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}")
+  endif()
+endforeach()
+
+if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+  if(CMAKE_FIND_PACKAGE_NAME)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  else()
+    message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  endif()
+endif()
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)
diff --git a/VimbaX/api/lib/cmake/vmb/configs/vmb_cpp_sources.cmake b/VimbaX/api/lib/cmake/vmb/configs/vmb_cpp_sources.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..4487238221cfc109e531df9aabca18fc0d0f913f
--- /dev/null
+++ b/VimbaX/api/lib/cmake/vmb/configs/vmb_cpp_sources.cmake
@@ -0,0 +1,392 @@
+# project template for VmbCPP
+
+if (CMAKE_VERSION VERSION_LESS 3.5)
+    find_package(CMakeParseArguments MODULE REQUIRED)
+endif()
+
+# usage: vmb_argument(<var name without PARAMS_ prefix> [DEFAULT <default>] [POSSIBILITIES <possibility>...]
+function(vmb_argument VAR)
+    cmake_parse_arguments(
+        PARAMS
+        ""              # options
+        "DEFAULT"       # single value params
+        "POSSIBILITIES" # multi value params
+        ${ARGN}
+    )
+    if (NOT DEFINED "PARAMS_${VAR}")
+        if (DEFINED PARAMS_DEFAULT)
+            set("PARAMS_${VAR}" ${PARAMS_DEFAULT} PARENT_SCOPE)
+        endif()
+    elseif(DEFINED PARAMS_POSSIBILITIES)
+        list(FIND PARAMS_POSSIBILITIES ${PARAMS_${VAR}} FOUND_INDEX)
+        if (FOUND_INDEX EQUAL -1)
+            message(FATAL_ERROR "invalid value for ${VAR}: ${PARAMS_${VAR}}\nexpected one of ${PARAMS_POSSIBILITIES}")
+        endif()
+    endif()
+endfunction()
+
+function(vmb_source_group VAR DIR GROUP_NAME)
+    set(SRCS)
+    foreach(_SOURCE IN ITEMS ${ARGN})
+        list(APPEND SRCS "${DIR}/${_SOURCE}")
+    endforeach()
+    source_group(${GROUP_NAME} FILES ${SRCS})
+    set(${VAR} ${${VAR}} ${SRCS} PARENT_SCOPE)
+endfunction()
+
+set(VMB_CPP_TEMPLATE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_DIR} CACHE INTERNAL "Path to VmbCppTemplate.cmake")
+
+# parameters:
+#  * required:
+#    - TARGET_NAME <name>
+#  * optional:
+#   - TYPE [STATIC|SHARED]                                      the library type; defaults to SHARED 
+#   - USER_INCLUDE_DIRS [<dir>...]                              directories to append to the include dirs
+#   - GENERATED_INCLUDES_DIR <dir>                              directory to place the generated header in;
+#                                                               defaults to "${CMAKE_CURRENT_BINARY_DIR}/VmbCppGenIncludes"
+#
+#   - FILE_LOGGER_HEADER <header name to use in config.h>       the parameter following this one lists the file name of the custom file logger define header;
+#                                                               defaults to VmbCPP/UserLoggerDefines.h
+#
+#   - SHARED_POINTER_HEADER <header name to use in config.h>    the parameter following this one lists the file name of the custom shared pointer header;
+#                                                               defaults to VmbCPP/UserSharedPointerDefines.h
+#
+#   - ADDITIONAL_SOURCES [<src>...]                             sources to add to the sources of the target
+#   - NO_RC                                                     exclude rc file on windows (automatically done for non-shared
+#
+#   - DOXYGEN_TARGET <target-name>                              Specify the name of the target for generating the doxygen docu, if doxygen is found
+#
+#   - VMBC_INCLUDE_ROOT <directory-path>                        Specify the directory to get VmbC public headers from; defaults to the include dir VmbCPP
+#
+# Generates a target for the VmbCPP library of the given name.
+#
+# If ADDITIONAL_SOURCES is present, the sources are added to the target's sources
+#
+function(vmb_create_cpp_target PARAM_1 PARAM_2)
+    set(OPTION_PARAMS NO_RC)
+    set(SINGLE_VALUE_PARAMS
+        TARGET_NAME TYPE
+        GENERATED_INCLUDES_DIR
+        FILE_LOGGER_HEADER
+        SHARED_POINTER_HEADER
+        DOXYGEN_TARGET
+        VMBC_INCLUDE_ROOT
+    )
+    set(MULTI_VALUE_PARAMS
+        USER_INCLUDE_DIRS
+        ADDITIONAL_SOURCES
+    )
+    
+    cmake_parse_arguments(
+        PARAMS
+        "${OPTION_PARAMS}"
+        "${SINGLE_VALUE_PARAMS}"
+        "${MULTI_VALUE_PARAMS}"
+        ${ARGV}
+    )
+    
+    if(NOT PARAMS_TARGET_NAME)
+        message(FATAL_ERROR "Required parameter TARGET_NAME not specified")
+    endif()
+    
+    vmb_argument(TYPE DEFAULT SHARED POSSIBILITIES SHARED STATIC)
+    vmb_argument(GENERATED_INCLUDES_DIR DEFAULT "${CMAKE_CURRENT_BINARY_DIR}/VmbCppGenIncludes")
+
+    if(EXISTS "${VMB_CPP_TEMPLATE_SCRIPT_DIR}/../../../../bin/VmbC.dll" OR EXISTS "${VMB_CPP_TEMPLATE_SCRIPT_DIR}/../../../../lib/libVmbC.so")
+        # installed version
+        get_filename_component(VMBCPP_SOURCE_DIR "${VMB_CPP_TEMPLATE_SCRIPT_DIR}/../../../../source/VmbCPP" ABSOLUTE)
+        get_filename_component(VMBCPP_INCLUDE_DIR "${VMB_CPP_TEMPLATE_SCRIPT_DIR}/../../../../include" ABSOLUTE)
+    else()
+        # build by vendor
+        get_filename_component(VMBCPP_SOURCE_DIR "${VMB_CPP_TEMPLATE_SCRIPT_DIR}/../Source/VmbCPP_internal" ABSOLUTE)
+        get_filename_component(VMBCPP_INCLUDE_DIR "${VMB_CPP_TEMPLATE_SCRIPT_DIR}/../Include" ABSOLUTE)
+    endif()
+
+    set(SOURCES)
+    set(HEADERS)
+    set(PUBLIC_HEADERS)
+
+    vmb_source_group(SOURCES ${VMBCPP_SOURCE_DIR} Base
+        BasicLockable.cpp
+        Clock.cpp
+        Condition.cpp
+        ConditionHelper.cpp
+        FileLogger.cpp
+        Mutex.cpp
+        MutexGuard.cpp
+        Semaphore.cpp
+    )
+
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" Base
+        BasicLockable.h
+        FileLogger.h
+        LoggerDefines.h
+        Mutex.h
+        SharedPointer.h
+        SharedPointerDefines.h
+        SharedPointer_impl.h
+        VmbCPP.h
+        VmbCPPCommon.h
+    )
+
+    vmb_source_group(HEADERS ${VMBCPP_SOURCE_DIR} Base
+        Clock.h
+        Condition.h
+        ConditionHelper.h
+        Helper.h
+        MutexGuard.h
+        Semaphore.h
+    )
+
+    vmb_source_group(SOURCES ${VMBCPP_SOURCE_DIR} Features
+        BaseFeature.cpp
+        BoolFeature.cpp
+        CommandFeature.cpp
+        EnumEntry.cpp
+        EnumFeature.cpp
+        Feature.cpp
+        FloatFeature.cpp
+        IntFeature.cpp
+        RawFeature.cpp
+        StringFeature.cpp
+    )
+
+    vmb_source_group(HEADERS ${VMBCPP_SOURCE_DIR} Features
+        BaseFeature.h
+        BoolFeature.h
+        CommandFeature.h
+        EnumFeature.h
+        FloatFeature.h
+        IntFeature.h
+        RawFeature.h
+        StringFeature.h
+    )
+
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" Features
+        Feature.h
+        EnumEntry.h
+    )
+
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" Features\\Inline
+        EnumEntry.hpp
+        Feature.hpp
+    )
+    
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" Utils\\Inline
+        CopyHelper.hpp
+        UniquePointer.hpp
+    )
+
+    vmb_source_group(SOURCES ${VMBCPP_SOURCE_DIR} Modules
+        TransportLayer.cpp
+        Camera.cpp
+        DefaultCameraFactory.cpp
+        FeatureContainer.cpp
+        Interface.cpp
+        VmbSystem.cpp
+        LocalDevice.cpp
+        Stream.cpp
+        PersistableFeatureContainer.cpp
+    )
+    
+    vmb_source_group(SOURCES ${VMBCPP_SOURCE_DIR} Utils\\Inline
+        CopyUtils.hpp
+    )
+
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" Modules
+        TransportLayer.h
+        Camera.h
+        FeatureContainer.h
+        Interface.h
+        VmbSystem.h
+        LocalDevice.h
+        Stream.h
+        PersistableFeatureContainer.h
+    )
+
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" Modules\\Inline
+        TransportLayer.hpp
+        Camera.hpp
+        FeatureContainer.hpp
+        Interface.hpp
+        VmbSystem.hpp
+    )
+
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" Utils\\Inline
+        StringLike.hpp
+    )
+
+    vmb_source_group(HEADERS ${VMBCPP_SOURCE_DIR} Modules
+        DefaultCameraFactory.h
+    )
+
+
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" Interfaces
+        ICameraFactory.h
+        ICameraListObserver.h
+        IFeatureObserver.h
+        IFrameObserver.h
+        IInterfaceListObserver.h
+        ICapturingModule.h
+    )
+
+    vmb_source_group(SOURCES ${VMBCPP_SOURCE_DIR} Interfaces
+        IFrameObserver.cpp
+    )
+
+
+    vmb_source_group(SOURCES ${VMBCPP_SOURCE_DIR} Frame
+        Frame.cpp
+        FrameHandler.cpp
+    )
+
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" Frame
+        Frame.h
+    )
+    
+    vmb_source_group(HEADERS ${VMBCPP_SOURCE_DIR} "Frame"
+        FrameHandler.h
+        FrameImpl.h
+    )
+
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" Frame\\Inline
+        Frame.hpp
+    )
+
+    vmb_source_group(PUBLIC_HEADERS "${VMBCPP_INCLUDE_DIR}/VmbCPP" "User"
+        UserLoggerDefines.h
+        UserSharedPointerDefines.h
+    )
+
+    # Note: the config file contains no header guard on purpose
+    set(_CONTENT "// VmbCPP configuration file")
+
+    function(vmb_cpp_add_config_header VAR DEFINITION DEFAULT HEADER_GUARD DEFAULT_INCLUDE)
+        if (DEFINED "PARAMS_${VAR}")
+            set(_CONTENT "${_CONTENT}
+
+#define ${DEFINITION}
+
+#ifdef ${HEADER_GUARD}
+//   include only from DEFAULT_INCLUDE
+#    include \"${PARAMS_${VAR}}\"
+#endif
+" PARENT_SCOPE)
+        endif()
+    endfunction()
+
+    vmb_cpp_add_config_header(FILE_LOGGER_HEADER USER_LOGGER VmbCPP/UserLoggerDefines.h VMBCPP_LOGGERDEFINES_H LoggerDefines.h)
+    vmb_cpp_add_config_header(SHARED_POINTER_HEADER USER_SHARED_POINTER VmbCPP/UserSharedPointerDefines.h VMBCPP_SHAREDPOINTERDEFINES_H SharedPointerDefines.h)
+    
+    file(MAKE_DIRECTORY "${PARAMS_GENERATED_INCLUDES_DIR}/VmbCPPConfig")
+    set(_CONFIG_FILE "${PARAMS_GENERATED_INCLUDES_DIR}/VmbCPPConfig/config.h")
+    set(_OLD_CONFIG_CONTENT "")
+    get_filename_component(_CONFIG_FILE_ABSOLUTE ${_CONFIG_FILE} ABSOLUTE)
+    if(EXISTS "${_CONFIG_FILE_ABSOLUTE}")
+        file(READ ${_CONFIG_FILE_ABSOLUTE} _OLD_CONFIG_CONTENT)
+    endif()
+    if(NOT _OLD_CONFIG_CONTENT STREQUAL _CONTENT)
+        file(WRITE ${_CONFIG_FILE} ${_CONTENT})
+    endif()
+    
+    list(APPEND HEADERS ${_CONFIG_FILE})
+
+    source_group("Generated" FILES ${_CONFIG_FILE})
+
+    if (PARAMS_TYPE STREQUAL "SHARED" AND NOT PARAMS_NO_RC)
+        if (WIN32)
+            vmb_source_group(SOURCES ${VMBCPP_SOURCE_DIR} Resources
+                    resource.h
+                    VmbCPP.rc
+                    VmbCPP.rc2
+            )
+        endif()
+    endif()
+
+    find_package(Vmb REQUIRED COMPONENTS C)
+    set(VMB_MAJOR_VERSION ${Vmb_VERSION_MAJOR})
+    set(VMB_MINOR_VERSION ${Vmb_VERSION_MINOR})
+    set(VMB_PATCH_VERSION ${Vmb_VERSION_PATCH})
+
+    set(VMBCPP_VERSION_HEADER "${PARAMS_GENERATED_INCLUDES_DIR}/Version.h")
+    configure_file("${VMBCPP_SOURCE_DIR}/Version.h.in" ${VMBCPP_VERSION_HEADER})
+
+    list(APPEND HEADERS ${VMBCPP_VERSION_HEADER})
+
+    source_group("Generated" FILES
+        ${VMBCPP_VERSION_HEADER}
+    )
+
+    add_library(${PARAMS_TARGET_NAME} ${PARAMS_TYPE}
+        ${HEADERS}
+        ${PUBLIC_HEADERS}
+        ${SOURCES}
+        ${PARAMS_ADDITIONAL_SOURCES}
+        ${VMBCPP_VERSION_HEADER}
+        ${VMB_CPP_TWEAK_VERSION_HEADER}
+    )
+    
+    if(${PARAMS_TYPE} STREQUAL "SHARED")
+        target_compile_definitions(${PARAMS_TARGET_NAME} PRIVATE VMBCPP_CPP_EXPORTS)
+    else()
+        target_compile_definitions(${PARAMS_TARGET_NAME} PRIVATE VMBCPP_CPP_LIB)
+    endif()
+
+    target_link_libraries(${PARAMS_TARGET_NAME} PUBLIC Vmb::C)
+    target_include_directories(${PARAMS_TARGET_NAME} PUBLIC
+        $<BUILD_INTERFACE:${VMBCPP_INCLUDE_DIR}>
+    )
+
+    # make sure the generated include is preferred to the one installed with the sdk
+    target_include_directories(${PARAMS_TARGET_NAME} BEFORE PUBLIC
+        $<BUILD_INTERFACE:${PARAMS_GENERATED_INCLUDES_DIR}>
+    )
+
+    foreach(_DIR IN LISTS PARAMS_USER_INCLUDE_DIRS)
+        get_filename_component(_DIR_ABS ${_DIR} ABSOLUTE)
+        target_include_directories(${PARAMS_TARGET_NAME} PUBLIC $<BUILD_INTERFACE:${_DIR_ABS}>)
+    endforeach()
+    
+    set_target_properties(${PARAMS_TARGET_NAME} PROPERTIES
+        PUBLIC_HEADER "${PUBLIC_HEADERS}"
+    )
+
+    if (CMAKE_VERSION VERSION_LESS 3.8)
+        # compile features for standard added in v 3.8
+        # -> set the version for the created target only
+        set_target_properties(${PARAMS_TARGET_NAME} PROPERTIES
+            CXX_STANDARD 11
+        )
+    else()
+        # target and linking target is required to use at least C++11
+        target_compile_features(${PARAMS_TARGET_NAME} PUBLIC cxx_std_11)
+    endif()
+
+    if (PARAMS_DOXYGEN_TARGET)
+        if (CMAKE_VERSION VERSION_LESS 3.9)
+            message(WARNING "At least version 3.9 CMake required for doxygen documentation")
+        else()
+            find_package(Doxygen)
+            if (DOXYGEN_FOUND)
+                if (NOT CMAKE_FOLDER)
+                    set(CMAKE_FOLDER Documentation)
+                endif()
+
+                if (NOT PARAMS_VMBC_INCLUDE_ROOT)
+                    set(PARAMS_VMBC_INCLUDE_ROOT ${VMBCPP_INCLUDE_DIR})
+                endif()
+
+                set(VMBC_HEADERS
+                    "${PARAMS_VMBC_INCLUDE_ROOT}/VmbC/VmbC.h"
+                    "${PARAMS_VMBC_INCLUDE_ROOT}/VmbC/VmbCommonTypes.h"
+                    "${PARAMS_VMBC_INCLUDE_ROOT}/VmbC/VmbConstants.h"
+                    "${PARAMS_VMBC_INCLUDE_ROOT}/VmbC/VmbCTypeDefinitions.h"
+                )
+                
+                set(DOXYGEN_GENERATE_XML YES)
+
+                doxygen_add_docs(${PARAMS_DOXYGEN_TARGET} ${HEADERS} ${PUBLIC_HEADERS} ${VMBC_HEADERS})
+            endif()
+        endif()
+    endif()
+endfunction()
diff --git a/VimbaX/api/lib/cmake/vmb/configs/vmb_imagetransform-release.cmake b/VimbaX/api/lib/cmake/vmb/configs/vmb_imagetransform-release.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f93ebcfda74f372ff7ecb4ebe189f9f62133c0ab
--- /dev/null
+++ b/VimbaX/api/lib/cmake/vmb/configs/vmb_imagetransform-release.cmake
@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "Release".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "Vmb::ImageTransform" for configuration "Release"
+set_property(TARGET Vmb::ImageTransform APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+set_target_properties(Vmb::ImageTransform PROPERTIES
+  IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libVmbImageTransform.so"
+  IMPORTED_SONAME_RELEASE "libVmbImageTransform.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS Vmb::ImageTransform )
+list(APPEND _IMPORT_CHECK_FILES_FOR_Vmb::ImageTransform "${_IMPORT_PREFIX}/lib/libVmbImageTransform.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/VimbaX/api/lib/cmake/vmb/configs/vmb_imagetransform.cmake b/VimbaX/api/lib/cmake/vmb/configs/vmb_imagetransform.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..04755933dd356c4208766b4f228ba4aba7159893
--- /dev/null
+++ b/VimbaX/api/lib/cmake/vmb/configs/vmb_imagetransform.cmake
@@ -0,0 +1,95 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.21)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget Vmb::ImageTransform)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target Vmb::ImageTransform
+add_library(Vmb::ImageTransform SHARED IMPORTED)
+
+set_target_properties(Vmb::ImageTransform PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
+)
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/vmb_imagetransform-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)
diff --git a/VimbaX/api/lib/cmake/vmb/vmb-config-version.cmake b/VimbaX/api/lib/cmake/vmb/vmb-config-version.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..b4dee36911549d0eefdbb86ac157c9c2e0243c23
--- /dev/null
+++ b/VimbaX/api/lib/cmake/vmb/vmb-config-version.cmake
@@ -0,0 +1,36 @@
+set(PACKAGE_ARCHITECTURE_SUITABLE 0)
+
+if (NOT CMAKE_LIBRARY_ARCHITECTURE)
+    message(WARNING "CMAKE_LIBRARY_ARCHITECTURE not set, cannot check platform compatibility")
+    set(PACKAGE_ARCHITECTURE_SUITABLE 1)
+else ()
+    if (UNIX)
+        if (CMAKE_LIBRARY_ARCHITECTURE STREQUAL "x86_64-linux-gnu")
+            set(PACKAGE_ARCHITECTURE_SUITABLE 1)
+            if(DEFINED CMAKE_SYSTEM_PROCESSOR AND NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "" AND NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+                set(PACKAGE_ARCHITECTURE_SUITABLE 0)
+            endif()
+        endif()
+    elseif(WIN32)
+        if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+            set(PACKAGE_ARCHITECTURE_SUITABLE 1)
+        endif()
+    else()
+        # message("Unsupported os ${CMAKE_SYSTEM_NAME")
+    endif()
+endif()
+
+if (NOT PACKAGE_ARCHITECTURE_SUITABLE OR NOT CMAKE_SYSTEM_NAME STREQUAL "Linux" OR NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(PACKAGE_VERSION_UNSUITABLE True)
+else()
+    set(PACKAGE_VERSION "1.0.2")
+
+    if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+      set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    else()
+      set(PACKAGE_VERSION_COMPATIBLE TRUE)
+      if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+        set(PACKAGE_VERSION_EXACT TRUE)
+      endif()
+    endif()
+endif()
diff --git a/VimbaX/api/lib/cmake/vmb/vmb-config.cmake b/VimbaX/api/lib/cmake/vmb/vmb-config.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..1c68520d8ca372ead2035fd68ec39899b57e7939
--- /dev/null
+++ b/VimbaX/api/lib/cmake/vmb/vmb-config.cmake
@@ -0,0 +1,103 @@
+
+####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
+####### Any changes to this file will be overwritten by the next CMake run ####
+####### The input file was vmb-config.cmake.in                            ########
+
+get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
+
+macro(set_and_check _var _file)
+  set(${_var} "${_file}")
+  if(NOT EXISTS "${_file}")
+    message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
+  endif()
+endmacro()
+
+macro(check_required_components _NAME)
+  foreach(comp ${${_NAME}_FIND_COMPONENTS})
+    if(NOT ${_NAME}_${comp}_FOUND)
+      if(${_NAME}_FIND_REQUIRED_${comp})
+        set(${_NAME}_FOUND FALSE)
+      endif()
+    endif()
+  endforeach()
+endmacro()
+
+####################################################################################
+
+set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0)
+
+set(_VMB_FIND_PACKAGE_IMPL_FILES)
+
+function(_vmb_find_package_impl)
+    if (${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
+        set(_FIND_COMPONENTS_QUIET QUIET)
+        macro(_vmb_find_message MESSAGE_TYPE)
+            if (MESSAGE_TYPE STREQUAL "FATAL_ERROR")
+                return()
+            endif()
+        endmacro()
+    else()
+        macro(_vmb_find_message)
+            message(${ARGN})
+        endmacro()
+    endif()
+
+    # turn a input string into the name used for files/internal variables
+    function(_vmb_to_component_string VAR COMPONENT)
+        string(REPLACE "-" "_" RESULT ${COMPONENT})
+        string(TOLOWER ${RESULT} RESULT)
+        set(${VAR} ${RESULT} PARENT_SCOPE)
+    endfunction()
+
+    if (NOT WIN32 AND NOT UNIX)
+        _vmb_find_message(FATAL_ERROR "Not yet implemented for the target system ${CMAKE_SYSTEM_NAME}")
+    endif()
+
+    # default components: only VmbC
+    set(VMB_FIND_FILES "${PACKAGE_PREFIX_DIR}/lib/cmake/vmb/configs/vmb_c.cmake")
+
+    # prerequesites of each component (VMB_<component>_DEPENDENCIES = include file name)
+    set(VMB_c_DEPENDENCIES)
+    set(VMB_cpp_DEPENDENCIES vmb_c)
+    set(VMB_cpp_sources_DEPENDENCIES vmb_c)
+    set(VMB_imagetransform_DEPENDENCIES)
+
+    if (CMAKE_VERSION VERSION_LESS 3.0)
+        _vmb_find_message(FATAL_ERROR "CMake versions < 3.0 are not supported")
+    endif()
+
+    if(${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS)
+        set(VMB_FIND_FILES)
+        foreach(_COMP IN LISTS ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS)
+            _vmb_to_component_string(INCLUDE_FILE_NAME ${_COMP})
+            if(EXISTS "${PACKAGE_PREFIX_DIR}/lib/cmake/vmb/configs/vmb_${INCLUDE_FILE_NAME}.cmake")
+                set(DEPENDENCIES)
+                foreach(DEP IN LISTS VMB_${INCLUDE_FILE_NAME}_DEPENDENCIES)
+                    list(APPEND DEPENDENCIES "${PACKAGE_PREFIX_DIR}/lib/cmake/vmb/configs/${DEP}.cmake")
+                endforeach()
+                list(APPEND VMB_FIND_FILES ${DEPENDENCIES} "${PACKAGE_PREFIX_DIR}/lib/cmake/vmb/configs/vmb_${INCLUDE_FILE_NAME}.cmake")
+                set(VMB_COMPONENT_${_COMP}_FOUND True PARENT_SCOPE)
+            elseif(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED_${_COMP})
+                _vmb_find_message(FATAL_ERROR "Unknown Vmb component required: ${_COMP}")
+            else()
+                set(VMB_COMPONENT_${_COMP}_FOUND False PARENT_SCOPE)
+                _vmb_find_message(WARNING "Unknown Vmb component: ${_COMP}")
+            endif()
+        endforeach()
+    endif()
+
+    list(REMOVE_DUPLICATES VMB_FIND_FILES)
+    
+    # get the root directory of the installation
+    get_filename_component(_VMB_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE)
+    set(VMB_BINARY_DIRS "${PACKAGE_PREFIX_DIR}/bin" CACHE INTERNAL "Directory containing the Vmb dlls")
+
+    set(_VMB_FIND_PACKAGE_IMPL_FILES ${VMB_FIND_FILES} PARENT_SCOPE)
+    set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 1 PARENT_SCOPE)
+endfunction()
+
+_vmb_find_package_impl()
+
+foreach(INCLUDE IN LISTS _VMB_FIND_PACKAGE_IMPL_FILES)
+    include(${INCLUDE})
+endforeach()
diff --git a/VimbaX/api/lib/libVmbC.so b/VimbaX/api/lib/libVmbC.so
new file mode 100644
index 0000000000000000000000000000000000000000..86fe524500a7a17b7617de136e1811577cbaa342
Binary files /dev/null and b/VimbaX/api/lib/libVmbC.so differ
diff --git a/VimbaX/api/lib/libVmbCPP.so b/VimbaX/api/lib/libVmbCPP.so
new file mode 100644
index 0000000000000000000000000000000000000000..c9d7ec6729aab2cf667b9754c28fc16144510f5d
Binary files /dev/null and b/VimbaX/api/lib/libVmbCPP.so differ
diff --git a/VimbaX/api/lib/libVmbImageTransform.so b/VimbaX/api/lib/libVmbImageTransform.so
new file mode 100644
index 0000000000000000000000000000000000000000..2e69f7c1fea8750b9678f18a3c8dc54e24359b96
Binary files /dev/null and b/VimbaX/api/lib/libVmbImageTransform.so differ
diff --git a/VimbaX/api/python/README.md b/VimbaX/api/python/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..718edc6a351a3a4f45727cc6cbe23ddb52b97b0b
--- /dev/null
+++ b/VimbaX/api/python/README.md
@@ -0,0 +1,114 @@
+# VmbPy [![python version](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)
+
+Python API of the [Vimba X SDK](https://www.alliedvision.com)
+
+Vimba X is a fully GenICam compliant SDK and the successor of Vimba. VmbPy is the Python API that is
+provided by this SDK. It provides access to the full functionality of Vimba X in a pythonic way,
+allowing for rapid development of applications.
+
+# Installation
+
+To use VmbPy an installation of Vimba X and Python >= 3.7 are required. A ready-to-install packaged
+`.whl` file of VmbPy can be found as part of the Vimba X installation, or be downloaded from our
+[github release page](https://github.com/alliedvision/VmbPy/releases). The `.whl` can be installed
+as usual via the `pip install` command.
+
+## Optional dependencies
+For some functionality of VmbPy optional dependencies (also called "extras") are required. These
+provide for example integration into numpy and OpenCV, as well as some additional code analysis
+tools that are used in our full test suite. The following extras are defined for VmbPy:
+
+- numpy: Enables conversion of `VmbPy.Frame` objects to numpy arrays
+- opencv: Similar to above but ensures that the numpy arrays are valid OpenCV images
+- test: Additional tools such as `flake8`, `mypy`, and `coverage` only necessary for executing `run_tests.py`
+
+# Differences to VimbaPython
+
+VmbPy is the successor of VimbaPython. As such it shares many similarities, but in some places major
+differences exist. An overview of the differences between VimbaPython and VmbPy can be found in the
+migration guide, that is part of the Vimba X SDK documentation.
+
+# Usage
+
+Below is a minimal example demonstrating how to print all available cameras detected by VmbPy. It
+highlights the general usage of VmbPy. More complete code examples can be found in the `Examples`
+directory.
+
+```python
+import vmbpy
+
+vmb = vmbpy.VmbSystem.get_instance()
+with vmb:
+    cams = vmb.get_all_cameras()
+    for cam in cams:
+        print(cam)
+```
+
+## General guidelines
+
+VmbPy makes use of the Python context manager to perform setup and teardown tasks for the used
+object instances. This ensures the correct call order for the underlying VmbC functions and
+guarantees, that resources are made available and freed as expected even in cases where errors
+occur. One example is shown in the example above, where the context of the `VmbSystem` object must
+be entered to start the underlying VmbC API.
+
+VmbPy is also designed to closely resemble VmbCPP. While VmbPy aims to be as performant as possible,
+it might not be fast enough for performance critical applications. In that case the similar
+structure of VmbPy and VmbCPP makes it easy to migrate an existing VmbPy code base to VmbCPP.
+
+## Running the test suite
+
+VmbPy provides a number of unittest as part of the [Github
+repository](https://github.com/alliedvision/VmbPy). The test suite can be run in two ways.
+Either by using the test discovery mechanic of Python's `unittest` module, or via the provided
+`run_tests.py`.
+
+### Unittest discovery
+
+Python's unittest module can be used to discover the test cases of VimbaPython automatically. This
+can be useful as it provides good integration into third party tools like test explorers. To execute
+the entire test suite the following command can be run inside the `Tests` directory of this
+repository:
+
+```
+python -m unittest discover -v -p *_test.py
+```
+
+This will open the first camera, that Vimba detects on the system. If multiple cameras are connected
+to the system, an unexpected device may be selected. In this situation it is recommended to specify
+the ID of the device that should be used for test case execution. This is done by setting the
+environment variable `VMBPY_DEVICE_ID`. A convenient way to get the IDs of currently available
+devices is running the `list_cameras.py` example.
+
+Execute entire test suite using camera with ID `DEV_PLACEHOLDER`
+
+<details><summary>Windows</summary>
+
+```
+set VMBPY_DEVICE_ID=DEV_PLACEHOLDER
+python -m unittest discover -v -p *_test.py
+```
+</details>
+
+<details><summary>Linux</summary>
+
+```
+export VMBPY_DEVICE_ID=DEV_PLACEHOLDER
+python -m unittest discover -v -p *_test.py
+```
+</details>
+
+### `run_tests.py`
+
+The provided helper script `run_tests.py` may also be used to execute the test suite. In addition to
+the test cases, it also executes `flake8`, `mypy`, and `coverage`. These additional tools need to be
+installed in the used Python environment. For convenience they are grouped as an optional dependency
+of VmbPy with the name `test` that can be added to the `pip install` command used to install VmbPy.
+
+`run_tests.py` provides a helpful command line interface that can be used to configure which tests
+to run and how the output should be structured. To get an overview of the available options the
+following command can be executed to generate the usage description.
+
+```
+python run_tests.py -h
+```
diff --git a/VimbaX/api/python/list_cams.py b/VimbaX/api/python/list_cams.py
new file mode 100644
index 0000000000000000000000000000000000000000..1fae900950ea9c8460c9b7941780cc15f921f0c0
--- /dev/null
+++ b/VimbaX/api/python/list_cams.py
@@ -0,0 +1,7 @@
+import vmbpy
+
+vmb = vmbpy.VmbSystem.get_instance()
+with vmb:
+    cams = vmb.get_all_cameras()
+    for cam in cams:
+        print(cam)
diff --git a/VimbaX/api/python/vmbpy-1.0.2-py3-none-any.whl b/VimbaX/api/python/vmbpy-1.0.2-py3-none-any.whl
new file mode 100755
index 0000000000000000000000000000000000000000..953960f855a5989cb3f0f17eeef56df1c07321d9
Binary files /dev/null and b/VimbaX/api/python/vmbpy-1.0.2-py3-none-any.whl differ
diff --git a/VimbaX/api/source/VmbCPP/BaseFeature.cpp b/VimbaX/api/source/VmbCPP/BaseFeature.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ab18d9bba705ee22f86ddf6a6bafab94720b76b3
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/BaseFeature.cpp
@@ -0,0 +1,645 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        BaseFeature.cpp
+
+  Description: Implementation of base class VmbCPP::BaseFeature.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <new>
+#include <utility>
+
+#pragma warning(disable:4996)
+#include "BaseFeature.h"
+#pragma warning(default:4996)
+
+#include "ConditionHelper.h"
+#include "CopyUtils.hpp"
+#include "Helper.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCPP/FeatureContainer.h>
+#include <VmbCPP/VmbSystem.h>
+
+
+namespace VmbCPP {
+
+typedef std::vector<IFeatureObserverPtr> IFeatureObserverPtrVector;
+
+struct BaseFeature::Impl
+{
+    LockableVector<IFeatureObserverPtr> m_observers;
+
+    FeaturePtrVector m_affectedFeatures;
+    FeaturePtrVector m_selectedFeatures;
+    bool m_bAffectedFeaturesFetched;
+    bool m_bSelectedFeaturesFetched;
+
+    ConditionHelper m_observersConditionHelper;
+    ConditionHelper m_conditionHelper;
+
+    static void VMB_CALL InvalidationCallback( const VmbHandle_t handle, const char *name, void *context );
+};
+
+BaseFeature::BaseFeature( const VmbFeatureInfo& featureInfo, FeatureContainer& featureContainer )
+    : m_pImpl(new Impl()),
+    m_pFeatureContainer(&featureContainer)
+{
+    m_pImpl->m_bAffectedFeaturesFetched = false;
+    m_pImpl->m_bSelectedFeaturesFetched = false;
+
+    m_featureInfo.category.assign( featureInfo.category ? featureInfo.category : "" );
+    m_featureInfo.description.assign( featureInfo.description ? featureInfo.description : "" );
+    m_featureInfo.displayName.assign( featureInfo.displayName ? featureInfo.displayName : "" );
+    m_featureInfo.featureDataType = featureInfo.featureDataType;
+    m_featureInfo.featureFlags = featureInfo.featureFlags;
+    m_featureInfo.hasSelectedFeatures = featureInfo.hasSelectedFeatures;
+    m_featureInfo.name.assign( featureInfo.name ? featureInfo.name : "" );
+    m_featureInfo.pollingTime = featureInfo.pollingTime;
+    m_featureInfo.representation.assign( featureInfo.representation ? featureInfo.representation : "" );
+    m_featureInfo.sfncNamespace.assign( featureInfo.sfncNamespace ? featureInfo.sfncNamespace : "" );
+    m_featureInfo.tooltip.assign( featureInfo.tooltip ? featureInfo.tooltip : "" );
+    m_featureInfo.unit.assign( featureInfo.unit ? featureInfo.unit : "" );
+    m_featureInfo.visibility = featureInfo.visibility;
+    m_featureInfo.isStreamable = featureInfo.isStreamable;
+}
+
+BaseFeature::~BaseFeature()
+{
+    // Before destruction we unregister all observers and all callbacks
+    ResetFeatureContainer();
+}
+
+// Unregisters all observers before it resets the feature container pointer.
+void BaseFeature::ResetFeatureContainer()
+{
+    if (nullptr != m_pFeatureContainer )
+    {
+        // Camera still open
+        if (nullptr != m_pFeatureContainer->GetHandle() )
+        {
+            VmbFeatureInvalidationUnregister( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &BaseFeature::Impl::InvalidationCallback );
+        }
+
+        // Begin exclusive write lock this feature
+        if ( true == m_pImpl->m_conditionHelper.EnterWriteLock( GetMutex(), true ))
+        {
+            m_pFeatureContainer = nullptr;
+
+            // End write lock this feature
+            m_pImpl->m_conditionHelper.ExitWriteLock( GetMutex() );
+        }
+        else
+        {
+            LOG_FREE_TEXT( "Could not reset a feature's feature container reference. ");
+        }
+        
+    }
+    
+    // Begin exclusive write lock observer list
+    if ( true == m_pImpl->m_observersConditionHelper.EnterWriteLock( m_pImpl->m_observers, true ))
+    {
+        m_pImpl->m_observers.Vector.clear();
+        
+        // End write lock observer list
+        m_pImpl->m_observersConditionHelper.ExitWriteLock( m_pImpl->m_observers );
+    }
+}
+
+void VMB_CALL BaseFeature::Impl::InvalidationCallback( const VmbHandle_t handle, const char * /*name*/, void *context )
+{
+    BaseFeature *pFeature = (BaseFeature*)context;
+    if (nullptr != pFeature )
+    {
+        if (nullptr != handle )
+        {
+            // Begin read lock this feature
+            if ( true == pFeature->m_pImpl->m_conditionHelper.EnterReadLock( pFeature->GetMutex() ))
+            {
+                if (nullptr != pFeature->m_pFeatureContainer )
+                {
+                    FeaturePtr pFeaturePtrFromMap;
+                    if ( VmbErrorSuccess == pFeature->m_pFeatureContainer->GetFeatureByName( pFeature->m_featureInfo.name.c_str(), pFeaturePtrFromMap ) )
+                    {
+                        // Begin read lock observer list
+                        if ( true == pFeature->m_pImpl->m_observersConditionHelper.EnterReadLock( pFeature->m_pImpl->m_observers ))
+                        {
+                            for (   IFeatureObserverPtrVector::iterator iter = pFeature->m_pImpl->m_observers.Vector.begin();
+                                    pFeature->m_pImpl->m_observers.Vector.end() != iter;
+                                    ++iter)
+                            {
+                                SP_ACCESS(( *iter ))->FeatureChanged( pFeaturePtrFromMap );
+                            }
+
+                            // End read lock observer list
+                            pFeature->m_pImpl->m_observersConditionHelper.ExitReadLock( pFeature->m_pImpl->m_observers );
+                        }
+                        else
+                        {
+                            LOG_FREE_TEXT( "Could not lock feature observer list.")
+                        }
+                    }
+                    else // GetFeatureByName() failed
+                    {
+                        // Do some logging
+                        LOG_FREE_TEXT( "GetFeatureByName failed" )
+                    }
+                }
+                else // m_pFeatureContainer == null (Feature destroyed or device closed / destroyed)
+                {
+                    // Do some logging
+                    LOG_FREE_TEXT( "Feature destroyed or device closed / destroyed" );
+                }
+
+                // End read lock this feature
+                pFeature->m_pImpl->m_conditionHelper.ExitReadLock( pFeature->GetMutex() );
+            }
+            else
+            {
+                LOG_FREE_TEXT( "Could not lock feature.")
+            }
+        }
+        else // m_handle == null (device closed / destroyed)
+        {
+            // Do some logging
+            LOG_FREE_TEXT( "Device closed / destroyed" )
+        }
+    }
+    else // pFeature == null (Just for safety)
+    {
+        // Do some logging
+        LOG_FREE_TEXT( "Feature pointer is null" )
+    }
+}
+
+VmbErrorType BaseFeature::RegisterObserver( const IFeatureObserverPtr &rObserver )
+{
+    if ( SP_ISNULL( rObserver ))
+    {
+        return VmbErrorBadParameter;
+    }    
+
+    if (nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    VmbError_t res = VmbErrorSuccess;
+
+    // Begin write lock observer list
+    if ( true == m_pImpl->m_observersConditionHelper.EnterWriteLock( m_pImpl->m_observers ))
+    {
+        // The very same observer cannot be registered twice
+        for ( size_t i=0; i<m_pImpl->m_observers.Vector.size(); ++i )
+        {
+            if ( SP_ISEQUAL( rObserver, m_pImpl->m_observers.Vector[i] ))
+            {
+                res = VmbErrorAlready;
+                break;
+            }
+        }
+
+        if ( VmbErrorSuccess == res )
+        {
+            if ( 0 == m_pImpl->m_observers.Vector.size() )
+            {
+                res = VmbFeatureInvalidationRegister( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), m_pImpl->InvalidationCallback, this );
+            }
+
+            if ( VmbErrorSuccess == res )
+            {
+                m_pImpl->m_observers.Vector.push_back( rObserver );
+            }
+        }
+        
+        // End write lock observer list
+        m_pImpl->m_observersConditionHelper.ExitWriteLock( m_pImpl->m_observers );
+    }
+
+    return (VmbErrorType)res;
+}
+
+VmbErrorType BaseFeature::UnregisterObserver( const IFeatureObserverPtr &rObserver )
+{
+    if ( SP_ISNULL( rObserver ))
+    {
+        return VmbErrorBadParameter;
+    }    
+
+    if (nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    VmbError_t res = VmbErrorNotFound;
+
+    // Begin exclusive write lock observer list
+    if ( true == m_pImpl->m_observersConditionHelper.EnterWriteLock( m_pImpl->m_observers, true ))
+    {
+        for (   IFeatureObserverPtrVector::iterator iter = m_pImpl->m_observers.Vector.begin();
+                m_pImpl->m_observers.Vector.end() != iter;)
+        {
+            if ( SP_ISEQUAL( rObserver, *iter ))
+            {
+                // If we are about to unregister the last observer we cancel all invalidation notifications
+                if ( 1 == m_pImpl->m_observers.Vector.size() )
+                {
+                    res = VmbFeatureInvalidationUnregister( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), m_pImpl->InvalidationCallback );
+                }
+                if (    VmbErrorSuccess == res
+                     || 1 < m_pImpl->m_observers.Vector.size() )
+                {
+                    iter = m_pImpl->m_observers.Vector.erase( iter );
+                    res = VmbErrorSuccess;
+                }
+                break;
+            }
+            else
+            {
+                ++iter;
+            }
+        }
+
+        // End write lock observer list
+        m_pImpl->m_observersConditionHelper.ExitWriteLock( m_pImpl->m_observers );
+    }
+    else
+    {
+        LOG_FREE_TEXT( "Could not lock feature observer list.")
+        res = VmbErrorInternalFault;
+    }
+    
+    return (VmbErrorType)res;
+}
+
+// Gets the value of a feature of type VmbFeatureDataInt
+VmbErrorType BaseFeature::GetValue( VmbInt64_t & /*rnValue*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Sets the value of a feature of type VmbFeatureDataInt
+VmbErrorType BaseFeature::SetValue( VmbInt64_t /*rnValue*/ ) noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets the range of a feature of type VmbFeatureDataInt
+VmbErrorType BaseFeature::GetRange( VmbInt64_t & /*rnMinimum*/, VmbInt64_t & /*rnMaximum*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+VmbErrorType BaseFeature::HasIncrement( VmbBool_t & /*incrementSupported*/) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets the increment of a feature of type VmbFeatureDataInt
+VmbErrorType BaseFeature::GetIncrement( VmbInt64_t & /*rnIncrement*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets the increment of a feature of type VmbFeatureDataFloat
+VmbErrorType BaseFeature::GetIncrement( double & /*rnIncrement*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets the value of a feature of type VmbFeatureDataFloat
+VmbErrorType BaseFeature::GetValue( double & /*rfValue*/) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Sets the value of a feature of type VmbFeatureDataFloat
+VmbErrorType BaseFeature::SetValue( double /*rfValue*/ ) noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets the range of a feature of type VmbFeatureDataFloat
+VmbErrorType BaseFeature::GetRange( double & /*rfMinimum*/, double & /*rfMaximum*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Sets the value of a feature of type VmbFeatureDataEnum
+// Sets the value of a feature of type VmbFeatureDataString
+VmbErrorType BaseFeature::SetValue( const char * /*pStrValue*/ ) noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets the enum entry of a feature of type VmbFeatureDataEnum
+VmbErrorType BaseFeature::GetEntry( EnumEntry & /*entry*/, const char * /*pStrEntryName*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets all possible enum entries of a feature of type VmbFeatureDataEnum
+VmbErrorType BaseFeature::GetEntries( EnumEntry * /*pEnumEntries*/, VmbUint32_t & /*size*/ ) noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets all possible values as string of a feature of type VmbFeatureDataEnum
+VmbErrorType BaseFeature::GetValues( const char ** /*pStrValues*/, VmbUint32_t & /*rnSize*/ ) noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets all possible values as integer of a feature of type VmbFeatureDataEnum
+VmbErrorType BaseFeature::GetValues( VmbInt64_t * /*pnValues*/, VmbUint32_t & /*rnSize*/ ) noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Indicates whether a particular enum value as string of a feature of type VmbFeatureDataEnum is available
+VmbErrorType BaseFeature::IsValueAvailable( const char * /*pStrValue*/, bool & /*bAvailable*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Indicates whether a particular enum value as integer of a feature of type VmbFeatureDataEnum is available
+VmbErrorType BaseFeature::IsValueAvailable( const VmbInt64_t /*nValue*/, bool & /*bAvailable*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets the value of a feature of type VmbFeatureDataString
+// Gets the value of a feature of type VmbFeatureDataEnum
+VmbErrorType BaseFeature::GetValue( char * const /*pStrValue*/, VmbUint32_t & /*length*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets the value of a feature of type VmbFeatureDataBool
+VmbErrorType BaseFeature::GetValue( bool & /*rbValue*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Sets the value of a feature of type VmbFeatureDataBool
+VmbErrorType BaseFeature::SetValue( bool /*bValue*/ ) noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Executes a feature of type VmbFeatureDataCommand
+VmbErrorType BaseFeature::RunCommand() noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Indicates whether a feature of type VmbFeatureDataCommand finished execution
+VmbErrorType BaseFeature::IsCommandDone( bool & /*bIsDone*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Gets the value of a feature of type VmbFeatureDataRaw
+VmbErrorType BaseFeature::GetValue( VmbUchar_t * /*pValue*/, VmbUint32_t & /*rnSize*/, VmbUint32_t & /*rnSizeFilled*/ ) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+// Sets the value of a feature of type VmbFeatureDataRaw
+VmbErrorType BaseFeature::SetValue( const VmbUchar_t * /*pValue*/, VmbUint32_t /*nSize*/ ) noexcept
+{
+    return VmbErrorWrongType;
+}
+
+VmbErrorType BaseFeature::GetName( char * const pStrName, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_featureInfo.name, pStrName, rnLength);
+}
+
+VmbErrorType BaseFeature::GetDisplayName( char * const pStrDisplayName, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_featureInfo.displayName, pStrDisplayName, rnLength);
+}
+
+VmbErrorType BaseFeature::GetDataType( VmbFeatureDataType &reDataType ) const noexcept
+{
+    reDataType = static_cast<VmbFeatureDataType>(m_featureInfo.featureDataType);
+    
+    return VmbErrorSuccess;
+}
+
+VmbErrorType BaseFeature::GetFlags( VmbFeatureFlagsType &reFlags ) const noexcept
+{
+    reFlags = static_cast<VmbFeatureFlagsType>(m_featureInfo.featureFlags);
+        
+    return VmbErrorSuccess;
+}
+
+VmbErrorType BaseFeature::GetCategory( char * const pStrCategory, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_featureInfo.category, pStrCategory, rnLength);
+}
+
+VmbErrorType BaseFeature::GetPollingTime( VmbUint32_t &rnPollingTime ) const noexcept
+{
+    rnPollingTime = m_featureInfo.pollingTime;
+    
+    return VmbErrorSuccess;
+}
+
+VmbErrorType BaseFeature::GetUnit( char * const pStrUnit, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_featureInfo.unit, pStrUnit, rnLength);
+}
+
+VmbErrorType BaseFeature::GetRepresentation( char * const pStrRepresentation, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_featureInfo.representation, pStrRepresentation, rnLength);
+}
+
+VmbErrorType BaseFeature::GetVisibility( VmbFeatureVisibilityType &reVisibility ) const noexcept
+{
+    reVisibility = static_cast<VmbFeatureVisibilityType>(m_featureInfo.visibility);
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType BaseFeature::GetToolTip( char * const pStrToolTip, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_featureInfo.tooltip, pStrToolTip, rnLength);
+}
+
+VmbErrorType BaseFeature::GetDescription( char * const pStrDescription, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_featureInfo.description, pStrDescription, rnLength);
+}
+
+VmbErrorType BaseFeature::GetSFNCNamespace( char * const pStrSFNCNamespace, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_featureInfo.sfncNamespace, pStrSFNCNamespace, rnLength);
+}
+
+VmbErrorType BaseFeature::GetSelectedFeatures( FeaturePtr *pSelectedFeatures, VmbUint32_t &rnSize ) noexcept
+{
+    VmbError_t res;
+
+    if (nullptr == pSelectedFeatures)
+    {
+        // Selected features were fetched before
+        if (m_pImpl->m_bSelectedFeaturesFetched)
+        {
+            rnSize = static_cast<VmbUint32_t>(m_pImpl->m_selectedFeatures.size());
+
+            res = VmbErrorSuccess;
+        }
+        // Selected features have not been fetched before
+        else
+        {
+            return static_cast<VmbErrorType>(VmbFeatureListSelected(
+                m_pFeatureContainer->GetHandle(),
+                m_featureInfo.name.c_str(),
+                nullptr,
+                0,
+                &rnSize,
+                sizeof(VmbFeatureInfo_t)));
+        }
+    }
+    else
+    {
+        // Selected features were fetched before
+        if (m_pImpl->m_bSelectedFeaturesFetched)
+        {
+            if ( rnSize < m_pImpl->m_selectedFeatures.size() )
+            {
+                return VmbErrorMoreData;
+            }
+
+            rnSize = static_cast<VmbUint32_t>(m_pImpl->m_selectedFeatures.size());
+
+            try
+            {
+                std::copy(m_pImpl->m_selectedFeatures.begin(), m_pImpl->m_selectedFeatures.end(), pSelectedFeatures);
+                res = VmbErrorSuccess;
+            }
+            catch (std::bad_alloc const&)
+            {
+                res = VmbErrorResources;
+            }
+        }
+        // Selected features have not been fetched before
+        else
+        {
+            // Check whether the given array size fits
+            VmbUint32_t nSize = 0;
+            res = VmbFeatureListSelected( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), nullptr, 0, &nSize, sizeof(VmbFeatureInfo_t) );
+
+            m_pImpl->m_bSelectedFeaturesFetched = true;
+
+            if ( rnSize < nSize )
+            {
+                return VmbErrorMoreData;
+            }
+
+            rnSize = static_cast<VmbUint32_t>(nSize);
+
+            if (VmbErrorSuccess != res
+                || 0 == rnSize)
+            {
+                return static_cast<VmbErrorType>(res);
+            }
+
+            // Fetch selected features and store them as well as hand them out
+            std::vector<VmbFeatureInfo_t> selectedFeatureInfos;
+            try
+            {
+                selectedFeatureInfos.resize(rnSize);
+
+                res = VmbFeatureListSelected(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &selectedFeatureInfos[0], (VmbUint32_t)selectedFeatureInfos.size(), &nSize, sizeof(VmbFeatureInfo_t));
+
+                if (rnSize < nSize)
+                {
+                    return VmbErrorMoreData;
+                }
+
+                rnSize = (VmbUint32_t)nSize;
+
+                for (VmbUint32_t i = 0; i < rnSize; ++i)
+                {
+                    FeaturePtr pFeature;
+                    res = m_pFeatureContainer->GetFeatureByName(selectedFeatureInfos[i].name, pFeature);
+                    if (VmbErrorSuccess != res)
+                    {
+                        m_pImpl->m_selectedFeatures.clear();
+                        return static_cast<VmbErrorType>(res);
+                    }
+                    m_pImpl->m_selectedFeatures.emplace_back(std::move(pFeature));
+                    pSelectedFeatures[i] = m_pImpl->m_selectedFeatures[i];
+                }
+            }
+            catch (std::bad_alloc const&)
+            {
+                res = VmbErrorResources;
+            }
+        }
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType BaseFeature::IsReadable( bool &rbIsReadable ) noexcept
+{
+    bool bIsWritable = false;
+
+    if (nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    
+    return (VmbErrorType)VmbFeatureAccessQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rbIsReadable, &bIsWritable );
+}
+
+VmbErrorType BaseFeature::IsWritable( bool &rbIsWritable ) noexcept
+{
+    bool bIsReadable = false;
+
+    if (nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return (VmbErrorType)VmbFeatureAccessQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &bIsReadable, &rbIsWritable );
+}
+
+VmbErrorType BaseFeature::IsStreamable( bool &rbIsStreamable ) const noexcept
+{
+    rbIsStreamable = m_featureInfo.isStreamable;
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType BaseFeature::GetValidValueSet(VmbInt64_t* buffer, VmbUint32_t bufferSize, VmbUint32_t* setSize) const noexcept
+{
+    return VmbErrorWrongType;
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/BaseFeature.h b/VimbaX/api/source/VmbCPP/BaseFeature.h
new file mode 100644
index 0000000000000000000000000000000000000000..511b4ace6952340973cbb8f6b0f095ad15613991
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/BaseFeature.h
@@ -0,0 +1,173 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        BaseFeature.h
+
+  Description: Definition of base class VmbCPP::BaseFeature.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_BASEFEATURE_H
+#define VMBCPP_BASEFEATURE_H
+
+/**
+* \file     BaseFeature.h
+*
+* \brief    Definition of base class VmbCPP::BaseFeature.
+*/
+
+#include <VmbC/VmbCTypeDefinitions.h>
+
+#include <VmbCPP/BasicLockable.h>
+#include <VmbCPP/SharedPointerDefines.h>
+#include <VmbCPP/UniquePointer.hpp>
+#include <VmbCPP/VmbCPPCommon.h>
+
+struct VmbFeatureInfo;
+
+namespace VmbCPP {
+
+class EnumEntry;
+class Feature;
+class FeatureContainer;
+
+class BaseFeature : protected BasicLockable
+{
+    friend class Feature;
+
+public:
+    BaseFeature(const VmbFeatureInfo& featureInfo, FeatureContainer & featureContainer );
+
+    /**
+     * \brief object is not default constructible 
+     */
+    BaseFeature() = delete;
+
+    /**
+     * object is not copyable
+     */
+    BaseFeature(const BaseFeature&) = delete;
+
+    /**
+     * object is not copyable
+     */
+    BaseFeature& operator=(const BaseFeature&) = delete;
+
+    virtual ~BaseFeature();
+
+    virtual    VmbErrorType GetValue( VmbInt64_t &value ) const noexcept;
+    virtual    VmbErrorType GetValue( double &value ) const noexcept;
+    virtual    VmbErrorType GetValue( bool &value ) const noexcept;
+
+    virtual    VmbErrorType SetValue( VmbInt64_t value ) noexcept;
+    virtual    VmbErrorType SetValue( double value ) noexcept;
+    virtual    VmbErrorType SetValue( const char *pValue ) noexcept;
+    virtual    VmbErrorType SetValue( bool value ) noexcept;
+
+    virtual    VmbErrorType GetEntry( EnumEntry &entry, const char * pStrEntryName ) const noexcept;
+
+    virtual    VmbErrorType GetRange( VmbInt64_t &minimum, VmbInt64_t &maximum ) const noexcept;
+    virtual    VmbErrorType GetRange( double &minimum, double &maximum ) const noexcept;
+
+    virtual    VmbErrorType HasIncrement( VmbBool_t &incrementSupported) const noexcept;
+    virtual    VmbErrorType GetIncrement( VmbInt64_t &increment ) const noexcept;
+    virtual    VmbErrorType GetIncrement( double &increment ) const noexcept;
+
+    virtual    VmbErrorType IsValueAvailable( const char *pValue, bool &available ) const noexcept;
+    virtual    VmbErrorType IsValueAvailable( const VmbInt64_t value, bool &available ) const noexcept;
+
+    virtual    VmbErrorType RunCommand() noexcept;
+    virtual    VmbErrorType IsCommandDone( bool &isDone ) const noexcept;
+
+               VmbErrorType GetDataType( VmbFeatureDataType &dataType ) const noexcept;
+               VmbErrorType GetFlags( VmbFeatureFlagsType &flags ) const noexcept;
+               VmbErrorType GetPollingTime( VmbUint32_t &pollingTime ) const noexcept;
+               VmbErrorType GetVisibility( VmbFeatureVisibilityType &visibility ) const noexcept;
+               VmbErrorType IsReadable( bool &isReadable ) noexcept;
+               VmbErrorType IsWritable( bool &isWritable ) noexcept;
+               VmbErrorType IsStreamable( bool &isStreamable ) const noexcept;
+
+               VmbErrorType RegisterObserver( const IFeatureObserverPtr &observer );
+               VmbErrorType UnregisterObserver( const IFeatureObserverPtr &observer );
+
+    void ResetFeatureContainer();
+
+  protected:
+    /**
+    * \brief  Copy of feature infos.
+    */
+    struct FeatureInfo
+    {
+        /**
+        * \name FeatureInfo
+        * \{
+        */
+        std::string                     name;                   //!< Verbose name
+        VmbFeatureData_t                featureDataType;        //!< Data type of this feature
+        VmbFeatureFlags_t               featureFlags;           //!< Access flags for this feature
+        bool                            hasSelectedFeatures;    //!< true if the feature selects other features
+        std::string                     category;               //!< Category this feature can be found in
+        std::string                     displayName;            //!< Feature name to be used in GUIs
+        VmbUint32_t                     pollingTime;            //!< Predefined polling time for volatile features
+        std::string                     unit;                   //!< Measuring unit as given in the XML file
+        std::string                     representation;         //!< Representation of a numeric feature
+        VmbFeatureVisibility_t          visibility;             //!< GUI visibility
+        std::string                     tooltip;                //!< Short description
+        std::string                     description;            //!< Longer description
+        std::string                     sfncNamespace;          //!< Namespace this feature resides in
+        bool                            isStreamable;           //!< Feature can be stored or loaded from/into a file
+        
+        /**
+        * \}
+        */
+    };
+
+    FeatureInfo m_featureInfo;
+
+    FeatureContainer *m_pFeatureContainer;
+
+    // Array functions to pass data across DLL boundaries
+    virtual    VmbErrorType GetEntries(EnumEntry* pEntries, VmbUint32_t& size) noexcept;
+    virtual    VmbErrorType GetValues(const char** pValues, VmbUint32_t& size) noexcept;
+    virtual    VmbErrorType GetValues(VmbInt64_t* pValues, VmbUint32_t& Size) noexcept;
+    virtual    VmbErrorType GetValue(char* const pValue, VmbUint32_t& length) const noexcept;
+    virtual    VmbErrorType GetValue(VmbUchar_t* pValue, VmbUint32_t& size, VmbUint32_t& sizeFilled) const noexcept;
+    virtual    VmbErrorType SetValue(const VmbUchar_t* pValue, VmbUint32_t size) noexcept;
+    virtual    VmbErrorType GetValidValueSet(VmbInt64_t* buffer, VmbUint32_t bufferSize, VmbUint32_t* setSize) const noexcept;
+
+private:
+    struct Impl;
+    UniquePointer<Impl> m_pImpl;
+
+    VmbErrorType GetName( char * const pName, VmbUint32_t &length ) const noexcept;
+    VmbErrorType GetDisplayName( char * const pDisplayName, VmbUint32_t &length ) const noexcept;
+    VmbErrorType GetCategory( char * const pCategory, VmbUint32_t &length ) const noexcept;
+    VmbErrorType GetUnit( char * const pUnit, VmbUint32_t &length ) const noexcept;
+    VmbErrorType GetRepresentation( char * const pRepresentation, VmbUint32_t &length ) const noexcept;
+    VmbErrorType GetToolTip( char * const pToolTip, VmbUint32_t &length ) const noexcept;
+    VmbErrorType GetDescription( char * const pDescription, VmbUint32_t &length ) const noexcept;
+    VmbErrorType GetSFNCNamespace( char * const pSFNCNamespace, VmbUint32_t &length ) const noexcept;
+    VmbErrorType GetSelectedFeatures( FeaturePtr *pSelectedFeatures, VmbUint32_t &nSize ) noexcept;
+};
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/BasicLockable.cpp b/VimbaX/api/source/VmbCPP/BasicLockable.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b775dc44ed02569b2931e02263f9c2eea9e1f634
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/BasicLockable.cpp
@@ -0,0 +1,64 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        BasicLockable.cpp
+
+  Description: Implementation of class VmbCPP::BasicLockable.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <VmbCPP/BasicLockable.h>
+
+#include <utility>
+
+#include <VmbCPP/LoggerDefines.h>
+
+
+namespace VmbCPP {
+
+BasicLockable::BasicLockable()
+    : m_pMutex(new Mutex())
+{
+}
+
+BasicLockable::~BasicLockable() = default;
+
+BasicLockable::BasicLockable( MutexPtr pMutex )
+    : m_pMutex( pMutex )
+{
+}
+
+BasicLockable::BasicLockable(MutexPtr&& pMutex) noexcept
+    : m_pMutex(std::move(pMutex))
+{
+}
+
+MutexPtr& BasicLockable::GetMutex()
+{
+    return m_pMutex;
+}
+
+const MutexPtr& BasicLockable::GetMutex() const
+{
+    return m_pMutex;
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/BoolFeature.cpp b/VimbaX/api/source/VmbCPP/BoolFeature.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2f556f723cb6d34085b92675d5586c69133fbafd
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/BoolFeature.cpp
@@ -0,0 +1,61 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        BoolFeature.cpp
+
+  Description: Implementation of class VmbCPP::BoolFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "BoolFeature.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCPP/FeatureContainer.h>
+
+namespace VmbCPP {
+
+BoolFeature::BoolFeature( const VmbFeatureInfo_t& featureInfo, FeatureContainer& featureContainer )
+    :   BaseFeature( featureInfo, featureContainer )
+{}
+
+VmbErrorType BoolFeature::GetValue( bool &rbValue ) const noexcept
+{
+    if (nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return (VmbErrorType)VmbFeatureBoolGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rbValue );
+}
+
+VmbErrorType BoolFeature::SetValue( bool bValue ) noexcept
+{
+    if (nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return (VmbErrorType)VmbFeatureBoolSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), bValue );
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/BoolFeature.h b/VimbaX/api/source/VmbCPP/BoolFeature.h
new file mode 100644
index 0000000000000000000000000000000000000000..2c50508f5848da15315a3aade83db00e4a3a1da3
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/BoolFeature.h
@@ -0,0 +1,71 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        BoolFeature.h
+
+  Description: Definition of class VmbCPP::BoolFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_BOOLFEATURE_H
+#define VMBCPP_BOOLFEATURE_H
+
+/**
+* \file        BoolFeature.h
+*
+* \brief       Definition of class VmbCPP::BoolFeature.
+*              Intended for use in the implementation of VmbCPP.
+*/
+
+#include <VmbC/VmbCTypeDefinitions.h>
+
+#include "BaseFeature.h"
+
+
+namespace VmbCPP {
+
+class BoolFeature final : public BaseFeature
+{
+public:
+    BoolFeature( const VmbFeatureInfo_t& featureInfo, FeatureContainer& pFeatureContainer );
+
+    /**
+    *  \brief                Get the value of a boolean feature
+    *
+    * \param[out]  value     Value of type 'bool'
+    *
+    * \returns ::VmbErrorType
+    * \retval ::VmbErrorSuccess     If no error
+    * \retval ::VmbErrorWrongType   Feature is not a bool feature
+    * \retval VmbInternalError:     Value could not get queried
+    */ 
+    virtual VmbErrorType GetValue( bool &value ) const noexcept override;
+
+    /**
+    * \brief      Set the value of a boolean feature
+    */ 
+    virtual VmbErrorType SetValue( bool value ) noexcept override;
+};
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/CMakeLists.txt b/VimbaX/api/source/VmbCPP/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..033dd76e7960d43b21b684274466cd4dd7e2eb9d
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/CMakeLists.txt
@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(VmbCPP)
+
+set(VMB_CPP_TARGET_NAME "VmbCPP" CACHE STRING "The name to use for the VmbCPP version compiled from source")
+
+# make sure the configuration scripts for Vmb can be found
+list(APPEND CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../..")
+
+find_package(Vmb REQUIRED COMPONENTS CPP-sources)
+
+vmb_create_cpp_target(TARGET_NAME ${VMB_CPP_TARGET_NAME})
diff --git a/VimbaX/api/source/VmbCPP/Camera.cpp b/VimbaX/api/source/VmbCPP/Camera.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0777ba8c5a2dda7c20e24446efb65ec48fe3201a
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Camera.cpp
@@ -0,0 +1,1077 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        Camera.cpp
+
+  Description: Implementation of class VmbCPP::Camera.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+#pragma warning(disable:4996)
+#include <sstream>
+#pragma warning(default:4996)
+#include <cstring>
+
+#include <VmbCPP/Camera.h>
+
+#include <VmbCPP/LoggerDefines.h>
+
+#include "CopyUtils.hpp"
+#include "FrameImpl.h"
+#include "Helper.h"
+#include "MutexGuard.h"
+
+
+namespace VmbCPP {
+
+/**
+*
+* \brief  helper to run a command feature for camera.
+*
+*
+* \param[in] cam        camera to run command on
+* \param[in] name       command name to run
+*/
+VmbErrorType RunFeatureCommand( Camera&cam, const char* name)
+{
+    if(nullptr == name)
+    {
+        LOG_FREE_TEXT("feature name is null");
+        return VmbErrorBadParameter;
+    }
+    FeaturePtr      pFeature;
+    VmbErrorType    res         = cam.GetFeatureByName( name, pFeature );
+    if ( VmbErrorSuccess != res )
+    {
+        LOG_ERROR(std::string("Could not get feature by name for ") + name, res);
+        return res;
+    }
+    res = SP_ACCESS(pFeature)->RunCommand();
+    if( VmbErrorSuccess != res)
+    {
+        LOG_ERROR(std::string("Could not run feature command ") + name , res);
+    }
+    return res;
+}
+
+/**
+* \brief  small helper class that keeps track of resources needed for image acquisition
+*/
+struct AcquireImageHelper
+{
+private:
+    //clean up tasks
+    enum tear_down_tasks
+    {
+        RevokeFrame,
+        FlushQueue,
+        EndCapture,
+        AcquisitionStop,
+    };
+    typedef std::vector<tear_down_tasks>    task_storage;
+    task_storage                            m_Tasks;        // storage for cleanup tasks
+    Camera&                                 m_Camera;
+
+    ///get the top most taks and pop it from stack
+    tear_down_tasks GetTask()
+    {
+        tear_down_tasks current_task = m_Tasks.back();
+        m_Tasks.pop_back();
+        return current_task;
+    }
+
+    const AcquireImageHelper& operator=( const AcquireImageHelper &o);
+
+    /**
+    * \brief  prepare a frame with given payload size.
+    *
+    * \param[in,out] pFrame         a frame pointer that can point to Null
+    * \param[in]     payload_size   payload size for frame
+    * \param[in]     allocationMode     frame allocation mode
+    * \param[in]     bufferAlignment    buffer alignment
+    */
+    static VmbErrorType SetupFrame(FramePtr &pFrame, VmbInt64_t PayloadSize, FrameAllocationMode allocationMode, VmbUint32_t bufferAlignment)
+    {
+        if( PayloadSize <= 0)
+        {
+            LOG_FREE_TEXT("payload size has to be larger than 0");
+            return VmbErrorBadParameter;
+        }
+        VmbUint32_t     buffer_size(0);
+        VmbErrorType    Result;
+        if( ! SP_ISNULL( pFrame) )  // if frame already exists, check its buffer size
+        {
+            Result = SP_ACCESS( pFrame) ->GetBufferSize(buffer_size);
+            if( VmbErrorSuccess != Result)
+            {
+                LOG_ERROR("Could not get frame buffer size", Result);
+                return Result;
+            }
+            if( buffer_size >= PayloadSize) // buffer is large enough, no need to create new frame
+            {
+                return VmbErrorSuccess;
+            }
+        }
+        try
+        {
+            SP_SET( pFrame, new Frame( PayloadSize, allocationMode, bufferAlignment));
+            if( SP_ISNULL( pFrame) ) // in case we find a not throwing new
+            {
+                LOG_FREE_TEXT("error allocating frame");
+                return VmbErrorResources;
+            }
+        }
+        catch(...)
+        {
+            LOG_FREE_TEXT("error allocating frame");
+            return VmbErrorResources;
+        }
+        return VmbErrorSuccess;
+    }
+public:
+    // construct helper from camera
+    AcquireImageHelper(Camera &Cam)
+        : m_Camera( Cam)
+    {}
+    // destroy will tear all down
+    ~AcquireImageHelper()
+    {
+        TearDown();
+    }
+    
+    /**
+    *
+    * \brief     helper to announce a list of frames to the camera.
+    *
+    * \details   note the function will try to construct and announce nFrameCount frames t o the camera, even if some of them can not be created or announced, only if nFramesAnnounced == 0 the function was unsuccessful
+    *
+    * \param[in]        Camera              Camera to announce the frames too
+    * \param[in,out]    pFrames             storage for frame pointer, if they are null or have no sufficient space the frames will be created
+    * \param[in]        nFrameCount         number of frame pointers in pFrames
+    * \param[in]        nPayloadSize        payload size for one frame
+    * \param[out]       nFramesAnnounced    returns number of successful announced frames
+    * \param[in]        allocationMode      frame allocation mode
+    * \param[in]        bufferAlignment     buffer alignment
+    *
+    * \returns   the first error that occurred or ::VmbErrorSuccess if non occurred 
+    */
+    static VmbErrorType AnnounceFrames(Camera &Camera, FramePtr *pFrames, VmbUint32_t nFrameCount, VmbInt64_t nPayloadSize, VmbUint32_t &nFramesAnnounced, FrameAllocationMode allocationMode, VmbUint32_t bufferAlignment)
+    {
+        VmbErrorType    Result  = VmbErrorSuccess;
+        nFramesAnnounced        = 0;
+        for( VmbUint32_t FrameNumber= 0; FrameNumber < nFrameCount; ++FrameNumber)
+        {
+            VmbErrorType LocalResult = SetupFrame( pFrames[ FrameNumber ], nPayloadSize, allocationMode, bufferAlignment);         //< try to init frame
+            if( VmbErrorSuccess == LocalResult)
+            {
+                LocalResult = Camera.AnnounceFrame( pFrames[ FrameNumber] );       //< announce frame if successful initialized
+                if ( VmbErrorSuccess == LocalResult )
+                {
+                    ++nFramesAnnounced;
+                }
+                else
+                {
+                    std::stringstream strMsg("Could only successfully announce ");
+                    strMsg << nFramesAnnounced << " of " <<  nFrameCount  << " frames. Will continue with queuing those.";
+                    LOG_FREE_TEXT( strMsg.str() );
+                }
+            }
+            if( VmbErrorSuccess == Result )
+            {
+                Result = LocalResult;
+            }
+        }
+        return Result;
+    }
+    
+    /**
+    *
+    * \brief  announce a FramePtrVector to the camera.
+    *
+    * \param[in]        Camera          camera to announce the frames to
+    * \param[in,out]    Frames          vector of frame pointers that will contain the announced frames on return, can be empty on input
+    * \param[in]        nBufferCount    number of frames to announce, if nBufferCount > Frames.size() on return, some frames could not be announced
+    * \param[in]        nPayloadSize    frame payload size
+    * \param[in]        Observer        observer to attach to frames
+    * \param[in]        allocationMode  frame allocation mode
+    * \param[in]        bufferAlignment buffer alignment
+    */
+    static VmbErrorType AnnounceFrames(Camera &Camera, FramePtrVector &Frames, VmbUint32_t nBufferCount, VmbInt64_t nPayloadSize, const IFrameObserverPtr& Observer, FrameAllocationMode allocationMode, VmbUint32_t bufferAlignment)
+    {
+        try
+        {
+            Frames.reserve( nBufferCount);
+        }
+        catch(...)
+        {
+            LOG_FREE_TEXT("could not allocate frames");
+            return VmbErrorResources;
+        }
+        VmbErrorType Result = VmbErrorSuccess;
+        for( VmbUint32_t i=0; i < nBufferCount; ++i)
+        {
+            FramePtr tmpFrame;
+            VmbErrorType LocalResult = SetupFrame( tmpFrame, nPayloadSize, allocationMode, bufferAlignment );
+            if( ! SP_ISNULL( tmpFrame) )
+            {
+                LocalResult = SP_ACCESS( tmpFrame)->RegisterObserver( Observer );
+                if( VmbErrorSuccess == LocalResult )
+                {
+                    LocalResult = Camera.AnnounceFrame( tmpFrame);
+                    if( VmbErrorSuccess == LocalResult )
+                    {
+                        Frames.emplace_back(std::move(tmpFrame));
+                    }
+                    else
+                    {
+                        LOG_ERROR("could not announce frame", LocalResult);
+                    }
+                }
+                else
+                {
+                    LOG_ERROR("could not register frame observer", LocalResult);
+                }
+            }
+            else
+            {
+                LOG_ERROR("could not allocate frame", LocalResult);
+            }
+            if( VmbErrorSuccess == Result)
+            {
+                Result = LocalResult;
+            }
+        }
+        return Result;
+    }
+
+    /**
+    *
+    * \brief  prepare image grab for single image.
+    *
+    * \param[in,out]    pFrame                      frame to hold the image
+    * \param[in]        PayloadSize                 frame payload size
+    * \param[in]        allocationMode              frame allocation mode
+    * \param[in]        bufferAlignmnet             frame buffer alignment
+    * \param[in]        SetFrameSynchronousFlag     function pointer for setting the synchronous acquisition flag in the frame impl
+    */
+    VmbErrorType Prepare(FramePtr &pFrame, VmbInt64_t PayloadSize, FrameAllocationMode allocationMode, VmbUint32_t bufferAlignment, void (*SetFrameSynchronousFlag)(FramePtr& frame))
+    {
+        VmbErrorType res;
+        res = SetupFrame( pFrame, PayloadSize, allocationMode, bufferAlignment );     // init frame if necessary
+        if ( VmbErrorSuccess != res )
+        {
+            LOG_ERROR("Could not create frame", res);
+            return res;
+        }
+        res = m_Camera.AnnounceFrame( pFrame );                     // announce frame to camera
+        if ( VmbErrorSuccess != res )
+        {
+            LOG_ERROR("Could not Announce frame", res);
+            return res;
+        }
+        m_Tasks.push_back( RevokeFrame);                            // if successful announced we need to revoke frames
+        res = m_Camera.StartCapture();                              // start capture logic
+        if ( VmbErrorSuccess != res )
+        {
+            LOG_ERROR( "Could not Start Capture", res);
+            return res;
+        }
+        m_Tasks.push_back( EndCapture);                             // if capture logic is started we need end capture task
+                
+        SetFrameSynchronousFlag(pFrame);                            // Set Synchronous flag before queuing the frame
+
+        res = m_Camera.QueueFrame( pFrame );                        // queue frame in processing logic
+        if ( VmbErrorSuccess != res )
+        {
+            LOG_ERROR( "Could not queue frame", res );
+            return res;
+        }
+        m_Tasks.pop_back();
+        m_Tasks.push_back( FlushQueue);                             // if frame queued we need flush queue task
+        m_Tasks.push_back( EndCapture);
+        FeaturePtr pFeature;
+        res = RunFeatureCommand( m_Camera, "AcquisitionStart" );    // start acquisition
+        if ( VmbErrorSuccess != res )
+        {
+            LOG_ERROR("Could not run command AcquisitionStart", res);
+            return res;
+        }
+        m_Tasks.push_back( AcquisitionStop);
+        return res;
+    }
+    /**
+    *
+    * \brief  prepare image acquisition for multiple frames.
+    *
+    * \param[in,out]     pFrames                    non null pointer to field of frame pointers (can point to null) that hold the captured images
+    * \param[in]         nFrameCount                number of frames in vector
+    * \param[in]         nPayLoadSize               payload size
+    * \param[out]        nFramesQueued              returns number of successful queued images
+    * \param[in]         allocationMode             frame allocation mode
+    * \param[in]         bufferAlignment            frame buffer alignment
+    * \param[in]         SetFrameSynchronousFlag    function pointer for setting the synchronous acquisition flag in the frame impl
+    */
+    VmbErrorType Prepare(FramePtr *pFrames, VmbUint32_t nFrameCount, VmbInt64_t nPayloadSize, VmbUint32_t &nFramesQueued, FrameAllocationMode allocationMode, VmbUint32_t bufferAlignment, void (*SetFrameSynchronousFlag)(FramePtr& frame))
+    {
+        if(nullptr == pFrames || 0 == nFrameCount)                            // sanity check
+        {
+            return VmbErrorBadParameter;
+        }
+        nFramesQueued = 0;
+        VmbErrorType    Result          = VmbErrorSuccess;
+        VmbUint32_t     FramesAnnounced = 0;
+        Result = AnnounceFrames( m_Camera, pFrames, nFrameCount, nPayloadSize, FramesAnnounced, allocationMode, bufferAlignment);
+        if( 0 == FramesAnnounced)
+        {
+            return Result;
+        }
+        m_Tasks.push_back( RevokeFrame);                                    // add cleanup task for announced frames
+        Result = m_Camera.StartCapture();                                   // start capture logic
+        if ( VmbErrorSuccess != Result)
+        {
+            LOG_ERROR( "Could not Start Capture", Result );
+            return Result;
+        }
+        m_Tasks.push_back( EndCapture);                                     // add cleanup task to end capture
+        for( VmbUint32_t FrameNumber = 0; FrameNumber < FramesAnnounced; ++FrameNumber)
+        {
+            SetFrameSynchronousFlag(pFrames[FrameNumber]);                  // Set Synchronous flag before queuing the frame
+            Result = m_Camera.QueueFrame( pFrames[ FrameNumber ] );         // try queuing frame
+            if ( VmbErrorSuccess != Result )
+            {
+                std::stringstream strMsg("Could only successfully queue ");
+                strMsg << nFramesQueued << " of " << nFrameCount << " frames. Will continue with filling those.";
+                LOG_ERROR( strMsg.str(), Result );
+                break;
+            }
+            else
+            {
+                ++nFramesQueued;
+            }
+        }
+        if( 0 == nFramesQueued) // we cannot capture anything, there are no frames queued
+        {
+            return Result;
+        }
+        m_Tasks.pop_back();
+        m_Tasks.push_back( FlushQueue);                         // if any frame was queued we need a cleanup task
+        m_Tasks.push_back( EndCapture);
+        FeaturePtr pFeature;
+        Result = RunFeatureCommand( m_Camera, "AcquisitionStart" ); // start acquisition logic
+        if ( VmbErrorSuccess != Result )
+        {
+            LOG_ERROR("Could not run command AcquisitionStart", Result);
+            return Result;
+        }
+        m_Tasks.push_back( AcquisitionStop);
+        return Result;
+    }
+    
+    /**
+    *
+    * \brief  free all acquired resources.
+    */
+    VmbErrorType TearDown()
+    {
+        VmbErrorType res = VmbErrorSuccess;
+        while( ! m_Tasks.empty() )
+        {
+            VmbErrorType local_result = VmbErrorSuccess;
+            switch( GetTask() )
+            {
+            case AcquisitionStop:
+                    local_result = RunFeatureCommand(m_Camera, "AcquisitionStop");
+                    if( VmbErrorSuccess != local_result)
+                    {
+                        LOG_ERROR("Could not run command AquireStop", local_result);
+                    }
+                    break;
+            case EndCapture:
+                    local_result = m_Camera.EndCapture();
+                    if( VmbErrorSuccess != local_result)
+                    {
+                        LOG_ERROR("Could Not run EndCapture", local_result);
+                    }
+                    break;
+            case FlushQueue:
+                    local_result = m_Camera.FlushQueue();
+                    if( VmbErrorSuccess != local_result)
+                    {
+                        LOG_ERROR("Could not run Flush Queue command", local_result);
+                    }
+                    break;
+            case RevokeFrame:
+                    local_result = m_Camera.RevokeAllFrames();
+                    if( VmbErrorSuccess != local_result)
+                    {
+                        LOG_ERROR("Could Not Run Revoke Frames command", local_result);
+                    }
+                    break;
+            }
+            if( VmbErrorSuccess == res)
+                res = local_result;
+        }
+        return res;
+    }
+};
+
+
+struct Camera::Impl
+{
+    /**
+    * \brief Copy of camera infos
+    */
+    struct CameraInfo
+    {
+        /**
+        * \name CameraInfo
+        * \{
+        */
+        std::string     cameraIdString;             //!< Identifier for each camera (maybe not unique with multiple transport layers and interfaces)
+        std::string     cameraIdExtended;           //!< Globally unique identifier for the camera
+        std::string     cameraName;                 //!< Name of the camera
+        std::string     modelName;                  //!< Model name
+        std::string     serialString;               //!< Serial number       
+        /**
+        * \}
+        */
+    } m_cameraInfo;
+
+    MutexPtr                        m_pQueueFrameMutex;
+    bool                            m_bAllowQueueFrame;
+
+    InterfacePtr                    m_pInterface;       //<! Shared pointer to the interface the camera is connected to
+    LocalDevicePtr                  m_pLocalDevice;     //<! Shared pointer to the local device
+    StreamPtrVector                 m_streams;          //<! Verctor of available stream pointers in the same order, as it will be delivered by the VmbC camera opening function
+
+};
+
+
+Camera::Camera(const VmbCameraInfo_t& camInfo,
+               const InterfacePtr& pInterface)
+    : m_pImpl(new Impl())
+{
+    m_pImpl->m_cameraInfo.cameraIdString.assign(camInfo.cameraIdString ? camInfo.cameraIdString : "");
+    m_pImpl->m_cameraInfo.cameraIdExtended.assign(camInfo.cameraIdExtended ? camInfo.cameraIdExtended : "");
+
+    m_pImpl->m_pInterface = pInterface;
+    m_pImpl->m_cameraInfo.cameraName.assign(camInfo.cameraName ? camInfo.cameraName : "");
+    m_pImpl->m_cameraInfo.modelName.assign(camInfo.modelName ? camInfo.modelName : "");
+    m_pImpl->m_cameraInfo.serialString.assign(camInfo.serialString ? camInfo.serialString : "");
+    m_pImpl->m_bAllowQueueFrame = true;
+    SP_SET(m_pImpl->m_pQueueFrameMutex, new Mutex);
+}
+
+Camera::~Camera()
+{
+    Close();
+}
+
+VmbErrorType Camera::Open( VmbAccessModeType eAccessMode )
+{
+    VmbError_t res;
+    VmbHandle_t hHandle;
+
+    res = VmbCameraOpen( m_pImpl->m_cameraInfo.cameraIdExtended.c_str(), (VmbAccessMode_t)eAccessMode, &hHandle );
+
+    if ( VmbErrorSuccess == res )
+    {
+        SetHandle( hHandle );
+        m_pImpl->m_streams.clear();
+        VmbCameraInfo_t camInfo;
+        res = VmbCameraInfoQueryByHandle(hHandle, &camInfo, sizeof(camInfo));
+        if (VmbErrorSuccess == res)
+        {
+            // create stream objects
+            for (VmbUint32_t i = 0; i < camInfo.streamCount; ++i)
+            {
+                VmbHandle_t sHandle = camInfo.streamHandles[i];
+                if (nullptr != sHandle)
+                {
+                    StreamPtr pStream { new Stream(sHandle, (i == 0 ? true : false) ) };
+                    m_pImpl->m_streams.emplace_back(pStream);
+                }
+            }
+
+            //create local device object
+            m_pImpl->m_pLocalDevice = LocalDevicePtr(new LocalDevice(camInfo.localDeviceHandle));
+        }
+    }
+
+    return (VmbErrorType)res;
+}
+
+VmbErrorType Camera::Close()
+{
+    VmbError_t res = VmbErrorDeviceNotOpen;
+    
+    for (auto pStream : m_pImpl->m_streams)
+    {
+        SP_ACCESS(pStream)->Close();
+    }
+    m_pImpl->m_streams.clear();
+
+    if (nullptr != GetHandle() )
+    {
+        Reset();
+        res = VmbCameraClose( GetHandle() );
+        RevokeHandle();
+    }
+
+    SP_RESET(m_pImpl->m_pLocalDevice);
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType Camera::GetID( char * const pStrID, VmbUint32_t &rnLength, bool extended ) const noexcept
+{
+    const std::string& strID = extended ?
+        m_pImpl->m_cameraInfo.cameraIdExtended
+        : m_pImpl->m_cameraInfo.cameraIdString;
+
+    return CopyToBuffer(strID, pStrID, rnLength);
+}
+
+VmbErrorType Camera::GetName( char * const pStrName, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_cameraInfo.cameraName, pStrName, rnLength);
+}
+
+VmbErrorType Camera::GetModel( char * const pStrModel, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_cameraInfo.modelName, pStrModel, rnLength);
+}
+
+VmbErrorType Camera::GetSerialNumber( char * const pStrSerial, VmbUint32_t &rnLength ) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_cameraInfo.serialString, pStrSerial, rnLength);
+}
+
+VmbErrorType Camera::GetInterfaceType( VmbTransportLayerType &reInterfaceType ) const
+{
+    if (SP_ISNULL(m_pImpl->m_pInterface))
+    {
+        return VmbErrorNotAvailable;
+    }
+
+    return SP_ACCESS(m_pImpl->m_pInterface)->GetType(reInterfaceType);
+}
+
+VmbErrorType Camera::GetInterface(InterfacePtr &rInterface) const
+{
+    if (SP_ISNULL(m_pImpl->m_pInterface))
+    {
+        return VmbErrorNotAvailable;
+    }
+    rInterface = m_pImpl->m_pInterface;
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Camera::GetLocalDevice(LocalDevicePtr& rLocalDevice)
+{
+    if (SP_ISNULL(m_pImpl->m_pLocalDevice))
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    rLocalDevice = m_pImpl->m_pLocalDevice;
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Camera::GetTransportLayer(TransportLayerPtr& rTransportLayer) const
+{
+    if (SP_ISNULL(m_pImpl->m_pInterface))
+    {
+        return VmbErrorNotAvailable;
+    }
+
+    return SP_ACCESS(m_pImpl->m_pInterface)->GetTransportLayer(rTransportLayer);
+}
+
+VmbErrorType Camera::GetPermittedAccess( VmbAccessModeType &rePermittedAccess ) const
+{
+    VmbError_t res;
+    VmbCameraInfo_t info;
+
+    res = VmbCameraInfoQuery( m_pImpl->m_cameraInfo.cameraIdExtended.c_str(), &info, sizeof( VmbCameraInfo_t ));
+
+    if ( VmbErrorSuccess == res )
+    {
+        rePermittedAccess = static_cast<VmbAccessModeType>(info.permittedAccess);
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType Camera::ReadMemory( const VmbUint64_t address, VmbUchar_t *pBuffer, VmbUint32_t nBufferSize, VmbUint32_t *pSizeComplete ) const noexcept
+{
+    return static_cast<VmbErrorType>( VmbMemoryRead( GetHandle(), address, nBufferSize, (char*)pBuffer, pSizeComplete ) );
+}
+
+VmbErrorType Camera::WriteMemory( const VmbUint64_t address, const VmbUchar_t *pBuffer, VmbUint32_t nBufferSize, VmbUint32_t *pSizeComplete ) noexcept
+{
+    return static_cast<VmbErrorType>( VmbMemoryWrite( GetHandle(), address, nBufferSize, (char *)pBuffer, pSizeComplete ) );
+}
+
+//Get one image synchronously.
+VmbErrorType Camera::AcquireSingleImage( FramePtr &rFrame, VmbUint32_t nTimeout, FrameAllocationMode allocationMode)
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+
+    VmbErrorType    res;
+    VmbUint32_t     nPayloadSize;
+    VmbUint32_t     nStreamBufferAlignment;
+    FeaturePtr      pFeature;
+
+    res = GetPayloadSize(nPayloadSize);
+
+    if ( VmbErrorSuccess == res )
+    {
+        res = SP_ACCESS(m_pImpl->m_streams.at(0))->GetStreamBufferAlignment(nStreamBufferAlignment);
+    }
+
+    if ( VmbErrorSuccess == res )
+    {
+        AcquireImageHelper AcquireHelper( *this );
+
+        auto SetFrameSynchronousFlagLambda = [](FramePtr& frame) {SP_ACCESS(frame)->m_pImpl->m_bSynchronousGrab = true; };
+
+        res = AcquireHelper.Prepare( rFrame, nPayloadSize, allocationMode, nStreamBufferAlignment, SetFrameSynchronousFlagLambda);
+        if ( VmbErrorSuccess == res )
+        {
+            res = (VmbErrorType)VmbCaptureFrameWait( GetHandle(), &(SP_ACCESS( rFrame )->m_pImpl->m_frame), nTimeout );
+            if ( VmbErrorSuccess != res )
+            {
+                LOG_FREE_TEXT( "Could not acquire single image." )
+            }
+        }
+        else
+        {
+            LOG_FREE_TEXT( "Preparing image acquisition failed." );
+        }
+        VmbErrorType local_result = AcquireHelper.TearDown();
+        if( VmbErrorSuccess != local_result )
+        {
+            LOG_ERROR( "Tear down capture logic failed.", local_result )
+            if( VmbErrorSuccess == res)
+            {
+                res = local_result;
+            }
+        }
+    }
+    else
+    {
+        LOG_ERROR( "Could not get payload size", res );
+    }
+
+    return res;
+}
+
+VmbErrorType Camera::AcquireMultipleImages( FramePtr *pFrames, VmbUint32_t nSize, VmbUint32_t nTimeout, VmbUint32_t *pNumFramesCompleted, FrameAllocationMode allocationMode)
+{
+    VmbErrorType res = VmbErrorBadParameter;
+
+    if (nullptr == pFrames
+         || 0 == nSize )
+    {
+        return res;
+    }
+    
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+
+    if (nullptr != pNumFramesCompleted )
+    {
+        *pNumFramesCompleted = 0;
+    }
+
+    VmbUint32_t nPayloadSize;
+    VmbUint32_t nStreamBufferAlignment;
+    FeaturePtr pFeature;
+
+    res = GetPayloadSize(nPayloadSize);
+
+    if (VmbErrorSuccess == res)
+    {
+        res = SP_ACCESS(m_pImpl->m_streams.at(0))->GetStreamBufferAlignment(nStreamBufferAlignment);
+    }
+
+    if ( VmbErrorSuccess == res )
+    {
+        AcquireImageHelper AquireHelper( *this );
+        VmbUint32_t nFramesQueued = 0;
+
+        auto SetFrameSynchronousFlagLambda = [](FramePtr& frame) {SP_ACCESS(frame)->m_pImpl->m_bSynchronousGrab = true; };
+        res = AquireHelper.Prepare( pFrames, nSize, nPayloadSize, nFramesQueued, allocationMode, nStreamBufferAlignment, SetFrameSynchronousFlagLambda);
+
+        if ( VmbErrorSuccess == res )
+        {
+            for ( VmbUint32_t nFrameCount = 0; nFrameCount <nFramesQueued; ++ nFrameCount )
+            {
+                res = (VmbErrorType)VmbCaptureFrameWait( GetHandle(), &(SP_ACCESS( pFrames[nFrameCount] )->m_pImpl->m_frame), nTimeout );
+                if ( VmbErrorSuccess != res )
+                {
+                    std::stringstream strMsg;
+                    strMsg << "Could only successfully fill " << 
+                        (nFrameCount > 0 ? nFrameCount - 1 : 0)  << " of " << nSize << " frames. Will stop acquisition now.";
+                    LOG_FREE_TEXT( strMsg.str() );
+                    break;
+                }
+                else if (nullptr !=  pNumFramesCompleted )
+                {
+                    ++(*pNumFramesCompleted);
+                }
+            }
+            VmbErrorType local_res = AquireHelper.TearDown();
+            if( VmbErrorSuccess == res)
+            {
+                res = local_res;
+            }
+        }
+        else
+        {
+            LOG_ERROR( "Could not start capture", res )
+        }
+    }
+    else
+    {
+        LOG_ERROR( "Could not get feature PayloadSize", res);
+    }
+
+    return res;
+}
+
+VmbErrorType Camera::StartContinuousImageAcquisition( int nBufferCount, const IFrameObserverPtr &rObserver, FrameAllocationMode allocationMode)
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+
+    VmbErrorType        res;
+    FramePtrVector      Frames;
+    VmbUint32_t         nPayloadSize;
+    VmbUint32_t         nStreamBufferAlignment;
+
+    res = GetPayloadSize(nPayloadSize);
+
+    if (VmbErrorSuccess == res)
+    {
+        res = SP_ACCESS(m_pImpl->m_streams.at(0))->GetStreamBufferAlignment(nStreamBufferAlignment);
+    }
+
+    if ( VmbErrorSuccess == res )
+    {
+        res = AcquireImageHelper::AnnounceFrames( *this, Frames, nBufferCount, nPayloadSize, rObserver, allocationMode, nStreamBufferAlignment);
+        if( Frames.empty() )
+        {
+            return res;
+        }
+        res = StartCapture();
+        if ( VmbErrorSuccess == res )
+        {
+            VmbUint32_t FramesQueued = 0;
+            for (   size_t FrameNumber = 0; FrameNumber < Frames.size(); ++ FrameNumber )
+            {
+                VmbErrorType LocalResult =  QueueFrame( Frames[ FrameNumber] );
+                if ( VmbErrorSuccess == LocalResult)
+                {
+                    ++FramesQueued;
+                }
+                else
+                {
+                    LOG_ERROR( "Could not queue frame", LocalResult )
+                }
+                if( VmbErrorSuccess == res)
+                {
+                    res = LocalResult;
+                }
+            }
+            if( 0 != FramesQueued)
+            {
+                res = RunFeatureCommand(*this, "AcquisitionStart" );
+                if ( VmbErrorSuccess != res )
+                {
+                    EndCapture();
+                    FlushQueue();
+                    RevokeAllFrames();
+                    LOG_ERROR( "Could not start acquisition", res )
+                    return res;
+                }
+
+            }
+            else
+            {
+                EndCapture();
+                RevokeAllFrames();
+                LOG_FREE_TEXT( "Could not queue frames" )
+                return res;
+            }
+
+        }
+        else
+        {
+            RevokeAllFrames();
+            LOG_ERROR( "Could not start capturing", res )
+        }
+    }
+    else
+    {
+        LOG_ERROR( "Could not get feature PayloadSize", res )
+    }
+
+    return res;
+}
+
+VmbErrorType Camera::StopContinuousImageAcquisition()
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    VmbErrorType    res;
+    FeaturePtr      pFeature;
+
+    // Prevent queuing of new frames while stopping
+    {
+        MutexGuard guard( m_pImpl->m_pQueueFrameMutex );
+        m_pImpl->m_bAllowQueueFrame = false;
+    }
+
+    res = RunFeatureCommand( *this, "AcquisitionStop" );
+    if ( VmbErrorSuccess != res )
+    {
+        LOG_ERROR( "Could not run feature AcquisitionStop", res )
+    }
+
+    res = EndCapture();
+    if ( VmbErrorSuccess == res )
+    {
+        res = FlushQueue();
+        if( VmbErrorSuccess != res)
+        {
+            LOG_ERROR( "Could not flush queue", res )
+        }
+        res = RevokeAllFrames();
+        if ( VmbErrorSuccess != res )
+        {
+            LOG_FREE_TEXT("Could not revoke frames")
+        }
+    }
+    else
+    {
+        LOG_ERROR("Could not stop capture, unable to revoke frames", res)
+    }
+
+    {
+        MutexGuard guard(m_pImpl->m_pQueueFrameMutex);
+        m_pImpl->m_bAllowQueueFrame = true;
+    }
+
+    return res;
+}
+
+VmbErrorType Camera::GetPayloadSize(VmbUint32_t& nPayloadSize) noexcept
+{
+    return static_cast<VmbErrorType>(VmbPayloadSizeGet(GetHandle(), &nPayloadSize));
+}
+
+VmbErrorType Camera::AnnounceFrame(const FramePtr& frame)
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+    return SP_ACCESS(m_pImpl->m_streams.at(0))->AnnounceFrame(frame);
+}
+
+VmbErrorType Camera::RevokeFrame(const FramePtr& frame)
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+    return SP_ACCESS(m_pImpl->m_streams.at(0))->RevokeFrame(frame);
+}
+
+VmbErrorType Camera::RevokeAllFrames()
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+    return SP_ACCESS(m_pImpl->m_streams.at(0))->RevokeAllFrames();
+}
+
+VmbErrorType Camera::QueueFrame(const FramePtr& frame)
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+
+    MutexGuard guard(m_pImpl->m_pQueueFrameMutex);
+    if (false == m_pImpl->m_bAllowQueueFrame)
+    {
+        LOG_FREE_TEXT("Queuing of new frames is not possible while flushing and revoking the currently queued frames.");
+        return VmbErrorInvalidCall;
+    }
+
+    return SP_ACCESS(m_pImpl->m_streams.at(0))->QueueFrame(frame);
+}
+
+VmbErrorType Camera::FlushQueue()
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+    return SP_ACCESS(m_pImpl->m_streams.at(0))->FlushQueue();
+}
+
+VmbErrorType Camera::StartCapture()
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+    return SP_ACCESS(m_pImpl->m_streams.at(0))->StartCapture();
+}
+
+VmbErrorType Camera::EndCapture()
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+    return SP_ACCESS(m_pImpl->m_streams.at(0))->EndCapture();
+}
+
+VmbErrorType Camera::GetStreams(StreamPtr* pStreams, VmbUint32_t& rnSize) noexcept
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    VmbErrorType res = VmbErrorInternalFault;
+    if (nullptr == pStreams)
+    {
+        rnSize = (VmbUint32_t)m_pImpl->m_streams.size();
+        res = VmbErrorSuccess;
+    }
+    else if (m_pImpl->m_streams.empty())
+    {
+        rnSize = 0;
+        pStreams = nullptr;
+        res = VmbErrorSuccess;
+    }
+    else if (m_pImpl->m_streams.size() <= rnSize)
+    {
+        VmbUint32_t i = 0;
+        try
+        {
+            for (auto iter = m_pImpl->m_streams.begin();
+                 m_pImpl->m_streams.end() != iter;
+                 ++iter, ++i)
+            {
+                pStreams[i] = *iter;
+            }
+            rnSize = (VmbUint32_t)m_pImpl->m_streams.size();
+            res = VmbErrorSuccess;
+        }
+        catch (...)
+        {
+            res = VmbErrorInternalFault; // failure in copy assignment operator
+        }
+    }
+    else
+    {
+        res = VmbErrorMoreData;
+    }
+    return res;
+}
+
+IMEXPORT bool Camera::ExtendedIdEquals(char const* extendedId) noexcept
+{
+    return extendedId != nullptr
+        && m_pImpl->m_cameraInfo.cameraIdExtended == extendedId;
+}
+
+VmbErrorType Camera::GetStreamBufferAlignment(VmbUint32_t& nBufferAlignment)
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (m_pImpl->m_streams.empty())
+    {
+        return VmbErrorNotAvailable;
+    }
+    return SP_ACCESS(m_pImpl->m_streams.at(0))->GetStreamBufferAlignment(nBufferAlignment);
+}
+
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/Clock.cpp b/VimbaX/api/source/VmbCPP/Clock.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..938bc70c0f846e38c47f7ff8986d3e1a63c4318c
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Clock.cpp
@@ -0,0 +1,148 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Clock.cpp
+
+  Description: Implementation of a platform independent Sleep.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#ifdef _WIN32
+    #include <sys/timeb.h>
+    #include <windows.h>
+#else
+    #include <sys/time.h>
+    #include <unistd.h>
+#endif
+
+#include "Clock.h"
+
+
+namespace VmbCPP {
+
+Clock::Clock()
+    :   m_dStartTime(0.0)
+{
+}
+
+Clock::~Clock()
+{
+}
+
+void Clock::Reset()
+{
+    m_dStartTime = 0.0;
+}
+
+void Clock::SetStartTime()
+{
+    m_dStartTime = GetAbsTime();
+}
+
+void Clock::SetStartTime( double dStartTime )
+{
+    m_dStartTime = dStartTime;
+}
+
+double Clock::GetTime() const
+{
+    double dTime = 0.0;
+
+#ifdef _WIN32
+    _timeb currSysTime;
+
+    _ftime_s(&currSysTime);
+
+    dTime = (currSysTime.time + ((double)currSysTime.millitm) / 1000.0);
+#else
+    timeval now;
+
+    if(gettimeofday(&now, (struct timezone *)0)) return 0.0;
+
+    dTime = ((double)now.tv_sec) + ((double)(now.tv_usec) / 1000000.0);
+#endif
+
+    return dTime - m_dStartTime;
+}
+
+double Clock::GetAbsTime()
+{
+    double dAbsTime = 0.0;
+
+#ifdef _WIN32
+    _timeb currSysTime;
+
+    _ftime_s(&currSysTime);
+
+    dAbsTime = (currSysTime.time + ((double)currSysTime.millitm) / 1000.0);
+#else
+    timeval now;
+
+    if(gettimeofday(&now, (struct timezone *)0)) return 0.0;
+
+    dAbsTime = ((double)now.tv_sec) + ((double)(now.tv_usec) / 1000000.0);
+#endif
+
+    return dAbsTime;
+}
+
+void Clock::Sleep(double dTime)
+{
+#ifdef _WIN32
+    ::Sleep((unsigned long)(dTime * 1000.0));
+#else
+    ::usleep((unsigned long)(dTime * 1000000.0));
+#endif
+}
+
+void Clock::SleepMS(unsigned long nTimeMS)
+{
+#ifdef _WIN32
+    ::Sleep(nTimeMS);
+#else
+    ::usleep(nTimeMS * 1000);
+#endif
+}
+
+void Clock::SleepAbs(double dAbsTime)
+{
+    Clock clock;
+    double dTimeDiff = dAbsTime - clock.GetTime();
+        
+#ifdef _WIN32
+    if(dTimeDiff > 4000000.0) dTimeDiff = 4000000.0;
+#else
+    if(dTimeDiff >= 4000.0) dTimeDiff = 4000.0;
+#endif
+    while(dTimeDiff > 0.0)
+    {
+        Sleep(dTimeDiff);
+        dTimeDiff = dAbsTime - clock.GetTime();
+#ifdef _WIN32
+        if(dTimeDiff > 4000000.0) dTimeDiff = 4000000.0;
+#else
+        if(dTimeDiff >= 4000.0) dTimeDiff = 4000.0;
+#endif
+    }
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/Clock.h b/VimbaX/api/source/VmbCPP/Clock.h
new file mode 100644
index 0000000000000000000000000000000000000000..d9ec103b265c818728b041c915dfe59797ebb430
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Clock.h
@@ -0,0 +1,65 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Clock.h
+
+  Description: Definition of a platform independent Sleep.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_CLOCK
+#define VMBCPP_CLOCK
+
+/**
+* \file      Clock.h
+*
+* \brief     Definition of a platform independent Sleep.
+*            Intended for use in the implementation of VmbCPP.
+*/
+
+
+namespace VmbCPP {
+
+class Clock final
+{
+  public:
+    Clock();
+    ~Clock();
+
+    void Reset();
+    void SetStartTime();
+    void SetStartTime( double dStartTime );
+    double GetTime() const;
+
+    static double GetAbsTime();
+
+    static void Sleep( double dTime );
+    static void SleepMS( unsigned long nTimeMS );
+    static void SleepAbs( double dAbsTime );
+
+  protected:
+    double m_dStartTime;
+};
+
+}  // namespace VmbCPP
+
+#endif //VMBCPP_CLOCK
diff --git a/VimbaX/api/source/VmbCPP/CommandFeature.cpp b/VimbaX/api/source/VmbCPP/CommandFeature.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d52ec4c3fc65f64b235d26b46ac29f9a785e3a7f
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/CommandFeature.cpp
@@ -0,0 +1,62 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        CommandFeature.cpp
+
+  Description: Implementation of class VmbCPP::CommandFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "CommandFeature.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCPP/FeatureContainer.h>
+
+namespace VmbCPP {
+
+CommandFeature::CommandFeature( const VmbFeatureInfo_t& featureInfo, FeatureContainer& featureContainer )
+    :BaseFeature(featureInfo, featureContainer)
+{
+}
+
+VmbErrorType CommandFeature::RunCommand() noexcept 
+{
+    if (nullptr == m_pFeatureContainer)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureCommandRun(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str()));
+}
+
+VmbErrorType CommandFeature::IsCommandDone( bool &rbIsDone ) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureCommandIsDone(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rbIsDone));
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/CommandFeature.h b/VimbaX/api/source/VmbCPP/CommandFeature.h
new file mode 100644
index 0000000000000000000000000000000000000000..5072e3eb91ec695d38343cdcc4d28d277ed09bc0
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/CommandFeature.h
@@ -0,0 +1,58 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        CommandFeature.h
+
+  Description: Definition of class VmbCPP::CommandFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_COMMANDFEATURE_H
+#define VMBCPP_COMMANDFEATURE_H
+
+/**
+* \file      CommandFeature.h
+*
+* \brief     Definition of class VmbCPP::CommandFeature.
+*            Intended for use in the implementation of VmbCPP.
+*/
+
+#include <VmbC/VmbCommonTypes.h>
+
+#include "BaseFeature.h"
+
+
+namespace VmbCPP {
+
+class CommandFeature final : public BaseFeature 
+{
+  public:
+    CommandFeature( const VmbFeatureInfo_t& featureInfo, FeatureContainer& featureContainer );
+
+    virtual VmbErrorType RunCommand() noexcept override;
+
+    virtual VmbErrorType IsCommandDone( bool & isDone ) const noexcept override;
+};
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/Condition.cpp b/VimbaX/api/source/VmbCPP/Condition.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8424dbe8d163bfa1bd3eb2b2964402b93f3c3e9e
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Condition.cpp
@@ -0,0 +1,105 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Condition.cpp
+
+  Description: Implementation of a condition class.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "Condition.h"
+
+
+namespace VmbCPP {
+
+Condition::Condition()
+    :   m_nWaiterNumber( 0 )
+    ,   m_nReleaseNumber( 0 )
+    ,   m_bLocked( true )
+{
+    SP_SET( m_Semaphore, new Semaphore() );
+}
+
+void Condition::Wait( const BasicLockable &rLockable )
+{
+    Wait( rLockable.GetMutex() );
+}
+
+void Condition::Wait( const MutexPtr &rMutex )
+{
+    m_nWaiterNumber++;
+
+    SP_ACCESS( rMutex )->Unlock();
+
+    SP_ACCESS( m_Semaphore )->Acquire();
+
+    SP_ACCESS( rMutex) ->Lock();
+
+    if ( m_nWaiterNumber > 0 )
+    {
+        m_nWaiterNumber--;
+    }
+
+    if ( m_nReleaseNumber > 0 )
+    {
+        m_nReleaseNumber--;
+    }
+
+    if(     m_nWaiterNumber > 0
+        &&  m_nReleaseNumber > 0 )
+    {
+        SP_ACCESS( m_Semaphore )->Release();
+        m_bLocked = false;
+    }
+    else
+    {
+        m_bLocked = true;
+    }
+    
+    if( m_nReleaseNumber > m_nWaiterNumber )
+    {
+        m_nReleaseNumber = m_nWaiterNumber;
+    }
+}
+
+void Condition::Signal( bool bSingle )
+{
+    if( m_nWaiterNumber > m_nReleaseNumber )
+    {
+        if( true == bSingle )
+        {
+            m_nReleaseNumber++;
+        }
+        else
+        {
+            m_nReleaseNumber = m_nWaiterNumber;
+        }
+
+        if( true == m_bLocked )
+        {
+            SP_ACCESS( m_Semaphore )->Release();
+            m_bLocked = false;
+        }
+    }
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/Condition.h b/VimbaX/api/source/VmbCPP/Condition.h
new file mode 100644
index 0000000000000000000000000000000000000000..c95997e9f6c2713f320486e737afa1a3f46b9423
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Condition.h
@@ -0,0 +1,67 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Condition.h
+
+  Description: Definition of a condition class.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_CONDITION_H
+#define VMBCPP_CONDITION_H
+
+/**
+* \file      Condition.h
+*
+* \brief     Definition of a condition class.
+*            Intended for use in the implementation of VmbCPP.
+*/
+
+#include <VmbCPP/Mutex.h>
+#include <VmbCPP/BasicLockable.h>
+#include <VmbCPP/SharedPointerDefines.h>
+
+#include "Semaphore.h"
+
+
+namespace VmbCPP {
+
+class Condition
+{
+  private:
+    unsigned long               m_nReleaseNumber;
+    unsigned long               m_nWaiterNumber;
+    bool                        m_bLocked;
+    SharedPointer<Semaphore>    m_Semaphore;        // A binary semaphore (non recursive mutex)
+
+  public:
+    Condition();
+
+    void Wait( const BasicLockable &rLockable );
+    void Wait( const MutexPtr &rMutex );
+
+    void Signal( bool bSingle = false );
+};
+
+}  // namespace VmbCPP
+
+#endif //CONDITION_H
\ No newline at end of file
diff --git a/VimbaX/api/source/VmbCPP/ConditionHelper.cpp b/VimbaX/api/source/VmbCPP/ConditionHelper.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9146acdb1183e0d2f821e47a7c30a11657443e4e
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/ConditionHelper.cpp
@@ -0,0 +1,120 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ConditionHelper.cpp
+
+  Description: Implementation of helper class for conditions.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "ConditionHelper.h"
+
+#include "MutexGuard.h"
+
+
+namespace VmbCPP {
+
+ConditionHelper::ConditionHelper()
+    :   m_nNumListReads( 0 )
+    ,   m_bIsWritingList( false )
+    ,   m_bExclusive( false )
+{    
+}
+
+bool ConditionHelper::EnterReadLock( BasicLockable &rLockable )
+{
+    return EnterReadLock( rLockable.GetMutex() );
+}
+
+bool ConditionHelper::EnterReadLock( MutexPtr &pMutex )
+{
+    MutexGuard guard( pMutex );
+    if ( true == m_bExclusive )
+    {
+        guard.Release();
+        return false;
+    }
+    while ( true == m_bIsWritingList )
+    {
+        m_WriteCondition.Wait( pMutex );
+    }
+    ++m_nNumListReads;
+    guard.Release();
+
+    return true;
+}
+
+void ConditionHelper::ExitReadLock( BasicLockable &rLockable )
+{
+    ExitReadLock( rLockable.GetMutex() );
+}
+void ConditionHelper::ExitReadLock( MutexPtr &pMutex )
+{
+    MutexGuard guard( pMutex );    
+    if ( 0 == --m_nNumListReads )
+    {
+        m_ReadCondition.Signal();
+    }
+    guard.Release();
+}
+
+bool ConditionHelper::EnterWriteLock( BasicLockable &rLockable, bool bExclusive )
+{
+    return EnterWriteLock( rLockable.GetMutex(), bExclusive );
+}
+bool ConditionHelper::EnterWriteLock( MutexPtr &pMutex, bool bExclusive )
+{
+    MutexGuard guard( pMutex );
+    if ( true == m_bExclusive )
+    {
+        guard.Release();
+        return false;
+    }
+    while ( true == m_bIsWritingList )
+    {
+        m_WriteCondition.Wait( pMutex );
+    }
+    m_bIsWritingList = true;
+    m_bExclusive = bExclusive;
+    while ( 0 < m_nNumListReads )
+    {
+        m_ReadCondition.Wait( pMutex );
+    }
+    guard.Release();
+
+    return true;
+}
+
+void ConditionHelper::ExitWriteLock( BasicLockable &rLockable )
+{
+    ExitWriteLock( rLockable.GetMutex() );
+}
+void ConditionHelper::ExitWriteLock( MutexPtr &pMutex )
+{
+    MutexGuard guard( pMutex );
+    m_bIsWritingList = false;
+    m_bExclusive = false;
+    m_WriteCondition.Signal();
+    guard.Release();
+}
+
+} // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/ConditionHelper.h b/VimbaX/api/source/VmbCPP/ConditionHelper.h
new file mode 100644
index 0000000000000000000000000000000000000000..4f7eba1d93b060def6cd0e2dbfa37531eb502189
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/ConditionHelper.h
@@ -0,0 +1,75 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        ConditionHelper.h
+
+  Description: Definition of helper class for conditions.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_CONDITIONHELPER_H
+#define VMBCPP_CONDITIONHELPER_H
+
+/**
+* \file      ConditionHelper.h
+*
+* \brief     Definition of helper class for conditions.
+*            Intended for use in the implementation of VmbCPP.
+*/
+
+#include "Condition.h"
+
+#include <map>
+
+
+namespace VmbCPP {
+
+class ConditionHelper
+{
+  public:
+    ConditionHelper();
+
+    // Waits until writing access has finished and returns true.
+    // If exclusive writing access was granted the function exits immediately without locking and returns false
+    bool EnterReadLock( BasicLockable &rLockable );
+    bool EnterReadLock( MutexPtr &pMutex );
+    void ExitReadLock( BasicLockable &rLockable );
+    void ExitReadLock( MutexPtr &pMutex );
+
+    // Waits until writing and reading access have finished and returns true.
+    // If exclusive writing access was granted the function exits immediately without locking and returns false
+    bool EnterWriteLock( BasicLockable &rLockable, bool bExclusive = false );
+    bool EnterWriteLock( MutexPtr &pMutex, bool bExclusive = false );
+    void ExitWriteLock( BasicLockable &rLockable );
+    void ExitWriteLock( MutexPtr &pMutex );
+
+  private:
+    Condition                           m_ReadCondition;
+    Condition                           m_WriteCondition;
+    bool                                m_bIsWritingList;
+    bool                                m_bExclusive;
+    int                                 m_nNumListReads;
+};
+
+}  // namespace VmbCPP
+
+#endif // CONDITIONHELPER_H
\ No newline at end of file
diff --git a/VimbaX/api/source/VmbCPP/CopyUtils.hpp b/VimbaX/api/source/VmbCPP/CopyUtils.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..a0f340b51ec8c7a074ef466e6a5e36eacfe74c65
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/CopyUtils.hpp
@@ -0,0 +1,118 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        CopyUtils.h
+
+  Description: Helper functionality for copying from std containers to buffers.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_COPY_UTILS_H
+#define VMBCPP_COPY_UTILS_H
+
+#include <algorithm>
+#include <cstring>
+
+#include "VmbC/VmbCommonTypes.h"
+
+/**
+* \file     CopyUtils.h
+*
+* \brief    Helper functionality for copying from std containers to buffers.
+*/
+
+namespace VmbCPP {
+
+    namespace impl
+    {
+        template<class BufferElementType>
+        inline void FinalizeCopy(BufferElementType* buffer, VmbUint32_t copiedSize) noexcept
+        {
+        }
+
+        template<>
+        inline void FinalizeCopy<char>(char* buffer, VmbUint32_t copiedSize) noexcept
+        {
+            // write terminating 0 char
+            buffer[copiedSize] = '\0';
+        }
+    }
+
+    template<class Container>
+    inline
+    typename std::enable_if<std::is_trivially_copyable<typename Container::value_type>::value, VmbErrorType>::type
+    CopyToBuffer(Container const& container,
+        typename Container::value_type* buffer,
+        VmbUint32_t& bufferSize) noexcept
+    {
+        auto const containerSize = static_cast<VmbUint32_t>(container.size());
+        if (buffer == nullptr)
+        {
+            bufferSize = containerSize;
+        }
+        else
+        {
+            if (bufferSize < containerSize)
+            {
+                return VmbErrorMoreData;
+            }
+            else
+            {
+                std::memcpy(buffer, container.data(), containerSize * sizeof(typename Container::value_type));
+            }
+            impl::FinalizeCopy<typename Container::value_type>(buffer, containerSize);
+        }
+        return VmbErrorSuccess;
+    }
+
+    template<class Map>
+    inline VmbErrorType CopyMapValuesToBuffer(
+        Map const& map,
+        typename Map::mapped_type* buffer,
+        VmbUint32_t& bufferSize) noexcept
+    {
+        auto const containerSize = static_cast<VmbUint32_t>(map.size());
+        if (buffer == nullptr)
+        {
+            bufferSize = containerSize;
+        }
+        else
+        {
+            if (bufferSize < containerSize)
+            {
+                return VmbErrorMoreData;
+            }
+            else
+            {
+                auto bufferPos = buffer;
+                for (typename Map::value_type const& element : map)
+                {
+                    *bufferPos = element.second;
+                    ++bufferPos;
+                }
+            }
+        }
+        return VmbErrorSuccess;
+    }
+
+}  // namespace VmbCPP
+
+#endif  // VMBCPP_COPY_UTILS_H
diff --git a/VimbaX/api/source/VmbCPP/DefaultCameraFactory.cpp b/VimbaX/api/source/VmbCPP/DefaultCameraFactory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..820633d4a8901bb89f61165bb148201ad15a232b
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/DefaultCameraFactory.cpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        DefaultCameraFactory.cpp
+
+  Description: Implementation of class VmbCPP::DefaultCameraFactory used to
+               create new Camera objects if no user defined camera factory
+               class was provided.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "DefaultCameraFactory.h"
+
+
+namespace VmbCPP {
+
+CameraPtr DefaultCameraFactory::CreateCamera( const VmbCameraInfo_t& camInfo,
+                                              const InterfacePtr& pInterface )
+{
+    return CameraPtr( new Camera( camInfo, pInterface ));
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/DefaultCameraFactory.h b/VimbaX/api/source/VmbCPP/DefaultCameraFactory.h
new file mode 100644
index 0000000000000000000000000000000000000000..a84075f6df528ce8824193018b9e55649cb494d7
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/DefaultCameraFactory.h
@@ -0,0 +1,57 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        DefaultCameraFactory.h
+
+  Description: Definition of class VmbCPP::DefaultCameraFactory used to
+               create new Camera objects if no user defined camera factory
+               class was provided.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_DEFAULTCAMERAFACTORY_H
+#define VMBCPP_DEFAULTCAMERAFACTORY_H
+
+/**
+* \file      DefaultCameraFactory.h
+*
+* \brief     Definition of class VmbCPP::DefaultCameraFactory used to
+*            create new Camera objects if no user defined camera factory
+*            class was provided.
+*            Intended for use in the implementation of VmbCPP.
+*/
+
+#include <VmbCPP/ICameraFactory.h>
+
+
+namespace VmbCPP {
+
+class DefaultCameraFactory : public ICameraFactory
+{
+  public:
+    virtual CameraPtr CreateCamera( const VmbCameraInfo_t& camInfo,
+                                    const InterfacePtr& pInterface) override;
+};
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/EnumEntry.cpp b/VimbaX/api/source/VmbCPP/EnumEntry.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e2d6afe6c4f14daae18a2b06fac739b8dad4b9ed
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/EnumEntry.cpp
@@ -0,0 +1,208 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        EnumEntry.cpp
+
+  Description: Implementation of class VmbCPP::EnumEntry.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <VmbCPP/EnumEntry.h>
+
+#include "CopyUtils.hpp"
+
+namespace VmbCPP {
+
+struct EnumEntry::PrivateImpl
+{
+    std::string                 m_strName;
+    std::string                 m_strDisplayName;
+    std::string                 m_strDescription;
+    std::string                 m_strTooltip;
+    std::string                 m_strNamespace;
+    VmbFeatureVisibilityType    m_Visibility;
+    VmbInt64_t                  m_nValue;
+
+    PrivateImpl(    const char              *pStrName,
+                    const char              *pStrDisplayName,
+                    const char              *pStrDescription,
+                    const char              *pStrTooltip,
+                    const char              *pStrSNFCNamespace,
+                    VmbFeatureVisibility_t  visibility,
+                    VmbInt64_t              nValue)
+        : m_strName(pStrName != nullptr ? pStrName : ""),
+        m_strDisplayName(pStrDisplayName != nullptr ? pStrDisplayName : ""),
+        m_strDescription(pStrDescription != nullptr ? pStrDescription : ""),
+        m_strTooltip(pStrTooltip != nullptr ? pStrTooltip : ""),
+        m_strNamespace(pStrTooltip != nullptr ? pStrTooltip : ""),
+        m_Visibility(static_cast<VmbFeatureVisibilityType>(visibility)),
+        m_nValue( nValue )
+    {
+    }
+
+    VmbErrorType GetName( char * const pStrName, VmbUint32_t &rnSize ) const noexcept
+    {
+        return CopyToBuffer(m_strName, pStrName, rnSize);
+    }
+
+    VmbErrorType GetDisplayName( char * const pStrDisplayName, VmbUint32_t &rnSize ) const noexcept
+    {
+        return CopyToBuffer(m_strDisplayName, pStrDisplayName, rnSize);
+    }
+
+    VmbErrorType GetDescription( char * const pStrDescription, VmbUint32_t &rnSize ) const noexcept
+    {
+        return CopyToBuffer(m_strDescription, pStrDescription, rnSize);
+    }
+
+    VmbErrorType GetTooltip( char * const pStrTooltip, VmbUint32_t &rnSize ) const noexcept
+    {
+        return CopyToBuffer(m_strTooltip, pStrTooltip, rnSize);
+    }
+
+    VmbErrorType GetSFNCNamespace( char * const pStrNamespace, VmbUint32_t &rnSize ) const noexcept
+    {
+        return CopyToBuffer(m_strNamespace, pStrNamespace, rnSize);
+    }
+
+    VmbErrorType GetValue( VmbInt64_t &rnValue ) const noexcept
+    {
+        rnValue = m_nValue;
+
+        return VmbErrorSuccess;
+    }
+
+    VmbErrorType GetVisibility( VmbFeatureVisibilityType &rVisibility ) const noexcept
+    {
+        rVisibility = m_Visibility;
+
+        return VmbErrorSuccess;
+    }
+
+
+};
+
+EnumEntry::EnumEntry(   const char              *pStrName,
+                        const char              *pStrDisplayName,
+                        const char              *pStrDescription,
+                        const char              *pStrTooltip,
+                        const char              *pStrSNFCNamespace,
+                        VmbFeatureVisibility_t  visibility,
+                        VmbInt64_t              nValue)
+    : m_pImpl( new PrivateImpl(pStrName, pStrDisplayName, pStrDescription, pStrTooltip, pStrSNFCNamespace, visibility, nValue) )
+{
+}
+
+EnumEntry::EnumEntry(const EnumEntry& other)
+    : m_pImpl(other.m_pImpl == nullptr ? nullptr : new PrivateImpl(*other.m_pImpl))
+{
+}
+
+EnumEntry& EnumEntry::operator=(const EnumEntry& other)
+{
+    if (this != &other)
+    {
+        m_pImpl.reset(
+            (other.m_pImpl == nullptr)
+            ? nullptr
+            : new PrivateImpl(*other.m_pImpl));
+    }
+    return *this;
+}
+
+EnumEntry::EnumEntry()
+    : m_pImpl(nullptr)
+{
+}
+
+EnumEntry::~EnumEntry() noexcept
+{
+}
+
+VmbErrorType EnumEntry::GetName( char * const pStrName, VmbUint32_t &rnSize ) const noexcept
+{
+    if( nullptr == m_pImpl )
+    {
+        return VmbErrorInternalFault;
+    }
+    return m_pImpl->GetName( pStrName, rnSize );
+}
+
+VmbErrorType EnumEntry::GetDisplayName( char * const pStrDisplayName, VmbUint32_t &rnSize ) const noexcept
+{
+    if( nullptr == m_pImpl )
+    {
+        return VmbErrorInternalFault;
+    }
+    return m_pImpl->GetDisplayName( pStrDisplayName, rnSize);
+}
+
+VmbErrorType EnumEntry::GetDescription( char * const pStrDescription, VmbUint32_t &rnSize ) const noexcept
+{
+    if( nullptr == m_pImpl )
+    {
+        return VmbErrorInternalFault;
+    }
+    return m_pImpl->GetDescription( pStrDescription, rnSize);
+}
+
+VmbErrorType EnumEntry::GetTooltip( char * const pStrTooltip, VmbUint32_t &rnSize ) const noexcept
+{
+    if( nullptr == m_pImpl )
+    {
+        return VmbErrorInternalFault;
+    }
+    return  m_pImpl->GetTooltip( pStrTooltip, rnSize );
+}
+
+VmbErrorType EnumEntry::GetSFNCNamespace( char * const pStrNamespace, VmbUint32_t &rnSize ) const noexcept
+{
+    if( nullptr == m_pImpl )
+    {
+        return VmbErrorInternalFault;
+    }
+    return m_pImpl->GetSFNCNamespace( pStrNamespace, rnSize);
+}
+
+VmbErrorType EnumEntry::GetValue( VmbInt64_t &rnValue ) const noexcept
+{
+    if( nullptr == m_pImpl )
+    {
+        return VmbErrorInternalFault;
+    }
+    rnValue = m_pImpl->m_nValue;
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType EnumEntry::GetVisibility( VmbFeatureVisibilityType &rVisibility ) const noexcept
+{
+    if( nullptr ==  m_pImpl )
+    {
+        return VmbErrorInternalFault;
+    }
+    rVisibility = m_pImpl->m_Visibility;
+
+    return VmbErrorSuccess;
+}
+
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/EnumFeature.cpp b/VimbaX/api/source/VmbCPP/EnumFeature.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b1920f96cb4cc1f6f9f48c934ef563a387b8a7d3
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/EnumFeature.cpp
@@ -0,0 +1,378 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        EnumFeature.cpp
+
+  Description: Implementation of class VmbCPP::EnumFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "EnumFeature.h"
+
+#include <cstring>
+#include <new>
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCPP/EnumEntry.h>
+#include <VmbCPP/FeatureContainer.h>
+
+namespace VmbCPP {
+
+EnumFeature::EnumFeature( const VmbFeatureInfo_t& featureInfo, FeatureContainer& featureContainer )
+    :BaseFeature( featureInfo, featureContainer )
+{
+}
+
+VmbErrorType EnumFeature::GetValue( char * const pStrValue, VmbUint32_t &rnSize ) const noexcept
+{
+    VmbErrorType res;
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    const char* pStrTempValue;
+    res = static_cast<VmbErrorType>(VmbFeatureEnumGet(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &pStrTempValue));
+
+    if ( VmbErrorSuccess == res )
+    {
+        auto const nLength = static_cast<VmbUint32_t>(std::strlen(pStrTempValue));
+
+        if ( nullptr == pStrValue )
+        {
+            rnSize = nLength;
+        }
+        else if ( nLength <= rnSize )
+        {
+            std::memcpy( pStrValue, pStrTempValue, nLength);
+            rnSize = nLength;
+        }
+        else
+        {
+            res = VmbErrorMoreData;
+        }
+    }
+
+    return res;
+}
+
+VmbErrorType EnumFeature::GetValue( VmbInt64_t &rnValue ) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    const char *pName = nullptr;
+    VmbError_t res = VmbFeatureEnumGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &pName );
+    if ( VmbErrorSuccess == res )
+    {
+        res = VmbFeatureEnumAsInt( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pName, &rnValue );
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType EnumFeature::GetEntry( EnumEntry &rEntry, const char * pStrEntryName ) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    VmbFeatureEnumEntry_t entry;
+    VmbError_t res = VmbFeatureEnumEntryGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pStrEntryName, &entry, sizeof( VmbFeatureEnumEntry_t ));
+    if ( VmbErrorSuccess == res )
+    {
+        try
+        {
+            rEntry = EnumEntry(entry.name, entry.displayName, entry.description, entry.tooltip, entry.sfncNamespace, entry.visibility, entry.intValue);
+        }
+        catch (...)
+        {
+            res = VmbErrorResources;
+        }
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType EnumFeature::SetValue( const char *pStrValue ) noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return (VmbErrorType)VmbFeatureEnumSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pStrValue );
+}
+
+VmbErrorType EnumFeature::SetValue( VmbInt64_t rnValue ) noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    const char *pName = nullptr;
+    VmbError_t res = VmbFeatureEnumAsString( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), rnValue, &pName );
+    if ( VmbErrorSuccess == res )
+    {
+        res = VmbFeatureEnumSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pName );
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType EnumFeature::GetValues(const char ** const pRange, VmbUint32_t &rnSize) noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    VmbUint32_t nCount = 0;
+    VmbError_t res = VmbFeatureEnumRangeQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), nullptr, 0, &nCount );
+
+    if (VmbErrorSuccess == res
+        && 0 < nCount )
+    {
+        try
+        {
+            std::vector<const char*> data(nCount);
+
+            res = VmbFeatureEnumRangeQuery(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &data[0], nCount, &nCount);
+            data.resize(nCount);
+
+            if (VmbErrorSuccess == res)
+            {
+                m_EnumStringValues.clear();
+                m_EnumStringValues.reserve(data.size());
+
+                for (std::vector<const char*>::iterator iter = data.begin();
+                     data.end() != iter;
+                     ++iter)
+                {
+                    m_EnumStringValues.emplace_back(*iter);
+                }
+
+                if (nullptr == pRange)
+                {
+                    rnSize = static_cast<VmbUint32_t>(m_EnumStringValues.size());
+                    res = VmbErrorSuccess;
+                }
+                else if (m_EnumStringValues.size() <= rnSize)
+                {
+                    VmbUint32_t i = 0;
+                    auto outPos = pRange;
+                    for (StringVector::iterator iter = m_EnumStringValues.begin();
+                         m_EnumStringValues.end() != iter;
+                         ++iter, ++outPos)
+                    {
+                        *outPos = iter->c_str();
+                    }
+                    rnSize = static_cast<VmbUint32_t>(m_EnumStringValues.size());
+                    res = VmbErrorSuccess;
+                }
+                else
+                {
+                    res = VmbErrorMoreData;
+                }
+            }
+        }
+        catch (std::bad_alloc const&)
+        {
+            return VmbErrorResources;
+        }
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType EnumFeature::GetValues( VmbInt64_t * const pValues, VmbUint32_t &rnSize ) noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    VmbUint32_t nCount = 0;
+    VmbError_t res = GetValues(static_cast<const char**>(nullptr), nCount);
+
+    if (VmbErrorSuccess == res
+        && 0 < nCount )
+    {
+        try
+        {
+            std::vector<const char*> data(nCount);
+
+            res = GetValues(&data[0], nCount);
+
+            if (VmbErrorSuccess == res)
+            {
+                m_EnumIntValues.clear();
+
+                for (std::vector<const char*>::iterator iter = data.begin();
+                     data.end() != iter;
+                     ++iter)
+                {
+                    VmbInt64_t nValue;
+                    res = VmbFeatureEnumAsInt(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), (*iter), &nValue);
+
+                    if (VmbErrorSuccess == res)
+                    {
+                        m_EnumIntValues.push_back(nValue);
+                    }
+                    else
+                    {
+                        m_EnumIntValues.clear();
+                        break;
+                    }
+                }
+
+                if (VmbErrorSuccess == res)
+                {
+                    if (nullptr == pValues)
+                    {
+                        rnSize = static_cast<VmbUint32_t>(m_EnumIntValues.size());
+                    }
+                    else if (m_EnumIntValues.size() <= rnSize)
+                    {
+                        auto outPos = pValues;
+                        for (Int64Vector::iterator iter = m_EnumIntValues.begin();
+                             m_EnumIntValues.end() != iter;
+                             ++iter, ++outPos)
+                        {
+                            *outPos = (*iter);
+                        }
+                        rnSize = static_cast<VmbUint32_t>(m_EnumIntValues.size());
+                    }
+                    else
+                    {
+                        res = VmbErrorMoreData;
+                    }
+                }
+            }
+        }
+        catch (std::bad_alloc const&)
+        {
+            return VmbErrorResources;
+        }
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType EnumFeature::GetEntries( EnumEntry *pEntries, VmbUint32_t &rnSize ) noexcept
+{
+    VmbErrorType res = GetValues( (const char**)nullptr, rnSize );
+
+    if (VmbErrorSuccess == res && !m_EnumStringValues.empty())
+    {
+        m_EnumEntries.clear();
+
+        try
+        {
+            m_EnumEntries.reserve(rnSize);
+        }
+        catch (...)
+        {
+            res = VmbErrorResources;
+        }
+
+        if (res == VmbErrorSuccess)
+        {
+            for (auto const& entryName : m_EnumStringValues)
+            {
+                EnumEntry entry;
+                res = GetEntry(entry, entryName.c_str());
+                if (VmbErrorSuccess == res)
+                {
+                    m_EnumEntries.emplace_back(std::move(entry));
+                }
+                else
+                {
+                    m_EnumEntries.clear();
+                    break;
+                }
+            }
+
+            if (VmbErrorSuccess == res)
+            {
+                if (nullptr == pEntries)
+                {
+                    rnSize = static_cast<VmbUint32_t>(m_EnumEntries.size());
+                }
+                else if (m_EnumEntries.size() <= rnSize)
+                {
+                    try
+                    {
+                        std::copy(m_EnumEntries.begin(), m_EnumEntries.end(), pEntries);
+                        rnSize = static_cast<VmbUint32_t>(m_EnumEntries.size());
+                    }
+                    catch (...)
+                    {
+                        res = VmbErrorResources;
+                        rnSize = 0;
+                    }
+                }
+                else
+                {
+                    res = VmbErrorMoreData;
+                }
+            }
+        }
+    }
+
+    return res;
+}
+
+VmbErrorType EnumFeature::IsValueAvailable( const char *pStrValue, bool &bAvailable ) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureEnumIsAvailable(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pStrValue, &bAvailable));
+}
+
+VmbErrorType EnumFeature::IsValueAvailable( const VmbInt64_t nValue, bool &rbAvailable ) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    const char* pName = nullptr;
+    VmbError_t res = VmbFeatureEnumAsString( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), nValue, &pName );
+    if ( VmbErrorSuccess == res )
+    {
+        res = IsValueAvailable( pName, rbAvailable );
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+}  // namespace VmbCPP
+
diff --git a/VimbaX/api/source/VmbCPP/EnumFeature.h b/VimbaX/api/source/VmbCPP/EnumFeature.h
new file mode 100644
index 0000000000000000000000000000000000000000..9599db902b69288b4c862b286844be10535d7dee
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/EnumFeature.h
@@ -0,0 +1,82 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        EnumFeature.h
+
+  Description: Definition of class VmbCPP::EnumFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_ENUMFEATURE_H
+#define VMBCPP_ENUMFEATURE_H
+
+/**
+* \file        EnumFeature.h
+*
+* \brief       Definition of class VmbCPP::EnumFeature.
+*              Intended for use in the implementation of VmbCPP.
+*/
+
+#include <VmbC/VmbCTypeDefinitions.h>
+
+#include <VmbCPP/VmbCPPCommon.h>
+
+#include "BaseFeature.h"
+
+
+namespace VmbCPP {
+
+class EnumEntry;
+
+class EnumFeature final : public BaseFeature 
+{
+  public:
+    EnumFeature( const VmbFeatureInfo_t& featureInfo, FeatureContainer& featureContainer );
+
+    virtual VmbErrorType SetValue( const char *pValue ) noexcept override;
+    
+    virtual VmbErrorType GetEntry( EnumEntry &entry, const char *pEntryName ) const noexcept override;
+
+    virtual VmbErrorType GetValue( VmbInt64_t &value ) const noexcept override;
+    virtual VmbErrorType SetValue(VmbInt64_t value) noexcept override;
+
+    virtual VmbErrorType IsValueAvailable( const char *pStrValue, bool &available ) const noexcept override;
+    virtual VmbErrorType IsValueAvailable( const VmbInt64_t value, bool &available ) const noexcept override;
+
+protected:
+    // Array functions to pass data across DLL boundaries
+    VmbErrorType GetValues(const char** pValues, VmbUint32_t& size) noexcept override;
+    VmbErrorType GetValues(VmbInt64_t* pValue, VmbUint32_t& size) noexcept override;
+    VmbErrorType GetEntries(EnumEntry* pEntries, VmbUint32_t& size) noexcept override;
+    VmbErrorType GetValue( char * const pValue, VmbUint32_t &size ) const noexcept override;
+
+private:
+    // Copy of enum elements
+    StringVector    m_EnumStringValues;
+    Int64Vector     m_EnumIntValues;
+    EnumEntryVector m_EnumEntries;
+
+};
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/Feature.cpp b/VimbaX/api/source/VmbCPP/Feature.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0bc8d15bbf09b17e24df94c679827e1118248b63
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Feature.cpp
@@ -0,0 +1,318 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Feature.cpp
+
+  Description: Implementation of wrapper class VmbCPP::Feature.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <VmbCPP/Feature.h>
+
+#pragma warning(disable:4996)
+#include "BaseFeature.h"
+#pragma warning(default:4996)
+
+#include "BoolFeature.h"
+#include "CommandFeature.h"
+#include "EnumFeature.h"
+#include "FloatFeature.h"
+#include "IntFeature.h"
+#include "RawFeature.h"
+#include "StringFeature.h"
+
+
+namespace VmbCPP {
+
+Feature::Feature( const VmbFeatureInfo& featureInfo, FeatureContainer& featureContainer )
+{
+    switch ( featureInfo.featureDataType )
+    {
+    case VmbFeatureDataBool:
+        m_pImpl = new BoolFeature( featureInfo, featureContainer );
+        break;
+    case VmbFeatureDataEnum:
+        m_pImpl = new EnumFeature( featureInfo, featureContainer );
+        break;
+    case VmbFeatureDataFloat:
+        m_pImpl = new FloatFeature( featureInfo, featureContainer );
+        break;
+    case VmbFeatureDataInt:
+        m_pImpl = new IntFeature( featureInfo, featureContainer );
+        break;
+    case VmbFeatureDataString:
+        m_pImpl = new StringFeature( featureInfo, featureContainer );
+        break;
+    case VmbFeatureDataCommand:
+        m_pImpl = new CommandFeature( featureInfo, featureContainer );
+        break;
+    case VmbFeatureDataRaw:
+        m_pImpl = new RawFeature( featureInfo, featureContainer );
+        break;
+    default:
+        m_pImpl = new BaseFeature( featureInfo, featureContainer );
+    }
+}
+
+Feature::~Feature()
+{
+    delete m_pImpl;
+}
+
+void Feature::ResetFeatureContainer()
+{
+    m_pImpl->ResetFeatureContainer();
+}
+
+VmbErrorType Feature::RegisterObserver( const IFeatureObserverPtr &rObserver )
+{
+    return m_pImpl->RegisterObserver( rObserver );
+}
+
+VmbErrorType Feature::UnregisterObserver( const IFeatureObserverPtr &rObserver )
+{
+    return m_pImpl->UnregisterObserver( rObserver );
+}
+
+// Gets the value of a feature of type VmbFeatureDataInt
+VmbErrorType Feature::GetValue( VmbInt64_t &rnValue ) const noexcept
+{
+    return m_pImpl->GetValue( rnValue );
+}
+
+// Sets the value of a feature of type VmbFeatureDataInt
+VmbErrorType Feature::SetValue( VmbInt64_t rnValue ) noexcept
+{
+    return m_pImpl->SetValue( rnValue );
+}
+
+// Gets the range of a feature of type VmbFeatureDataInt
+VmbErrorType Feature::GetRange( VmbInt64_t &rnMinimum, VmbInt64_t &rnMaximum ) const noexcept
+{
+    return m_pImpl->GetRange( rnMinimum, rnMaximum );
+}
+
+VmbErrorType Feature::HasIncrement( VmbBool_t &incrementSupported) const noexcept
+{
+    return m_pImpl->HasIncrement( incrementSupported);
+}
+// Gets the increment of a feature of type VmbFeatureDataInt
+VmbErrorType Feature::GetIncrement( VmbInt64_t &rnIncrement ) const noexcept
+{
+    return m_pImpl->GetIncrement( rnIncrement );
+}
+
+// Gets the increment of a feature of type VmbFeatureDataFloat
+VmbErrorType Feature::GetIncrement( double &rnIncrement ) const noexcept
+{
+    return m_pImpl->GetIncrement( rnIncrement );
+}
+
+// Gets the value of a feature of type VmbFeatureDataFloat
+VmbErrorType Feature::GetValue( double &rfValue) const noexcept
+{
+    return m_pImpl->GetValue( rfValue );
+}
+
+// Sets the value of a feature of type VmbFeatureDataFloat
+VmbErrorType Feature::SetValue( double rfValue ) noexcept
+{
+    return m_pImpl->SetValue( rfValue );
+}
+
+// Gets the range of a feature of type VmbFeatureDataFloat
+VmbErrorType Feature::GetRange( double &rfMinimum, double &rfMaximum ) const noexcept
+{
+    return m_pImpl->GetRange( rfMinimum, rfMaximum );
+}
+
+// Sets the value of a feature of type VmbFeatureDataEnum
+// Sets the value of a feature of type VmbFeatureDataString
+VmbErrorType Feature::SetValue( const char *pStrValue ) noexcept
+{
+    return m_pImpl->SetValue( pStrValue );
+}
+
+// Gets all possible values as string of a feature of type VmbFeatureDataEnum
+VmbErrorType Feature::GetValues( const char **pStrValues, VmbUint32_t &rnSize ) noexcept
+{
+    return m_pImpl->GetValues( pStrValues, rnSize );
+}
+
+// Gets all possible values as integer of a feature of type VmbFeatureDataEnum
+VmbErrorType Feature::GetValues( VmbInt64_t *pnValues, VmbUint32_t &rnSize ) noexcept
+{
+    return m_pImpl->GetValues( pnValues, rnSize );
+}
+
+// Gets the currently selected enum entry of a feature of type VmbFeatureDataEnum
+VmbErrorType Feature::GetEntry( EnumEntry &entry, const char *pStrEntryName ) const noexcept
+{
+    return m_pImpl->GetEntry( entry, pStrEntryName );
+}
+
+// Gets all possible enum entries of a feature of type VmbFeatureDataEnum
+VmbErrorType Feature::GetEntries( EnumEntry *pEnumEntries, VmbUint32_t &rnSize ) noexcept
+{
+    return m_pImpl->GetEntries( pEnumEntries, rnSize );
+}
+
+// Indicates whether a particular enum value as string of a feature of type VmbFeatureDataEnum is available
+VmbErrorType Feature::IsValueAvailable( const char *pStrValue, bool &rbAvailable ) const noexcept
+{
+    return m_pImpl->IsValueAvailable( pStrValue, rbAvailable );
+}
+
+// Indicates whether a particular enum value as integer of a feature of type VmbFeatureDataEnum is available
+VmbErrorType Feature::IsValueAvailable( const VmbInt64_t nValue, bool &rbAvailable ) const noexcept
+{
+    return m_pImpl->IsValueAvailable( nValue, rbAvailable );
+}
+
+// Gets the value of a feature of type VmbFeatureDataString
+VmbErrorType Feature::GetValue( char * const pStrValue, VmbUint32_t &rnLength ) const noexcept
+{
+    return m_pImpl->GetValue( pStrValue, rnLength );
+}
+
+// Gets the value of a feature of type VmbFeatureDataBool
+VmbErrorType Feature::GetValue( bool &rbValue ) const noexcept
+{
+    return m_pImpl->GetValue( rbValue );
+}
+
+// Sets the value of a feature of type VmbFeatureDataBool
+VmbErrorType Feature::SetValue( bool bValue ) noexcept
+{
+    return m_pImpl->SetValue( bValue );
+}
+
+// Executes a feature of type VmbFeatureDataCommand
+VmbErrorType Feature::RunCommand() noexcept
+{
+    return m_pImpl->RunCommand();
+}
+
+// Indicates whether a feature of type VmbFeatureDataCommand finished execution
+VmbErrorType Feature::IsCommandDone( bool &bIsDone ) const noexcept
+{
+    return m_pImpl->IsCommandDone( bIsDone );
+}
+
+// Gets the value of a feature of type VmbFeatureDataRaw
+VmbErrorType Feature::GetValue( VmbUchar_t *pValue, VmbUint32_t &rnSize, VmbUint32_t &rnSizeFilled ) const noexcept
+{
+    return m_pImpl->GetValue( pValue, rnSize, rnSizeFilled );
+}
+
+// Sets the value of a feature of type VmbFeatureDataRaw
+VmbErrorType Feature::SetValue( const VmbUchar_t *pValue, VmbUint32_t nSize ) noexcept
+{
+    return m_pImpl->SetValue( pValue, nSize );
+}
+
+VmbErrorType Feature::GetName( char * const pStrName, VmbUint32_t &rnLength ) const noexcept
+{
+    return m_pImpl->GetName( pStrName, rnLength );
+}
+
+VmbErrorType Feature::GetDisplayName( char * const pStrDisplayName, VmbUint32_t &rnLength ) const noexcept
+{
+    return m_pImpl->GetDisplayName( pStrDisplayName, rnLength );
+}
+
+VmbErrorType Feature::GetDataType( VmbFeatureDataType &reDataType ) const noexcept
+{
+    return m_pImpl->GetDataType( reDataType );
+}
+
+VmbErrorType Feature::GetFlags( VmbFeatureFlagsType &reFlags ) const noexcept
+{
+    return m_pImpl->GetFlags( reFlags );
+}
+
+VmbErrorType Feature::GetCategory( char * const pStrCategory, VmbUint32_t &rnLength ) const noexcept
+{
+    return m_pImpl->GetCategory( pStrCategory, rnLength );
+}
+
+VmbErrorType Feature::GetPollingTime( VmbUint32_t &rnPollingTime ) const noexcept
+{
+    return m_pImpl->GetPollingTime( rnPollingTime );
+}
+
+VmbErrorType Feature::GetUnit( char * const pStrUnit, VmbUint32_t &rnLength ) const noexcept
+{
+    return m_pImpl->GetUnit( pStrUnit, rnLength );
+}
+
+VmbErrorType Feature::GetRepresentation( char * const pStrRepresentation, VmbUint32_t &rnLength ) const noexcept
+{
+    return m_pImpl->GetRepresentation( pStrRepresentation, rnLength );
+}
+
+VmbErrorType Feature::GetVisibility( VmbFeatureVisibilityType &reVisibility ) const noexcept
+{
+    return m_pImpl->GetVisibility( reVisibility );
+}
+
+VmbErrorType Feature::GetToolTip( char * const pStrToolTip, VmbUint32_t &rnLength ) const noexcept
+{
+    return m_pImpl->GetToolTip( pStrToolTip, rnLength );
+}
+
+VmbErrorType Feature::GetDescription( char * const pStrDescription, VmbUint32_t &rnLength ) const noexcept
+{
+    return m_pImpl->GetDescription( pStrDescription, rnLength );
+}
+
+VmbErrorType Feature::GetSFNCNamespace( char * const pStrSFNCNamespace, VmbUint32_t &rnLength ) const noexcept
+{
+    return m_pImpl->GetSFNCNamespace( pStrSFNCNamespace, rnLength );
+}
+
+VmbErrorType Feature::GetSelectedFeatures( FeaturePtr *pSelectedFeatures, VmbUint32_t &rnSize ) noexcept
+{
+    return m_pImpl->GetSelectedFeatures( pSelectedFeatures, rnSize );
+}
+
+VmbErrorType Feature::IsReadable( bool &rbIsReadable ) noexcept
+{
+    return m_pImpl->IsReadable( rbIsReadable );
+}
+
+VmbErrorType Feature::IsWritable( bool &rbIsWritable ) noexcept
+{
+    return m_pImpl->IsWritable( rbIsWritable );
+}
+
+VmbErrorType Feature::IsStreamable( bool &rbIsStreamable ) const noexcept
+{
+    return m_pImpl->IsStreamable( rbIsStreamable );
+}
+
+VmbErrorType Feature::GetValidValueSet(VmbInt64_t* buffer, VmbUint32_t bufferSize, VmbUint32_t* setSize) const noexcept
+{
+    return m_pImpl->GetValidValueSet(buffer, bufferSize, setSize);
+}
+
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/FeatureContainer.cpp b/VimbaX/api/source/VmbCPP/FeatureContainer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cffaf6035ae6aca2943e0294d4a737a353d0e1fd
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/FeatureContainer.cpp
@@ -0,0 +1,226 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        FeatureContainer.cpp
+
+  Description: Implementation of class VmbCPP::FeatureContainer.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <map>
+#include <string>
+
+#include <VmbCPP/FeatureContainer.h>
+
+#include <VmbCPP/VmbSystem.h>
+
+
+namespace VmbCPP {
+
+typedef std::map<std::string, FeaturePtr> FeaturePtrMap;
+
+struct FeatureContainer::Impl
+{
+    VmbHandle_t         m_handle;
+
+    bool                m_bAllFeaturesFetched;
+
+    FeaturePtrMap       m_features;
+};
+
+FeatureContainer::FeatureContainer()
+    :   m_pImpl ( new Impl() )
+{
+    m_pImpl->m_bAllFeaturesFetched = false;
+    m_pImpl->m_handle = nullptr;
+}
+
+FeatureContainer::~FeatureContainer()
+{
+    Reset();
+    RevokeHandle();
+}
+
+VmbErrorType FeatureContainer::GetFeatureByName( const char *name, FeaturePtr &rFeature )
+{
+    VmbError_t res;
+
+    if ( nullptr == name )
+    {
+        return VmbErrorBadParameter;
+    }
+
+    if ( nullptr == m_pImpl->m_handle )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    FeaturePtrMap::iterator iter = m_pImpl->m_features.find( name );
+    if ( iter != m_pImpl->m_features.end() )
+    {
+        rFeature = iter->second;
+        return VmbErrorSuccess;
+    }
+
+    VmbFeatureInfo_t featureInfo;
+        
+    res = VmbFeatureInfoQuery(m_pImpl->m_handle, name, &featureInfo, sizeof(VmbFeatureInfo_t));
+
+    if ( VmbErrorSuccess == res )
+    {
+
+        try
+        {
+            FeaturePtr tmpFeature(new Feature(featureInfo, *this));
+            // Only add visible features to the feature list
+            if ( VmbFeatureVisibilityInvisible != featureInfo.visibility )
+            {
+                m_pImpl->m_features[name] = tmpFeature;
+            }
+            rFeature = std::move(tmpFeature);
+        }
+        catch (std::bad_alloc const&)
+        {
+            res = VmbErrorResources;
+        }
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType FeatureContainer::GetFeatures( FeaturePtr *pFeatures, VmbUint32_t &rnSize )
+{
+    VmbError_t res;
+
+    if ( nullptr == m_pImpl->m_handle )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    // Feature list is static and therefore needs to be fetched only once per lifetime
+    if ( false == m_pImpl->m_bAllFeaturesFetched )
+    {
+        std::vector<VmbFeatureInfo_t> featureInfoList;
+
+        res = VmbFeaturesList( m_pImpl->m_handle, nullptr, 0, &rnSize, sizeof(VmbFeatureInfo_t) );
+        if ( 0 == rnSize || VmbErrorSuccess != res )
+        {
+            return (VmbErrorType)res;
+        }
+
+        featureInfoList.resize( rnSize );
+        res = VmbFeaturesList( m_pImpl->m_handle, &featureInfoList[0], rnSize, &rnSize, sizeof(VmbFeatureInfo_t) );
+        if ( VmbErrorSuccess != res )
+        {
+            return (VmbErrorType)res;
+        }
+
+        for (   std::vector<VmbFeatureInfo_t>::iterator iter = featureInfoList.begin();
+                featureInfoList.end() != iter;
+                ++iter )
+        {
+            std::string strName = iter->name;
+            if ( 0 != strName.length() )
+            {
+                if ( SP_ISNULL( m_pImpl->m_features[strName] ))
+                {
+                    m_pImpl->m_features[strName] = FeaturePtr( new Feature(*iter, *this));
+                }
+            }
+        }
+
+        m_pImpl->m_bAllFeaturesFetched = true;
+    }
+    else // Features have been fetched before
+    {
+        res = VmbErrorSuccess;
+    }
+
+    if ( VmbErrorSuccess == res )
+    {
+        if ( nullptr == pFeatures )
+        {
+            rnSize = (VmbUint32_t)m_pImpl->m_features.size();
+            return VmbErrorSuccess;
+        }
+        else if ( m_pImpl->m_features.size() <= rnSize )
+        {
+            VmbUint32_t i = 0;
+            for (   FeaturePtrMap::iterator iter = m_pImpl->m_features.begin();
+                    m_pImpl->m_features.end() != iter;
+                    ++iter, ++i )
+            {
+                pFeatures[i] = iter->second;
+            }
+            rnSize = (VmbUint32_t)m_pImpl->m_features.size();
+            return VmbErrorSuccess;
+        }
+        else
+        {
+            return VmbErrorMoreData;
+        }
+    }
+    else
+    {
+        return (VmbErrorType)res;
+    }
+}
+
+VmbHandle_t FeatureContainer::GetHandle() const noexcept
+{
+    return m_pImpl->m_handle;
+}
+
+void FeatureContainer::SetHandle( const VmbHandle_t handle )
+{
+    if ( nullptr == handle )
+    {
+        Reset();
+        RevokeHandle();
+    }
+    else
+    {
+        m_pImpl->m_handle = handle;
+    }
+}
+
+// Sets the C handle to null
+void FeatureContainer::RevokeHandle() noexcept
+{
+    m_pImpl->m_handle = nullptr;
+}
+
+// Sets the back reference to feature container that each feature holds to null
+// and resets all known features
+void FeatureContainer::Reset()
+{
+    for (   FeaturePtrMap::iterator iter = m_pImpl->m_features.begin();
+            m_pImpl->m_features.end() != iter;
+            ++iter)
+    {
+        SP_ACCESS( iter->second )->ResetFeatureContainer();
+    }
+
+    m_pImpl->m_features.clear();
+    m_pImpl->m_bAllFeaturesFetched = false;
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/FileLogger.cpp b/VimbaX/api/source/VmbCPP/FileLogger.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..84a23bf47bc5e04e6aba09155aed1a938c311142
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/FileLogger.cpp
@@ -0,0 +1,195 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        FileLogger.cpp
+
+  Description: Implementation of class VmbCPP::FileLogger.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <ctime>
+#include <cstdlib>
+
+#include <VmbCPP/FileLogger.h>
+
+#include "MutexGuard.h"
+
+#ifdef _WIN32
+#pragma warning(disable: 4996)
+#include <Windows.h>
+#else //_WIN32
+#include <sys/stat.h>
+#endif //_WIN32
+
+
+namespace VmbCPP {
+
+FileLogger::FileLogger( const char *pFileName, bool bAppend )
+    :   m_pMutex(new Mutex())
+{
+    std::string strTempPath = GetTemporaryDirectoryPath();
+    std::string strFileName( pFileName );
+
+    if (!strTempPath.empty())
+    {
+        strFileName = strTempPath.append( strFileName );
+        if( true == bAppend )
+        {
+            m_File.open( strFileName.c_str(), std::fstream::app );
+        }
+        else
+        {
+            m_File.open( strFileName.c_str() );
+        }
+    }
+    else
+    {
+        throw;
+    }
+}
+
+FileLogger::~FileLogger()
+{
+    if(m_File.is_open())
+    {
+        m_File.close();
+    }
+}
+
+void FileLogger::Log( const std::string &rStrMessage )
+{
+    MutexGuard guard( m_pMutex );
+
+    if(m_File.is_open())
+    {
+        #ifdef _WIN32
+            time_t nTime = time( &nTime );
+            tm timeInfo;
+            localtime_s( &timeInfo, &nTime );
+            char strTime[100];
+            asctime_s( strTime, 100, &timeInfo );
+        #else
+            time_t nTime = time( nullptr );
+            std::string strTime = asctime( localtime( &nTime ) );
+        #endif
+
+        m_File << strTime << ": " << rStrMessage << std::endl;
+    }
+}
+
+std::string FileLogger::GetTemporaryDirectoryPath()
+{
+#ifndef _WIN32
+    std::string tmpDir;
+    
+    if(tmpDir.size() == 0)
+    {
+        char *pPath = std::getenv("TMPDIR");
+        if(nullptr != pPath)
+        {
+            struct stat lStats;
+            if(stat(pPath, &lStats) == 0)
+            {
+                tmpDir = pPath;
+            }
+        }
+    }
+    if(tmpDir.size() == 0)
+    {
+        char *pPath = std::getenv("TEMP");
+        if(nullptr != pPath)
+        {
+            struct stat lStats;
+            if(stat(pPath, &lStats) == 0)
+            {
+                tmpDir = pPath;
+            }
+        }
+    }
+    if(tmpDir.size() == 0)
+    {
+        char *pPath = std::getenv("TMP");
+        if(nullptr != pPath)
+        {
+            struct stat lStats;
+            if(stat(pPath, &lStats) == 0)
+            {
+                tmpDir = pPath;
+            }
+        }
+    }
+    if(tmpDir.size() == 0)
+    {
+        std::string path = "/tmp";
+        struct stat lStats;
+        if(stat(path.c_str(), &lStats) == 0)
+        {
+            tmpDir = path;
+        }
+    }
+    if(tmpDir.size() == 0)
+    {
+        std::string path = "/var/tmp";
+        struct stat lStats;
+        if(stat(path.c_str(), &lStats) == 0)
+        {
+            tmpDir = path;
+        }
+    }
+    if(tmpDir.size() == 0)
+    {
+        std::string path = "/usr/tmp";
+        struct stat lStats;
+        if(stat(path.c_str(), &lStats) == 0)
+        {
+            tmpDir = path;
+        }
+    }
+    if(tmpDir.size() == 0)
+    {
+        return "";
+    }
+    // everyone expects delimiter on the outside
+    if( (*tmpDir.rbegin()) != '/' )
+    {
+        tmpDir +='/';
+    }
+    return tmpDir;
+#else
+    DWORD length = ::GetTempPathA( 0, nullptr );
+    if( length == 0 )
+    {
+        return "";
+    }
+    
+    std::vector<TCHAR> tempPath( length );
+
+    length = ::GetTempPathA( static_cast<DWORD>( tempPath.size() ), &tempPath[0] );
+    if( length == 0 || length > tempPath.size() )
+    {
+        return "";
+    }
+
+    return std::string( tempPath.begin(), tempPath.begin() + static_cast<std::size_t>(length) );
+#endif
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/FloatFeature.cpp b/VimbaX/api/source/VmbCPP/FloatFeature.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..945e3f5e14ffb06334206b407b84b6a16e71ca71
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/FloatFeature.cpp
@@ -0,0 +1,103 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        FloatFeature.cpp
+
+  Description: Implementation of class VmbCPP::FloatFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "FloatFeature.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCPP/FeatureContainer.h>
+
+namespace VmbCPP {
+
+FloatFeature::FloatFeature( const VmbFeatureInfo& featureInfo, FeatureContainer& featureContainer )
+    :   BaseFeature( featureInfo, featureContainer )
+{
+}
+
+VmbErrorType FloatFeature::GetValue( double &rfValue ) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureFloatGet(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rfValue));
+}
+
+VmbErrorType FloatFeature::SetValue( const double rfValue ) noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureFloatSet(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), rfValue));
+}
+
+VmbErrorType FloatFeature::GetRange( double &rfMinimum, double &rfMaximum ) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureFloatRangeQuery(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rfMinimum, &rfMaximum));
+}
+
+VmbErrorType FloatFeature::HasIncrement( VmbBool_t &incrementSupported ) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    VmbBool_t hasIncrement;
+    VmbError_t result = VmbFeatureFloatIncrementQuery(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(),&hasIncrement, nullptr);
+    if( VmbErrorSuccess == result)
+    {
+        incrementSupported = hasIncrement;
+        return VmbErrorSuccess;
+    }
+    return static_cast<VmbErrorType>(result);
+}
+
+VmbErrorType FloatFeature::GetIncrement( double &rnIncrement ) const noexcept
+{
+    if (nullptr == m_pFeatureContainer)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    VmbBool_t hasIncrement;
+    VmbError_t result = VmbFeatureFloatIncrementQuery(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(),&hasIncrement, &rnIncrement);
+    if( VmbErrorSuccess == result && !hasIncrement)
+    {
+        return VmbErrorNotAvailable;
+    }
+    return static_cast<VmbErrorType>(result);
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/FloatFeature.h b/VimbaX/api/source/VmbCPP/FloatFeature.h
new file mode 100644
index 0000000000000000000000000000000000000000..16e4846cf3f5d6a5aee5f2bd9022db001aae4c5a
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/FloatFeature.h
@@ -0,0 +1,65 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        FloatFeature.h
+
+  Description: Definition of class VmbCPP::FloatFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_FLOATFEATURE_H
+#define VMBCPP_FLOATFEATURE_H
+
+/**
+* \file        FloatFeature.h
+*
+* \brief       Definition of class VmbCPP::FloatFeature.
+*              Intended for use in the implementation of VmbCPP.
+*/
+
+#include "BaseFeature.h"
+
+struct VmbFeatureInfo;
+
+namespace VmbCPP {
+
+class FeatureContainer;
+
+class FloatFeature final : public BaseFeature 
+{
+public:
+    FloatFeature( const VmbFeatureInfo& featureInfo, FeatureContainer& featureContainer );
+
+    virtual VmbErrorType GetValue( double &value ) const noexcept override;
+
+    virtual VmbErrorType SetValue(double rfValue) noexcept override;
+
+    virtual VmbErrorType GetRange( double &minimum, double &maximum ) const noexcept override;
+    
+    virtual VmbErrorType HasIncrement( VmbBool_t &incrementSupported) const noexcept override;
+
+    virtual VmbErrorType GetIncrement( double &increment ) const noexcept override;
+};
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/Frame.cpp b/VimbaX/api/source/VmbCPP/Frame.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6fd483c249d15c2c5996151b3dcd0a769a0b4df1
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Frame.cpp
@@ -0,0 +1,315 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Frame.cpp
+
+  Description: Implementation of class VmbCPP::Frame.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <VmbCPP/Frame.h>
+
+#include <VmbCPP/LoggerDefines.h>
+#include <VmbCPP/SharedPointerDefines.h>
+#include <VmbCPP/VmbSystem.h>
+
+#include "ConditionHelper.h"
+#include "FrameImpl.h"
+#include "MutexGuard.h"
+
+#include <stdlib.h>
+
+
+namespace
+{
+    void* VmbAlignedAlloc(size_t alignment, size_t size)
+    {
+#ifdef _WIN32
+        return _aligned_malloc(size, alignment);
+#else
+        return aligned_alloc(alignment, size);
+#endif
+    }
+
+    void VmbAlignedFree(void* buffer)
+    {
+#ifdef _WIN32
+        _aligned_free(buffer);
+#else
+        free(buffer);
+#endif
+    }
+}
+
+namespace VmbCPP {
+
+Frame::Frame( VmbInt64_t nBufferSize, FrameAllocationMode allocationMode /*=FrameAllocation_AnnounceFrame*/, VmbUint32_t bufferAlignment /*=1*/ )
+    :   m_pImpl( new Impl() )
+{
+    m_pImpl->m_bAlreadyAnnounced = false;
+    m_pImpl->m_bAlreadyQueued = false;
+    m_pImpl->m_bIsSelfAllocatedBuffer = (allocationMode == FrameAllocation_AnnounceFrame) ? true : false;
+    m_pImpl->m_bSynchronousGrab = false;
+    SP_SET( m_pImpl->m_pObserverMutex, new Mutex() );
+    m_pImpl->Init();
+    m_pImpl->m_frame.buffer = (allocationMode == FrameAllocation_AnnounceFrame) ? static_cast<VmbUchar_t*>(VmbAlignedAlloc(bufferAlignment, nBufferSize)) : nullptr;
+    m_pImpl->m_frame.bufferSize = static_cast<VmbUint32_t>(nBufferSize);
+}
+
+Frame::Frame( VmbUchar_t *pBuffer, VmbInt64_t nBufferSize )
+    :   m_pImpl( new Impl() )
+{
+    m_pImpl->m_bAlreadyAnnounced = false;
+    m_pImpl->m_bAlreadyQueued = false;
+    m_pImpl->m_bIsSelfAllocatedBuffer = false;
+    m_pImpl->m_bSynchronousGrab = false;
+    m_pImpl->m_frame.buffer = nullptr;
+    SP_SET( m_pImpl->m_pObserverMutex, new Mutex());
+    m_pImpl->Init();
+    if ( nullptr != pBuffer )
+    {
+        m_pImpl->m_frame.buffer = pBuffer;
+        m_pImpl->m_frame.bufferSize = static_cast<VmbUint32_t>(nBufferSize);
+    }
+    else
+    {
+        // Do some logging
+        LOG_FREE_TEXT( "No valid buffer passed when constructing frame." )
+    }
+}
+
+void Frame::Impl::Init()
+{
+    m_frame.imageData = nullptr;
+    m_frame.payloadType = VmbPayloadTypeUnknown;
+    m_frame.chunkDataPresent = false;
+    m_frame.buffer = nullptr;
+    m_frame.bufferSize = 0;
+    for ( int i=0; i<4; ++i)
+    {
+        m_frame.context[i] = nullptr;
+    }
+    m_frame.frameID = 0;
+    m_frame.height = 0;
+    m_frame.offsetX = 0;
+    m_frame.offsetY = 0;
+    m_frame.pixelFormat = 0;
+    m_frame.receiveFlags = VmbFrameFlagsNone;
+    m_frame.receiveStatus = VmbFrameStatusInvalid;
+    m_frame.timestamp = 0;
+    m_frame.width = 0;
+}
+
+Frame::~Frame()
+{
+    UnregisterObserver();
+    if (    true == m_pImpl->m_bIsSelfAllocatedBuffer
+         && nullptr != m_pImpl->m_frame.buffer)
+    {
+        VmbAlignedFree(m_pImpl->m_frame.buffer);
+    }
+}
+
+VmbErrorType Frame::RegisterObserver( const IFrameObserverPtr &rObserver )
+{
+    if ( SP_ISNULL( rObserver ))
+    {
+        return VmbErrorBadParameter;
+    }
+
+    // Begin exclusive write lock observer
+    MutexGuard local_lock( m_pImpl->m_pObserverMutex );
+    m_pImpl->m_pObserver = rObserver;
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Frame::UnregisterObserver()
+{
+    VmbErrorType res = VmbErrorSuccess;
+
+    // Begin exclusive write lock observer
+    MutexGuard local_lock( m_pImpl->m_pObserverMutex );
+    if ( SP_ISNULL( m_pImpl->m_pObserver ))
+    {
+        res = VmbErrorNotFound;
+    }
+    else
+    {
+        SP_RESET( m_pImpl->m_pObserver );
+    }
+    return res;
+}
+
+bool Frame::GetObserver( IFrameObserverPtr &rObserver ) const
+{
+    MutexGuard local_lock( m_pImpl->m_pObserverMutex );
+    if ( SP_ISNULL( m_pImpl->m_pObserver ))
+    {
+        return false;
+    }
+    rObserver = m_pImpl->m_pObserver;
+    return true;
+}
+
+VmbErrorType Frame::GetBuffer( VmbUchar_t* &rpBuffer )
+{
+    rpBuffer = static_cast<VmbUchar_t*>(m_pImpl->m_frame.buffer);
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Frame::GetBuffer( const VmbUchar_t* &rpBuffer ) const
+{
+    rpBuffer = static_cast<const VmbUchar_t*>(m_pImpl->m_frame.buffer);
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Frame::GetImage( VmbUchar_t* &rpBuffer )
+{
+    rpBuffer = m_pImpl->m_frame.imageData;
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Frame::GetImage( const VmbUchar_t* &rpBuffer ) const
+{
+    rpBuffer = m_pImpl->m_frame.imageData;
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Frame::GetReceiveStatus( VmbFrameStatusType &rStatus ) const
+{
+    rStatus = static_cast<VmbFrameStatusType>(m_pImpl->m_frame.receiveStatus);
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Frame::GetPayloadType( VmbPayloadType& payloadType ) const
+{
+    if (m_pImpl->m_frame.receiveFlags & VmbFrameFlagsPayloadType)
+    {
+        payloadType = static_cast<VmbPayloadType>(m_pImpl->m_frame.payloadType);
+        return VmbErrorSuccess;
+    }
+
+    return VmbErrorNotAvailable;
+}
+
+VmbErrorType Frame::GetBufferSize( VmbUint32_t &rnBufferSize ) const
+{
+    rnBufferSize = m_pImpl-> m_frame.bufferSize;
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Frame::GetPixelFormat( VmbPixelFormatType &rPixelFormat ) const
+{
+    rPixelFormat = static_cast<VmbPixelFormatType>(m_pImpl->m_frame.pixelFormat);
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Frame::GetWidth( VmbUint32_t &rnWidth ) const
+{
+    if (m_pImpl->m_frame.receiveFlags & VmbFrameFlagsDimension)
+    {
+        rnWidth = m_pImpl->m_frame.width;
+        return VmbErrorSuccess;
+    }
+
+    return VmbErrorNotAvailable;
+}
+
+VmbErrorType Frame::GetHeight( VmbUint32_t &rnHeight ) const
+{
+    if (m_pImpl->m_frame.receiveFlags & VmbFrameFlagsDimension)
+    {
+        rnHeight = m_pImpl->m_frame.height;
+        return VmbErrorSuccess;
+    }
+
+    return VmbErrorNotAvailable;
+}
+
+VmbErrorType Frame::GetOffsetX( VmbUint32_t &rnOffsetX ) const
+{
+    if (m_pImpl->m_frame.receiveFlags & VmbFrameFlagsOffset)
+    {
+        rnOffsetX = m_pImpl->m_frame.offsetX;
+        return VmbErrorSuccess;
+    }
+
+    return VmbErrorNotAvailable;
+}
+
+VmbErrorType Frame::GetOffsetY( VmbUint32_t &rnOffsetY ) const
+{
+    if (m_pImpl->m_frame.receiveFlags & VmbFrameFlagsOffset)
+    {
+        rnOffsetY = m_pImpl->m_frame.offsetY;
+        return VmbErrorSuccess;
+    }
+
+    return VmbErrorNotAvailable;
+}
+
+VmbErrorType Frame::GetFrameID( VmbUint64_t &rnFrameID ) const
+{
+    if (m_pImpl->m_frame.receiveFlags & VmbFrameFlagsFrameID)
+    {
+        rnFrameID = m_pImpl->m_frame.frameID;
+        return VmbErrorSuccess;
+    }
+
+    return VmbErrorNotAvailable;
+}
+
+VmbErrorType Frame::GetTimestamp( VmbUint64_t &rnTimestamp ) const
+{
+    if (m_pImpl->m_frame.receiveFlags & VmbFrameFlagsTimestamp)
+    {
+        rnTimestamp = m_pImpl->m_frame.timestamp;
+        return VmbErrorSuccess;
+    }
+
+    return VmbErrorNotAvailable;
+}
+
+VmbErrorType Frame::GetFrameStruct(VmbFrame_t*& frame)
+{
+    frame = &m_pImpl->m_frame;
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Frame::ChunkDataAccess(const VmbFrame_t* frame, VmbChunkAccessCallback chunkAccessCallback, void* userContext)
+{
+    if ((m_pImpl->m_frame.receiveFlags & VmbFrameFlagsChunkDataPresent) && !m_pImpl->m_frame.chunkDataPresent)
+    {
+        return VmbErrorNotAvailable;
+    }
+
+    return static_cast<VmbErrorType>(VmbChunkDataAccess(frame, chunkAccessCallback, userContext));
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/FrameHandler.cpp b/VimbaX/api/source/VmbCPP/FrameHandler.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5f64d03adb71a571c04e6ed2c08ed4984776f8ef
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/FrameHandler.cpp
@@ -0,0 +1,77 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        FrameHandler.cpp
+
+  Description: Implementation of class VmbCPP::FrameHandler.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "FrameHandler.h"
+
+#include "MutexGuard.h"
+
+#include <VmbCPP/LoggerDefines.h>
+
+
+namespace VmbCPP {
+
+FrameHandler::FrameHandler( FramePtr pFrame, IFrameObserverPtr pFrameObserver )
+    :   m_pFrame( pFrame )
+    ,   m_pObserver( pFrameObserver )
+    ,   m_pMutex( new VmbCPP::Mutex() )
+{
+}
+
+FramePtr FrameHandler::GetFrame() const
+{
+    return m_pFrame;
+}
+
+void VMB_CALL FrameHandler::FrameDoneCallback(const VmbHandle_t /*cameraHandle*/, const VmbHandle_t /*streamHandle*/, VmbFrame_t* frame )
+{
+    if ( nullptr != frame)
+    {
+        FrameHandler* pFrameHandler = reinterpret_cast<FrameHandler*>(frame->context[FRAME_HDL] );
+        if ( nullptr != pFrameHandler)
+        {            
+            // Begin read lock frame handler
+            MutexGuard local_lock( pFrameHandler->Mutex() );
+            {
+                IFrameObserverPtr pObs;
+                if ( true == SP_ACCESS( pFrameHandler->m_pFrame )->GetObserver( pObs ))
+                {
+                    SP_ACCESS( pObs )->FrameReceived( pFrameHandler->m_pFrame );
+                }
+            }// scope to destroy observer pointer before releasing the lock
+        }
+        else // No FrameHandler
+        {
+            LOG_FREE_TEXT( "No frame handler passed. Frame has been removed from the frame queue." )
+        }
+    }
+    else // pVmbFrame == null (Just for safety)
+    {
+        LOG_FREE_TEXT( "Received callback for already freed frame." )
+    }
+}
+
+}
diff --git a/VimbaX/api/source/VmbCPP/FrameHandler.h b/VimbaX/api/source/VmbCPP/FrameHandler.h
new file mode 100644
index 0000000000000000000000000000000000000000..b1e278fd05f50491419ea128e21291b39043cd6a
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/FrameHandler.h
@@ -0,0 +1,70 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        FrameHandler.h
+
+  Description: Definition of class VmbCPP::FrameHandler.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_FRAMEHANDLER_H
+#define VMBCPP_FRAMEHANDLER_H
+
+/**
+* \file        FrameHandler.h
+*
+* \brief       Definition of class VmbCPP::FrameHandler.
+*/
+
+#include <vector>
+
+#include <VmbC/VmbCommonTypes.h>
+#include <VmbCPP/BasicLockable.h>
+#include <VmbCPP/SharedPointerDefines.h>
+#include <VmbCPP/Frame.h>
+#include <VmbCPP/IFrameObserver.h>
+#include <VmbCPP/Mutex.h>
+
+
+namespace VmbCPP {
+
+enum { FRAME_HDL=0, };
+
+class FrameHandler
+{
+  public:
+    static void VMB_CALL FrameDoneCallback(const VmbHandle_t cameraHandle, const VmbHandle_t streamHandle, VmbFrame_t* frame);
+
+    FrameHandler( FramePtr pFrame, IFrameObserverPtr pFrameObserver );
+
+    FramePtr GetFrame() const;
+    MutexPtr&               Mutex() { return m_pMutex; }
+  private:
+    IFrameObserverPtr       m_pObserver;
+    FramePtr                m_pFrame;
+    MutexPtr                m_pMutex;
+};
+
+typedef std::vector<FrameHandlerPtr> FrameHandlerPtrVector;
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/FrameImpl.h b/VimbaX/api/source/VmbCPP/FrameImpl.h
new file mode 100644
index 0000000000000000000000000000000000000000..8d6bfae0303bc5c202ea0caf492fe243de5ca7ce
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/FrameImpl.h
@@ -0,0 +1,62 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        FrameImpl.h
+
+  Description: Definition of pointer to implementation structure used by
+               VmbCPP::Frame.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_FRAMEIMPL_H
+#define VMBCPP_FRAMEIMPL_H
+
+/**
+* \file        FrameImpl.h
+*
+* \brief       Definition of pointer to implementation structure used by
+*              VmbCPP::Frame.
+*              Intended for use in the implementation of VmbCPP.
+*/
+
+
+namespace VmbCPP {
+
+struct Frame::Impl
+{
+    bool                m_bIsSelfAllocatedBuffer;
+
+    VmbFrame_t          m_frame;
+
+    IFrameObserverPtr   m_pObserver;
+    MutexPtr            m_pObserverMutex;
+
+    bool                m_bAlreadyAnnounced;
+    bool                m_bAlreadyQueued;
+    bool                m_bSynchronousGrab;
+
+    void Init();
+};
+
+}
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/Helper.h b/VimbaX/api/source/VmbCPP/Helper.h
new file mode 100644
index 0000000000000000000000000000000000000000..4293615a1bac99912a22739ffb96919ebf744317
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Helper.h
@@ -0,0 +1,60 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Helper.h
+
+  Description: Definition of helper classes (types)
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_HELPER_H
+#define VMBCPP_HELPER_H
+
+/**
+* \file        Helper.h
+*
+* \brief       Definition of helper classes (types)
+*              Intended for use in the implementation of VmbCPP.
+*/
+
+#include <VmbCPP/BasicLockable.h>
+
+
+namespace VmbCPP {
+
+template <class T>
+class LockableVector final : public BasicLockable
+{
+  public:
+    std::vector<T> Vector;
+};
+
+template <class T1, class T2>
+class LockableMap final : public BasicLockable
+{
+  public:
+    std::map<T1, T2> Map;
+};
+
+} // VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/IFrameObserver.cpp b/VimbaX/api/source/VmbCPP/IFrameObserver.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e78f9576d650fbe221a3242cc8fc45fb3938015a
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/IFrameObserver.cpp
@@ -0,0 +1,49 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        IFrameObserver.cpp
+
+  Description: Implementation of class VmbCPP::IFrameObserver.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <VmbCPP/IFrameObserver.h>
+#include <VmbCPP/Camera.h>
+
+
+namespace VmbCPP {
+
+    IFrameObserver::IFrameObserver(CameraPtr pCamera) : m_pCamera(pCamera)
+    {
+        if (!SP_ISNULL(pCamera))
+        {
+            StreamPtrVector streams;
+            if (VmbErrorSuccess == SP_ACCESS(pCamera)->GetStreams(streams) && streams.size() > 0)
+            {
+                m_pStream = streams[0];
+            }
+        }
+    }
+
+    IFrameObserver::IFrameObserver(CameraPtr pCamera, StreamPtr pStream) : m_pCamera(pCamera), m_pStream(pStream) {}
+    
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/IntFeature.cpp b/VimbaX/api/source/VmbCPP/IntFeature.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..868d39291f3a8a24e0046e3149bb8bfe42688cdf
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/IntFeature.cpp
@@ -0,0 +1,97 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        IntFeature.cpp
+
+  Description: Implementation of class VmbCPP::IntFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "IntFeature.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCPP/FeatureContainer.h>
+
+namespace VmbCPP {
+
+IntFeature::IntFeature(const VmbFeatureInfo& featureInfo, FeatureContainer& featureContainer)
+    :   BaseFeature(featureInfo, featureContainer)
+{
+}
+
+VmbErrorType IntFeature::GetValue( VmbInt64_t &rnValue ) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureIntGet(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rnValue));
+}
+
+VmbErrorType IntFeature::SetValue( const VmbInt64_t rnValue ) noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureIntSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), rnValue));
+}
+
+VmbErrorType IntFeature::GetRange( VmbInt64_t &rnMinimum, VmbInt64_t &rnMaximum ) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureIntRangeQuery(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rnMinimum, &rnMaximum));
+}
+
+VmbErrorType IntFeature::HasIncrement( VmbBool_t & incrementSupported) const noexcept
+{
+    incrementSupported = VmbBoolTrue;
+    return VmbErrorSuccess;
+}
+
+VmbErrorType IntFeature::GetIncrement(VmbInt64_t &rnIncrement) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureIntIncrementQuery(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rnIncrement));
+}
+
+VmbErrorType IntFeature::GetValidValueSet(VmbInt64_t* buffer, VmbUint32_t bufferSize, VmbUint32_t* setSize) const noexcept
+{
+    if (nullptr == m_pFeatureContainer)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    return static_cast<VmbErrorType>(VmbFeatureIntValidValueSetQuery(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), buffer, bufferSize, setSize));
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/IntFeature.h b/VimbaX/api/source/VmbCPP/IntFeature.h
new file mode 100644
index 0000000000000000000000000000000000000000..f4d97fafcb1912e3d5052332230c34744feb49d5
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/IntFeature.h
@@ -0,0 +1,68 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        IntFeature.h
+
+  Description: Definition of class VmbCPP::IntFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_INTFEATURE_H
+#define VMBCPP_INTFEATURE_H
+
+/**
+* \file        IntFeature.h
+*
+* \brief       Definition of class VmbCPP::IntFeature.
+*              Intended for use in the implementation of VmbCPP.
+*/
+
+#include "BaseFeature.h"
+
+struct VmbFeatureInfo;
+
+namespace VmbCPP {
+
+class FeatureContainer;
+
+class IntFeature final : public BaseFeature 
+{
+public:
+    IntFeature(const VmbFeatureInfo& featureInfo, FeatureContainer& featureContainer);
+
+    virtual VmbErrorType GetValue( VmbInt64_t &value ) const noexcept override;
+
+    virtual VmbErrorType SetValue(VmbInt64_t value) noexcept override;
+
+    virtual VmbErrorType GetRange( VmbInt64_t &minimum, VmbInt64_t &maximum ) const noexcept override;
+
+    virtual VmbErrorType HasIncrement( VmbBool_t &incrementSupported) const noexcept override;
+
+    virtual VmbErrorType GetIncrement( VmbInt64_t &increment ) const noexcept override;
+private:
+    // Array function to pass data across DLL boundaries
+    virtual VmbErrorType GetValidValueSet(VmbInt64_t* buffer, VmbUint32_t bufferSize, VmbUint32_t* setSize) const noexcept override;
+};
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/Interface.cpp b/VimbaX/api/source/VmbCPP/Interface.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..efc4ad64e6f24af61f61e08f99d23b65affb0286
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Interface.cpp
@@ -0,0 +1,111 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        Interface.cpp
+
+  Description: Implementation of class VmbCPP::Interface.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+#include <map>
+#include <string>
+#include <utility>
+
+#include <VmbCPP/Interface.h>
+
+#include "CopyUtils.hpp"
+
+
+namespace VmbCPP {
+
+struct Interface::Impl
+{
+    /**
+    * \brief Copy of interface infos
+    */
+    struct InterfaceInfo
+    {
+        /**
+        * \name InterfaceInfo
+        * \{
+        */
+        std::string             interfaceIdString;  //!< Unique identifier for each interface
+        VmbTransportLayerType_t interfaceType;      //!< Interface type
+        std::string             interfaceName;      //!< Interface name, given by the transport layer
+        /**
+        * \}
+        */
+    } m_interfaceInfo;
+    
+    TransportLayerPtr m_pTransportLayerPtr;                     //!< Pointer to the related transport layer object
+    GetCamerasByInterfaceFunction m_getCamerasByInterfaceFunc;
+};
+
+Interface::Interface(const VmbInterfaceInfo_t& interfaceInfo, const TransportLayerPtr& pTransportLayerPtr, GetCamerasByInterfaceFunction getCamerasByInterface)
+    : m_pImpl( new Impl() )
+{
+    m_pImpl->m_interfaceInfo.interfaceIdString.assign( interfaceInfo.interfaceIdString ? interfaceInfo.interfaceIdString : "" );
+    m_pImpl->m_interfaceInfo.interfaceName.assign( interfaceInfo.interfaceName ? interfaceInfo.interfaceName : "" );
+    m_pImpl->m_interfaceInfo.interfaceType = interfaceInfo.interfaceType;
+    m_pImpl->m_pTransportLayerPtr = pTransportLayerPtr;
+    m_pImpl->m_getCamerasByInterfaceFunc = std::move(getCamerasByInterface);
+    SetHandle(interfaceInfo.interfaceHandle);
+}
+
+Interface::~Interface()
+{
+    Reset();
+    RevokeHandle();
+}
+
+VmbErrorType Interface::GetID( char* const pStrID, VmbUint32_t& rnLength ) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_interfaceInfo.interfaceIdString, pStrID, rnLength);
+}
+
+VmbErrorType Interface::GetType( VmbTransportLayerType& reType ) const noexcept
+{
+    reType = static_cast<VmbTransportLayerType>(m_pImpl->m_interfaceInfo.interfaceType);
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Interface::GetName( char* const pStrName, VmbUint32_t& rnLength ) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_interfaceInfo.interfaceName, pStrName, rnLength);
+}
+
+VmbErrorType Interface::GetTransportLayer(TransportLayerPtr& reTransportLayer) const
+{
+    if (SP_ISNULL(m_pImpl->m_pTransportLayerPtr))
+    {
+        return VmbErrorNotAvailable;
+    }
+    reTransportLayer = m_pImpl->m_pTransportLayerPtr;
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Interface::GetCameras(CameraPtr* pCameras, VmbUint32_t& size)
+{
+    return m_pImpl->m_getCamerasByInterfaceFunc(this, pCameras, size);
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/LocalDevice.cpp b/VimbaX/api/source/VmbCPP/LocalDevice.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3c476e4d8a47813253c5fbb40ff051d1b6a02c22
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/LocalDevice.cpp
@@ -0,0 +1,40 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        LocalDevice.cpp
+
+  Description: Implementation of class VmbCPP::LocalDevice.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <VmbCPP/LocalDevice.h>
+
+
+
+
+namespace VmbCPP {
+
+LocalDevice::LocalDevice(VmbHandle_t handle)
+{
+	SetHandle(handle);
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/Mutex.cpp b/VimbaX/api/source/VmbCPP/Mutex.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e5741d2171b0f03748b7d1468fb96d5918c2ce93
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Mutex.cpp
@@ -0,0 +1,85 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Mutex.cpp
+
+  Description: Implementation of class VmbCPP::Mutex.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <new>
+
+#include <VmbCPP/Mutex.h>
+#include <VmbCPP/LoggerDefines.h>
+
+
+namespace VmbCPP {
+
+Mutex::Mutex( bool bInitLock )
+#ifdef _WIN32
+    :   m_hMutex( nullptr )
+#endif
+{
+#ifdef _WIN32
+    m_hMutex = CreateMutex( nullptr, FALSE, nullptr );
+    if( nullptr == m_hMutex )
+    {
+        LOG_FREE_TEXT( "Could not create mutex." );
+        throw std::bad_alloc();
+    }
+#else
+    pthread_mutex_init(&m_Mutex, nullptr);
+#endif
+
+    if( true == bInitLock )
+    {
+        Lock();
+    }
+}
+
+Mutex::~Mutex()
+{  
+#ifdef _WIN32
+    CloseHandle( m_hMutex );
+#else
+    pthread_mutex_destroy(&m_Mutex);
+#endif
+}
+
+void Mutex::Lock()
+{
+#ifdef _WIN32
+    WaitForSingleObject( m_hMutex, INFINITE );
+#else
+    pthread_mutex_lock( &m_Mutex );
+#endif
+}
+
+void Mutex::Unlock()
+{  
+#ifdef _WIN32
+    ReleaseMutex( m_hMutex );
+#else
+    pthread_mutex_unlock( &m_Mutex );
+#endif
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/MutexGuard.cpp b/VimbaX/api/source/VmbCPP/MutexGuard.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5c43e7968547a8de120af3b642debb4f9e409e07
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/MutexGuard.cpp
@@ -0,0 +1,102 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        MutexGuard.cpp
+
+  Description: Implementation of a mutex helper class for locking and unlocking.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "MutexGuard.h"
+
+#include <VmbCPP/VmbSystem.h>
+
+
+namespace VmbCPP {
+
+MutexGuard::MutexGuard() noexcept
+    : m_pMutex( nullptr )
+{
+}
+
+MutexGuard::MutexGuard( MutexPtr &pMutex )
+{
+    if ( SP_ISNULL( pMutex ))
+    {
+        LOG_FREE_TEXT( "No mutex passed." );
+    }
+    else
+    {
+        m_pMutex = SP_ACCESS(pMutex );
+        Protect( );
+    }
+}
+
+MutexGuard::MutexGuard(const BasicLockablePtr& pLockable )
+{
+    if ( SP_ISNULL( pLockable ))
+    {
+        LOG_FREE_TEXT( "No mutex passed." );
+    }
+    else
+    {
+        m_pMutex = SP_ACCESS(SP_ACCESS(pLockable)->GetMutex());
+        Protect( );
+    }
+}
+
+MutexGuard::MutexGuard( const BasicLockable &rLockable )
+{
+    m_pMutex = SP_ACCESS(rLockable.GetMutex() );
+    Protect( );
+}
+
+MutexGuard::~MutexGuard()
+{
+    Release();
+}
+
+void MutexGuard::Protect(  )
+{
+    if( m_pMutex == nullptr )
+    {
+        LOG_FREE_TEXT( "No mutex passed." );
+        return;
+    }
+    m_pMutex->Lock();
+}
+
+
+bool MutexGuard::Release()
+{
+    if( m_pMutex == nullptr)
+    {
+        return false;
+    }
+
+    m_pMutex ->Unlock();
+    m_pMutex = nullptr;
+
+    return true;
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/MutexGuard.h b/VimbaX/api/source/VmbCPP/MutexGuard.h
new file mode 100644
index 0000000000000000000000000000000000000000..c92207b8bf301e9afc996314b704dbf85b585039
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/MutexGuard.h
@@ -0,0 +1,68 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        MutexGuard.h
+
+  Description: Definition of a mutex helper class for locking and unlocking.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_MUTEXGUARD
+#define VMBCPP_MUTEXGUARD
+
+/**
+* \file        MutexGuard.h
+*
+* \brief       Definition of a mutex helper class for locking and unlocking.
+*              Intended for use in the implementation of VmbCPP.
+*/
+
+#include <VmbCPP/BasicLockable.h>
+
+
+namespace VmbCPP
+{
+class Mutex;
+
+class MutexGuard
+{
+  public:
+    MutexGuard() noexcept;
+    MutexGuard( MutexPtr &pMutex );
+    MutexGuard( const BasicLockablePtr& pLockable );
+    MutexGuard( const BasicLockable &rLockable );
+    ~MutexGuard();
+
+    MutexGuard(const MutexGuard&) = delete;
+    MutexGuard& operator=(const MutexGuard&) = delete;
+
+    void Protect();
+    bool Release();
+
+  protected:
+    Mutex  *m_pMutex;
+};
+
+} //namespace VmbCPP
+
+
+#endif //VMBCPP_MUTEXGUARD
diff --git a/VimbaX/api/source/VmbCPP/PersistableFeatureContainer.cpp b/VimbaX/api/source/VmbCPP/PersistableFeatureContainer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a2202d17038b19257ea2904d00d5fe663db186a8
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/PersistableFeatureContainer.cpp
@@ -0,0 +1,58 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        PersistableFeatureContainer.cpp
+
+  Description: Implementation of class VmbCPP::PersistableFeatureContainer.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <VmbCPP/PersistableFeatureContainer.h>
+
+
+namespace VmbCPP {
+
+PersistableFeatureContainer::PersistableFeatureContainer() :FeatureContainer() {}
+
+    
+VmbErrorType PersistableFeatureContainer::SaveSettings( const VmbFilePathChar_t* const filePath, VmbFeaturePersistSettings_t *pSettings ) const noexcept
+{
+    if(nullptr == filePath)
+    {
+        return VmbErrorBadParameter;
+    }
+    
+    return static_cast<VmbErrorType>(VmbSettingsSave(GetHandle(), filePath, pSettings, sizeof(*pSettings)));
+}
+
+VmbErrorType PersistableFeatureContainer::LoadSettings( const VmbFilePathChar_t* const filePath, VmbFeaturePersistSettings_t *pSettings ) const noexcept
+{
+    if (nullptr == filePath)
+    {
+        return VmbErrorBadParameter;
+    }
+
+    return static_cast<VmbErrorType>(VmbSettingsLoad(GetHandle(), filePath, pSettings, sizeof(*pSettings)));
+}
+    
+    
+}   // namespace VmbCPP
+
diff --git a/VimbaX/api/source/VmbCPP/RawFeature.cpp b/VimbaX/api/source/VmbCPP/RawFeature.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..539c77bc920d221c44922bb4df0c44da91ec4d6d
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/RawFeature.cpp
@@ -0,0 +1,89 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        RawFeature.cpp
+
+  Description: Implementation of class VmbCPP::RawFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "RawFeature.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCPP/FeatureContainer.h>
+
+namespace VmbCPP {
+
+RawFeature::RawFeature(const VmbFeatureInfo& featureInfo, FeatureContainer& featureContainer)
+    : BaseFeature(featureInfo, featureContainer)
+{
+}
+
+VmbErrorType RawFeature::GetValue(VmbUchar_t *pValue, VmbUint32_t &rnSize, VmbUint32_t &rnSizeFilled) const noexcept
+{
+    VmbError_t res;
+    VmbUint32_t nSize;
+
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    
+    res = VmbFeatureRawLengthQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &nSize );
+
+    if ( nullptr != pValue )
+    {
+        if ( rnSize < nSize )
+        {
+            return VmbErrorMoreData;
+        }
+
+        if ( VmbErrorSuccess == res )
+        {
+            res = VmbFeatureRawGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), (char*)pValue, rnSize, &rnSizeFilled );
+        }
+    }
+    else
+    {
+        rnSize = nSize;
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType RawFeature::SetValue(const VmbUchar_t *pValue, VmbUint32_t nSize) noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    if ( nullptr == pValue )
+    {
+        return VmbErrorBadParameter;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureRawSet(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), reinterpret_cast<const char*>(pValue), nSize));
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/RawFeature.h b/VimbaX/api/source/VmbCPP/RawFeature.h
new file mode 100644
index 0000000000000000000000000000000000000000..d5855693ae49d44fca99a833f3905e3d5c2669c6
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/RawFeature.h
@@ -0,0 +1,59 @@
+/*=============================================================================
+  Copyright (C) 2012 - 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        RawFeature.h
+
+  Description: Definition of class VmbCPP::RawFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_RAWFEATURE_H
+#define VMBCPP_RAWFEATURE_H
+
+/**
+* \file        RawFeature.h
+*
+* \brief       Definition of class VmbCPP::RawFeature.
+*              Intended for use in the implementation of VmbCPP.
+*/
+
+#include <VmbC/VmbCommonTypes.h>
+
+#include "BaseFeature.h"
+
+
+namespace VmbCPP {
+
+class RawFeature final : public BaseFeature 
+{
+public:
+    RawFeature(const VmbFeatureInfo& featureInfo, FeatureContainer& featureContainer);
+
+protected:
+    // Array functions to pass data across DLL boundaries
+    virtual VmbErrorType GetValue(VmbUchar_t *pValue, VmbUint32_t &size, VmbUint32_t &sizeFilled) const noexcept override;
+    virtual VmbErrorType SetValue(const VmbUchar_t *pValue, VmbUint32_t size) noexcept override;
+};
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/Semaphore.cpp b/VimbaX/api/source/VmbCPP/Semaphore.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fd56aa5ffd1c5503157828bfbac2b711b68d0abb
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Semaphore.cpp
@@ -0,0 +1,93 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Semaphore.cpp
+
+  Description: Implementation of an semaphore class.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <new>
+
+#include <VmbCPP/LoggerDefines.h>
+
+#include "Semaphore.h"
+
+
+namespace VmbCPP {
+
+Semaphore::Semaphore( int nInit, int nMax )
+#ifdef _WIN32
+    :   m_hSemaphore( nullptr )
+#endif
+{
+#ifdef _WIN32
+    m_hSemaphore = CreateSemaphore( nullptr, nInit, nMax, nullptr );
+    if( nullptr == m_hSemaphore )
+    {
+        LOG_FREE_TEXT( "Could not create semaphore." );
+        throw std::bad_alloc();
+    }
+#else
+    sem_init( &m_Semaphore, false, (unsigned int)nInit );
+#endif
+}
+
+Semaphore::Semaphore( const Semaphore& )
+{
+    // No compiler generated copy ctor
+}
+
+Semaphore& Semaphore::operator=( const Semaphore& )
+{
+    // No assignment operator
+    return *this;
+}
+
+Semaphore::~Semaphore()
+{  
+#ifdef _WIN32
+    CloseHandle( m_hSemaphore );
+#else
+    sem_destroy( &m_Semaphore );
+#endif
+}
+
+void Semaphore::Acquire()
+{
+#ifdef _WIN32
+    WaitForSingleObject( m_hSemaphore, INFINITE );
+#else
+    sem_wait( &m_Semaphore );
+#endif
+}
+
+void Semaphore::Release()
+{
+#ifdef _WIN32
+    ReleaseSemaphore( m_hSemaphore, 1, nullptr );
+#else
+    sem_post( &m_Semaphore );
+#endif
+}
+
+} //namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/Semaphore.h b/VimbaX/api/source/VmbCPP/Semaphore.h
new file mode 100644
index 0000000000000000000000000000000000000000..c5ba4e8d06d78b655d4e729ce6e2c0a78c0efec1
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Semaphore.h
@@ -0,0 +1,74 @@
+/*=============================================================================
+  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        Semaphore.h
+
+  Description: Definition of an semaphore class.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_SEMAPHORE
+#define VMBCPP_SEMAPHORE
+
+/**
+* \file        Semaphore.h
+*
+* \brief       Definition of an semaphore class.
+*              Intended for use in the implementation of VmbCPP.
+*/
+
+#include <VmbCPP/VmbCPPCommon.h>
+
+#ifdef _WIN32
+    #include <windows.h>
+#else
+    #include <semaphore.h>
+#endif
+
+
+namespace VmbCPP {
+
+class Semaphore
+{
+  public:
+    Semaphore( int nInit = 0, int nMax = 1 );
+    ~Semaphore();
+
+    void Acquire();
+    void Release();
+
+  private:
+    // No copy ctor
+    Semaphore( const Semaphore &rSemaphore );
+    // No assignment
+    Semaphore& operator=( const Semaphore& );
+
+#ifdef _WIN32
+    HANDLE          m_hSemaphore;
+#else
+    sem_t           m_Semaphore;
+#endif
+};
+
+}  // namespace VmbCPP
+
+#endif //VMBCPP_MUTEX
diff --git a/VimbaX/api/source/VmbCPP/Stream.cpp b/VimbaX/api/source/VmbCPP/Stream.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..95739963d5d9c475612c8cbb27f2f8d88e1156f3
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Stream.cpp
@@ -0,0 +1,419 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        Stream.cpp
+
+  Description: Implementation of class VmbCPP::Stream.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+#pragma warning(disable:4996)
+#include <sstream>
+#pragma warning(default:4996)
+#include <cstring>
+#include <limits>
+#include <utility>
+
+#include <VmbCPP/Stream.h>
+#include <VmbCPP/LoggerDefines.h>
+
+#include "ConditionHelper.h"
+#include "FrameImpl.h"
+#include "FrameHandler.h"
+#include "Helper.h"
+#include "MutexGuard.h"
+
+
+namespace VmbCPP {
+
+struct Stream::Impl {
+  
+    LockableVector<FrameHandlerPtr> m_frameHandlers;
+    ConditionHelper                 m_conditionHelper;
+    bool                            m_deviceIsOpen = false;
+
+    VmbErrorType AppendFrameToVector(const FramePtr& frame);
+
+};
+
+VmbErrorType Stream::Impl::AppendFrameToVector(const FramePtr& rFrame)
+{
+    try
+    {
+        FrameHandlerPtr pFH(new FrameHandler(rFrame, SP_ACCESS(rFrame)->m_pImpl->m_pObserver));
+        if (SP_ISNULL(pFH))
+        {
+            return VmbErrorResources;
+        }
+        SP_ACCESS(rFrame)->m_pImpl->m_frame.context[FRAME_HDL] = SP_ACCESS(pFH);
+        m_frameHandlers.Vector.emplace_back(std::move(pFH));
+        return VmbErrorSuccess;
+    }
+    catch (...)
+    {
+        return VmbErrorResources;
+    }
+}
+
+Stream::Stream(VmbHandle_t streamHandle, bool deviceIsOpen)
+    :m_pImpl(new Impl())
+{
+    SetHandle(streamHandle);
+    m_pImpl->m_deviceIsOpen = deviceIsOpen;
+}
+
+Stream::~Stream()
+{
+    Close();
+}
+
+VmbErrorType Stream::Open()
+{
+    if (nullptr == GetHandle())
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    m_pImpl->m_deviceIsOpen = true;
+    return VmbErrorSuccess;
+}
+
+VmbErrorType Stream::Close()
+{
+    if (true != m_pImpl->m_deviceIsOpen)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    VmbErrorType res = VmbErrorSuccess;
+
+    if (0 < m_pImpl->m_frameHandlers.Vector.size())
+    {
+        VmbErrorType res = EndCapture();
+        if (VmbErrorSuccess != res && VmbErrorAlready != res)
+        {
+            LOG_FREE_TEXT("Could not successfully end capturing");
+        }
+        res = FlushQueue();
+        if (VmbErrorSuccess != res && VmbErrorAlready != res)
+        {
+            LOG_FREE_TEXT("Could not successfully flush queue");
+        }
+        res = RevokeAllFrames();
+        if (VmbErrorSuccess != res && VmbErrorAlready != res)
+        {
+            LOG_FREE_TEXT("Could not successfully revoke all frames");
+        }
+        m_pImpl->m_frameHandlers.Vector.clear();
+    }
+    Reset();
+    RevokeHandle();
+    m_pImpl->m_deviceIsOpen = false;
+    return res;
+}
+
+VmbErrorType Stream::AnnounceFrame(const FramePtr& frame)
+{
+    if (true != m_pImpl->m_deviceIsOpen)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (SP_ISNULL(frame))
+    {
+        return VmbErrorBadParameter;
+    }
+
+    if (true == SP_ACCESS(frame)->m_pImpl->m_bAlreadyAnnounced
+     || true == SP_ACCESS(frame)->m_pImpl->m_bAlreadyQueued)
+    {
+        return VmbErrorInvalidCall;
+    }
+
+    VmbError_t res = VmbFrameAnnounce(GetHandle(), &(SP_ACCESS(frame)->m_pImpl->m_frame), sizeof SP_ACCESS(frame)->m_pImpl->m_frame);
+
+    if (VmbErrorSuccess == res)
+    {
+        // Begin write lock frame handler list
+        if (true == m_pImpl->m_conditionHelper.EnterWriteLock(m_pImpl->m_frameHandlers))
+        {
+            res = m_pImpl->AppendFrameToVector(frame);
+            if (VmbErrorSuccess == res)
+            {
+                SP_ACCESS(frame)->m_pImpl->m_bAlreadyAnnounced = true;
+            }
+            else
+            {
+                LOG_FREE_TEXT("could not append frame to internal vector");
+            }
+            // End write lock frame handler list
+            m_pImpl->m_conditionHelper.ExitWriteLock(m_pImpl->m_frameHandlers);
+        }
+        else
+        {
+            LOG_FREE_TEXT("Could not lock announced frame queue for appending frame.");
+            res = VmbErrorResources;
+        }
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+
+VmbErrorType Stream::RevokeFrame(const FramePtr& frame)
+{
+    if (true != m_pImpl->m_deviceIsOpen)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (SP_ISNULL(frame))
+    {
+        return VmbErrorBadParameter;
+    }
+
+    VmbError_t res = VmbFrameRevoke(GetHandle(), &(SP_ACCESS(frame)->m_pImpl->m_frame));
+
+    if (VmbErrorSuccess == res)
+    {
+        // Begin (exclusive) write lock frame handler list
+        if (true == m_pImpl->m_conditionHelper.EnterWriteLock(m_pImpl->m_frameHandlers, true))
+        {
+            // Dequeue, revoke and delete frame
+            for (FrameHandlerPtrVector::iterator iter = m_pImpl->m_frameHandlers.Vector.begin();
+                m_pImpl->m_frameHandlers.Vector.end() != iter;)
+            {
+                // Begin exclusive write lock frame handler
+                MutexGuard lockal_lock(SP_ACCESS((*iter))->Mutex());
+                if (SP_ISEQUAL(frame, SP_ACCESS((*iter))->GetFrame()))
+                {
+                    SP_ACCESS(frame)->m_pImpl->m_frame.context[FRAME_HDL] = nullptr;
+                    SP_ACCESS(frame)->m_pImpl->m_bAlreadyQueued = false;
+                    SP_ACCESS(frame)->m_pImpl->m_bAlreadyAnnounced = false;
+                    // End exclusive write lock frame handler
+                    iter = m_pImpl->m_frameHandlers.Vector.erase(iter);
+                    return VmbErrorSuccess;
+                }
+                else
+                {
+                    ++iter;
+                }
+            }
+
+            // End (exclusive) write lock frame handler list
+            m_pImpl->m_conditionHelper.ExitWriteLock(m_pImpl->m_frameHandlers);
+        }
+        else
+        {
+            LOG_FREE_TEXT("Could not lock announced frame queue for removing frame.");
+            res = VmbErrorResources;
+        }
+    }
+    else
+    {
+        LOG_FREE_TEXT("Could not revoke frames")
+    }
+
+    return (VmbErrorType)res;
+}
+
+VmbErrorType Stream::RevokeAllFrames()
+{
+    if (true != m_pImpl->m_deviceIsOpen)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    VmbError_t res = VmbFrameRevokeAll(GetHandle());
+
+    if (VmbErrorSuccess == res)
+    {
+        // Begin (exclusive) write lock frame handler list
+        if (true == m_pImpl->m_conditionHelper.EnterWriteLock(m_pImpl->m_frameHandlers, true))
+        {
+            // Dequeue, revoke and delete frames
+            for (FrameHandlerPtrVector::iterator iter = m_pImpl->m_frameHandlers.Vector.begin();
+                m_pImpl->m_frameHandlers.Vector.end() != iter;
+                ++iter)
+            {
+                // Begin exclusive write lock frame handler
+                MutexGuard  local_lock(SP_ACCESS((*iter))->Mutex());
+                SP_ACCESS(SP_ACCESS((*iter))->GetFrame())->m_pImpl->m_frame.context[FRAME_HDL] = nullptr;
+                SP_ACCESS(SP_ACCESS((*iter))->GetFrame())->m_pImpl->m_bAlreadyQueued = false;
+                SP_ACCESS(SP_ACCESS((*iter))->GetFrame())->m_pImpl->m_bAlreadyAnnounced = false;
+                // End exclusive write lock frame handler
+            }
+
+            m_pImpl->m_frameHandlers.Vector.clear();
+
+            // End exclusive write lock frame handler list
+            m_pImpl->m_conditionHelper.ExitWriteLock(m_pImpl->m_frameHandlers);
+        }
+        else
+        {
+            LOG_FREE_TEXT("Could not lock frame handler list.")
+        }
+    }
+
+    return (VmbErrorType)res;
+}
+
+VmbErrorType Stream::QueueFrame(const FramePtr& frame)
+{
+    if (true != m_pImpl->m_deviceIsOpen)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    if (SP_ISNULL(frame))
+    {
+        return VmbErrorBadParameter;
+    }
+
+    // HINT: The same frame cannot be queued twice (VmbErrorOther)
+    // Don't pass a FrameCallback for synchronous acquisition
+    VmbError_t res = VmbCaptureFrameQueue(GetHandle(), &(SP_ACCESS(frame)->m_pImpl->m_frame), SP_ACCESS(frame)->m_pImpl->m_bSynchronousGrab ? nullptr : FrameHandler::FrameDoneCallback);
+
+    if (VmbErrorSuccess == res
+        && false == SP_ACCESS(frame)->m_pImpl->m_bAlreadyQueued)
+    {
+        if (false == SP_ACCESS(frame)->m_pImpl->m_bAlreadyAnnounced)
+        {
+            // Begin write lock frame handler list
+            if (true == m_pImpl->m_conditionHelper.EnterWriteLock(m_pImpl->m_frameHandlers))
+            {
+                m_pImpl->AppendFrameToVector(frame);
+                SP_ACCESS(frame)->m_pImpl->m_bAlreadyQueued = true;
+
+                // End write lock frame handler list
+                m_pImpl->m_conditionHelper.ExitWriteLock(m_pImpl->m_frameHandlers);
+            }
+            else
+            {
+                LOG_FREE_TEXT("Could not lock frame queue for appending frame.");
+                res = VmbErrorResources;
+            }
+        }
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType Stream::FlushQueue()
+{
+    if (true != m_pImpl->m_deviceIsOpen)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    VmbError_t res = VmbCaptureQueueFlush(GetHandle());
+
+    if (VmbErrorSuccess == res)
+    {
+        // Begin exclusive write lock frame handler list
+        if (true == m_pImpl->m_conditionHelper.EnterWriteLock(m_pImpl->m_frameHandlers, true))
+        {
+            for (FrameHandlerPtrVector::iterator iter = m_pImpl->m_frameHandlers.Vector.begin();
+                m_pImpl->m_frameHandlers.Vector.end() != iter;)
+            {
+                // Begin exclusive write lock of every single frame handler
+                MutexPtr tmpMutex = SP_ACCESS((*iter))->Mutex();
+                SP_ACCESS(tmpMutex)->Lock();
+                //SP_ACCESS(( *iter)) ->Mutex()->Lock();
+                // Dequeue frame
+                SP_ACCESS(SP_ACCESS((*iter))->GetFrame())->m_pImpl->m_bAlreadyQueued = false;
+                if (false == SP_ACCESS(SP_ACCESS((*iter))->GetFrame())->m_pImpl->m_bAlreadyAnnounced)
+                {
+                    // Delete frame if it was not announced / was revoked before
+                    SP_ACCESS(SP_ACCESS((*iter))->GetFrame())->m_pImpl->m_frame.context[FRAME_HDL] = nullptr;
+                    // End write lock frame handler
+                    SP_ACCESS(tmpMutex)->Unlock();
+                    iter = m_pImpl->m_frameHandlers.Vector.erase(iter);
+                }
+                else
+                {
+                    // End write lock frame handler
+                    SP_ACCESS(tmpMutex)->Unlock();
+                    ++iter;
+                }
+            }
+            // End write lock frame handler list
+            m_pImpl->m_conditionHelper.ExitWriteLock(m_pImpl->m_frameHandlers);
+        }
+        else
+        {
+            LOG_FREE_TEXT("Could not lock frame handler list.")
+        }
+    }
+    else
+    {
+        LOG_FREE_TEXT("Could not flush frame queue")
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+
+VmbErrorType Stream::StartCapture() noexcept
+{
+    if (true != m_pImpl->m_deviceIsOpen)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    return static_cast<VmbErrorType>(VmbCaptureStart(GetHandle()));
+}
+
+VmbErrorType Stream::EndCapture() noexcept
+{
+    if (true != m_pImpl->m_deviceIsOpen)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    return static_cast<VmbErrorType>(VmbCaptureEnd(GetHandle()));
+}
+
+VmbErrorType Stream::GetStreamBufferAlignment(VmbUint32_t& nBufferAlignment)
+{
+    if (true != m_pImpl->m_deviceIsOpen)
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    FeaturePtr feat;
+    if (VmbErrorSuccess == GetFeatureByName("StreamBufferAlignment", feat))
+    {
+        VmbInt64_t value;
+        VmbError_t err;
+        if (VmbErrorSuccess == (err = feat->GetValue(value)))
+        {            
+            if (value >= 0 && value <= (std::numeric_limits<VmbUint32_t>::max)())
+            {
+                nBufferAlignment = static_cast<VmbUint32_t>(value);
+                return VmbErrorSuccess;
+            }
+            else
+            {
+                return VmbErrorInvalidValue;
+            }
+        }
+        else
+        {
+            return static_cast<VmbErrorType>(err);
+        }
+    }
+
+    nBufferAlignment = 1;
+    return VmbErrorSuccess;
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/StringFeature.cpp b/VimbaX/api/source/VmbCPP/StringFeature.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b5459c326642bdf7d3160ec5f454fd5d269bdac6
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/StringFeature.cpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        StringFeature.cpp
+
+  Description: Implementation of class VmbCPP::StringFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include "StringFeature.h"
+
+#include <VmbC/VmbC.h>
+
+#include <VmbCPP/FeatureContainer.h>
+
+namespace VmbCPP {
+
+StringFeature::StringFeature(const VmbFeatureInfo& featureInfo, FeatureContainer& featureContainer)
+    :   BaseFeature(featureInfo, featureContainer)
+{
+}
+
+VmbErrorType StringFeature::GetValue(char * const pStrValue, VmbUint32_t &rnLength) const noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+    
+    return static_cast<VmbErrorType>(VmbFeatureStringGet(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pStrValue, rnLength, &rnLength));
+}
+
+VmbErrorType StringFeature::SetValue(const char *pStrValue) noexcept
+{
+    if ( nullptr == m_pFeatureContainer )
+    {
+        return VmbErrorDeviceNotOpen;
+    }
+
+    return static_cast<VmbErrorType>(VmbFeatureStringSet(m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pStrValue));
+}
+
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/StringFeature.h b/VimbaX/api/source/VmbCPP/StringFeature.h
new file mode 100644
index 0000000000000000000000000000000000000000..77d0b56d7ab0a1fbccf6481da6bbc7732cd8d3fe
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/StringFeature.h
@@ -0,0 +1,59 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+
+  File:        StringFeature.h
+
+  Description: Definition of class VmbCPP::StringFeature.
+               Intended for use in the implementation of VmbCPP.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 VMBCPP_STRINGFEATURE_H
+#define VMBCPP_STRINGFEATURE_H
+
+/**
+* \file        StringFeature.h
+*
+* \brief       Definition of class VmbCPP::StringFeature.
+*              Intended for use in the implementation of VmbCPP.
+*/
+
+#include <VmbC/VmbCommonTypes.h>
+
+#include "BaseFeature.h"
+
+namespace VmbCPP {
+
+class StringFeature final : public BaseFeature 
+{
+public:
+    StringFeature(const VmbFeatureInfo& featureInfo, FeatureContainer& featureContainer);
+
+protected:
+    virtual VmbErrorType SetValue(const char *pValue) noexcept override;
+
+    // Array functions to pass data across DLL boundaries
+    virtual VmbErrorType GetValue(char * const pValue, VmbUint32_t &length) const noexcept override;
+};
+
+}  // namespace VmbCPP
+
+#endif
diff --git a/VimbaX/api/source/VmbCPP/TransportLayer.cpp b/VimbaX/api/source/VmbCPP/TransportLayer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9540b591bfe0a5182cc5c13975c58f466f988ee3
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/TransportLayer.cpp
@@ -0,0 +1,140 @@
+/*=============================================================================
+  Copyright (C) 2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        TransportLayer.cpp
+
+  Description: Implementation of class VmbCPP::TransportLayer.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+#pragma warning(disable:4996)
+#include <map>
+#pragma warning(default:4996)
+
+#include <memory>
+#include <utility>
+
+#include <VmbCPP/TransportLayer.h>
+
+#include "CopyUtils.hpp"
+
+namespace VmbCPP {
+
+struct TransportLayer::Impl
+{
+    /**
+    * \brief   Copy of transport layer infos
+    */
+    struct TransportLayerInfo
+    {
+        /**
+        * \name TransportLayerInfo
+        * \{
+        */
+        std::string                 transportLayerIdString;     //!< Unique identifier for each TL
+        VmbTransportLayerType_t     transportLayerType;         //!< TL type
+        std::string                 transportLayerName;         //!< TL name
+        std::string                 transportLayerModelName;    //!< TL model name
+        std::string                 transportLayerVendor;       //!< TL vendor
+        std::string                 transportLayerVersion;      //!< TL version
+        std::string                 transportLayerPath;         //!< TL full path
+        /**
+        * \}
+        */
+    } m_transportLayerInfo;
+
+    GetInterfacesByTLFunction m_getInterfacesByTLFunc;
+    GetCamerasByTLFunction m_getCamerasByTLFunc;
+};
+
+TransportLayer::TransportLayer(const VmbTransportLayerInfo_t& transportLayerInfo, GetInterfacesByTLFunction getInterfacesByTLFunc, GetCamerasByTLFunction getCamerasByTLFunc )
+    :   m_pImpl(new Impl())
+{
+    m_pImpl->m_transportLayerInfo.transportLayerIdString.assign( transportLayerInfo.transportLayerIdString ? transportLayerInfo.transportLayerIdString : "" );
+    m_pImpl->m_transportLayerInfo.transportLayerType = transportLayerInfo.transportLayerType;
+    m_pImpl->m_transportLayerInfo.transportLayerName.assign( transportLayerInfo.transportLayerName ? transportLayerInfo.transportLayerName : "" );
+    m_pImpl->m_transportLayerInfo.transportLayerModelName.assign(transportLayerInfo.transportLayerModelName ? transportLayerInfo.transportLayerModelName : "");
+    m_pImpl->m_transportLayerInfo.transportLayerVendor.assign(transportLayerInfo.transportLayerVendor ? transportLayerInfo.transportLayerVendor : "");
+    m_pImpl->m_transportLayerInfo.transportLayerVersion.assign(transportLayerInfo.transportLayerVersion ? transportLayerInfo.transportLayerVersion : "");
+    m_pImpl->m_transportLayerInfo.transportLayerPath.assign(transportLayerInfo.transportLayerPath ? transportLayerInfo.transportLayerPath : "");
+    m_pImpl->m_getInterfacesByTLFunc = std::move(getInterfacesByTLFunc);
+    m_pImpl->m_getCamerasByTLFunc = std::move(getCamerasByTLFunc);
+    SetHandle(transportLayerInfo.transportLayerHandle);
+}
+
+TransportLayer::~TransportLayer() noexcept
+{
+    Reset();
+    RevokeHandle();
+}
+
+// HINT: This information remains static throughout the object's lifetime
+VmbErrorType TransportLayer::GetID(char* const pStrID, VmbUint32_t& rnLength) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_transportLayerInfo.transportLayerIdString, pStrID, rnLength);
+}
+
+// HINT: This information remains static throughout the object's lifetime
+VmbErrorType TransportLayer::GetName(char* const rName, VmbUint32_t& rnLength) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_transportLayerInfo.transportLayerName, rName, rnLength);
+}
+
+// HINT: This information remains static throughout the object's lifetime
+VmbErrorType TransportLayer::GetModelName(char* const rModelName, VmbUint32_t& rnLength) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_transportLayerInfo.transportLayerModelName, rModelName, rnLength);
+}
+
+// HINT: This information remains static throughout the object's lifetime
+VmbErrorType TransportLayer::GetVendor(char* const rVendor, VmbUint32_t& rnLength) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_transportLayerInfo.transportLayerVendor, rVendor, rnLength);
+}
+
+// HINT: This information remains static throughout the object's lifetime
+VmbErrorType TransportLayer::GetVersion(char* const rVersion, VmbUint32_t& rnLength) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_transportLayerInfo.transportLayerVersion, rVersion, rnLength);
+}
+
+// HINT: This information remains static throughout the object's lifetime
+VmbErrorType TransportLayer::GetPath(char* const rPath, VmbUint32_t& rnLength) const noexcept
+{
+    return CopyToBuffer(m_pImpl->m_transportLayerInfo.transportLayerPath, rPath, rnLength);
+}
+
+VmbErrorType TransportLayer::GetType(VmbTransportLayerType& reType) const noexcept
+{
+    reType = static_cast<VmbTransportLayerType>(m_pImpl->m_transportLayerInfo.transportLayerType);
+    return VmbErrorSuccess;
+}
+
+VmbErrorType TransportLayer::GetInterfaces(InterfacePtr* pInterfaces, VmbUint32_t& size)
+{
+    return m_pImpl->m_getInterfacesByTLFunc(this, pInterfaces, size);
+}
+
+VmbErrorType TransportLayer::GetCameras(CameraPtr* pCameras, VmbUint32_t& size)
+{
+    return m_pImpl->m_getCamerasByTLFunc(this, pCameras, size);
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/Version.h.in b/VimbaX/api/source/VmbCPP/Version.h.in
new file mode 100644
index 0000000000000000000000000000000000000000..9719d235da6d9430a530596897e41463dfd5941b
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Version.h.in
@@ -0,0 +1,29 @@
+/*
+|==============================================================================
+| Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.
+|
+| Reproduction or disclosure of this file or its contents without the prior
+| written consent of Allied Vision Technologies is prohibited.
+|==============================================================================
+|
+| File:         Version.h
+|
+| Project/lib:  VmbC
+|
+| Target:       any
+|
+| Description:  Define version number of library here
+|
+| Notes:
+|
+|==============================================================================
+*/
+
+#ifndef _VERSION_H_INCLUDE
+#define _VERSION_H_INCLUDE
+
+#define VMBCPP_VERSION_MAJOR  ${VMB_MAJOR_VERSION}
+#define VMBCPP_VERSION_MINOR  ${VMB_MINOR_VERSION}
+#define VMBCPP_VERSION_PATCH  ${VMB_PATCH_VERSION}
+
+#endif //_VERSION_H_INCLUDE
diff --git a/VimbaX/api/source/VmbCPP/Version_git.h b/VimbaX/api/source/VmbCPP/Version_git.h
new file mode 100644
index 0000000000000000000000000000000000000000..e6db128342f1c169313c3a6c6dab7aace3447b26
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/Version_git.h
@@ -0,0 +1,4 @@
+#ifndef _VMBCPP_VERSION_TWEAK_VERSION_GIT_H
+#define _VMBCPP_VERSION_TWEAK_VERSION_GIT_H
+#define VMBCPP_VERSION_TWEAK 0
+#endif
diff --git a/VimbaX/api/source/VmbCPP/VmbCPP.rc b/VimbaX/api/source/VmbCPP/VmbCPP.rc
new file mode 100644
index 0000000000000000000000000000000000000000..ef652db343ea24acef3e53491dd08033716086a9
Binary files /dev/null and b/VimbaX/api/source/VmbCPP/VmbCPP.rc differ
diff --git a/VimbaX/api/source/VmbCPP/VmbSystem.cpp b/VimbaX/api/source/VmbCPP/VmbSystem.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9b880e51b36d8f57085940f3a7f8c05677e29904
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/VmbSystem.cpp
@@ -0,0 +1,1540 @@
+/*=============================================================================
+  Copyright (C) 2012-2022 Allied Vision Technologies.  All Rights Reserved.
+
+  Redistribution of this file, in original or modified form, without
+  prior written consent of Allied Vision Technologies is prohibited.
+
+-------------------------------------------------------------------------------
+ 
+  File:        VmbSystem.cpp
+
+  Description: Implementation of class VmbCPP::VmbSystem.
+
+-------------------------------------------------------------------------------
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+
+=============================================================================*/
+
+#include <algorithm>
+#include <cstring>
+#include <functional>
+#include <new>
+#include <string>
+#include <vector>
+
+#include <VmbCPP/VmbSystem.h>
+
+#include <VmbCPP/SharedPointerDefines.h>
+
+#include "ConditionHelper.h"
+#include "CopyUtils.hpp"
+#include "Clock.h"
+#include "DefaultCameraFactory.h"
+#include "Helper.h"
+#include "Version.h"
+
+
+namespace VmbCPP {
+
+typedef std::map<std::string, CameraPtr> CameraPtrMap;
+typedef std::map<VmbHandle_t, InterfacePtr> InterfacePtrMap;
+typedef std::map<VmbHandle_t, TransportLayerPtr> TransportLayerPtrMap; // {Transport Layer Handle, TransportLayerPtr}
+
+typedef std::vector<IInterfaceListObserverPtr> IInterfaceListObserverPtrVector;
+typedef std::vector<ICameraListObserverPtr> ICameraListObserverPtrVector;
+
+/**
+* \brief Internal information about found system modules, registered observers etc.
+*/
+struct VmbSystem::Impl
+{
+    // Found transport layers, cameras and interfaces
+    TransportLayerPtrMap                            m_transportLayers;
+    LockableMap<std::string, CameraPtr>             m_cameras;                      //<! Map with available cameras, uses extended camera ID as the key
+    ConditionHelper                                 m_camerasConditionHelper;
+    LockableMap<VmbHandle_t, InterfacePtr>          m_interfaces;
+    ConditionHelper                                 m_interfacesConditionHelper;
+    // Registered observers
+    LockableVector<ICameraListObserverPtr>          m_cameraObservers;
+    ConditionHelper                                 m_cameraObserversConditionHelper;
+    LockableVector<IInterfaceListObserverPtr>       m_interfaceObservers;
+    ConditionHelper                                 m_interfaceObserversConditionHelper;
+    
+    // CameraFactory
+    ICameraFactoryPtr                               m_pCameraFactory;
+
+    // Logger
+    Logger*                                         m_pLogger { nullptr};
+
+    VmbErrorType UpdateCameraList();
+    VmbErrorType UpdateInterfaceList();
+    VmbErrorType AppendCamToMap( VmbCameraInfo_t const& camInfo );
+
+    /**
+     * \brief creates a new camera without inserting it into the map
+     * 
+     * \return a null pointer, if not successful, the pointer to the new object otherwise
+     */
+    CameraPtr CreateNewCamera(VmbCameraInfo_t const& camInfo)
+    {
+        InterfacePtr             pInterface;
+        if (VmbErrorSuccess == GetInterfaceByHandle(camInfo.interfaceHandle, pInterface))
+        {
+            // TODO: Remove pCam with Interface change
+            return SP_ACCESS(m_pCameraFactory)->CreateCamera(camInfo,
+                                                             pInterface);
+        }
+        
+        return CameraPtr();
+    }
+
+    bool IsIPAddress( const char *pStrID );
+
+    VmbErrorType GetInterfaceList(std::vector<VmbInterfaceInfo_t>& interfaceInfos);
+    VmbErrorType GetInterfaceByHandle(VmbHandle_t pHandle, InterfacePtr& pInterface);
+    
+    /**
+    * \brief Saves the available transport layers into internal map m_transportLayers,
+    *        this will be done just once in Startup() and then stay stable the whole session.
+    */
+    VmbErrorType SetTransportLayerList() noexcept;
+
+    /** 
+    * \brief    A look-up in the InterfacePtrMap for a specified strID
+    *           No read lock inside!
+    */
+    VmbErrorType GetInterfaceByID(const std::string &strID, InterfacePtr& pInterface);
+
+
+    VmbErrorType GetInterfacesByTL(const TransportLayer* pTransportLayer, InterfacePtr* pInterfaces, VmbUint32_t& size);
+    VmbErrorType GetCamerasByTL(const TransportLayer* pTransportLayer, CameraPtr* pCameras, VmbUint32_t& size);
+    VmbErrorType GetCamerasByInterface(const Interface* pInterface, CameraPtr* pCameras, VmbUint32_t& size);
+
+    static void VMB_CALL CameraDiscoveryCallback( const VmbHandle_t handle, const char *name, void *context );
+    static void VMB_CALL InterfaceDiscoveryCallback( const VmbHandle_t handle, const char *name, void *context );
+};
+
+VmbSystem &VmbSystem::GetInstance() noexcept
+{
+    return _instance;
+}
+
+VmbErrorType VmbSystem::QueryVersion( VmbVersionInfo_t &rVersion ) const noexcept
+{
+    rVersion.major = VMBCPP_VERSION_MAJOR;
+    rVersion.minor = VMBCPP_VERSION_MINOR;
+    rVersion.patch = VMBCPP_VERSION_PATCH;
+
+    return VmbErrorSuccess;
+}
+
+VmbErrorType VmbSystem::Startup(const VmbFilePathChar_t* pathConfiguration)
+{
+    VmbError_t res = VmbErrorSuccess;
+
+    res = VmbStartup(pathConfiguration);
+    if ( VmbErrorSuccess == res )
+    {
+        // save the transport layers in the internal map
+        res = m_pImpl->SetTransportLayerList();
+
+        SetHandle( gVmbHandle );
+    }
+
+    return (VmbErrorType)res;
+}
+
+VmbErrorType VmbSystem::Startup()
+{
+    return Startup(nullptr);
+}
+
+
+VmbErrorType VmbSystem::Shutdown()
+{    
+    // Begin exclusive write lock camera observer list
+    if ( true == m_pImpl->m_cameraObserversConditionHelper.EnterWriteLock( m_pImpl->m_cameraObservers, true ))
+    {
+        m_pImpl->m_cameraObservers.Vector.clear();
+
+        // End write lock camera observer list
+        m_pImpl->m_cameraObserversConditionHelper.ExitWriteLock( m_pImpl->m_cameraObservers );
+    }
+        
+    // Begin exclusive write lock interface observer list
+    if ( true == m_pImpl->m_interfaceObserversConditionHelper.EnterWriteLock( m_pImpl->m_interfaceObservers, true ))
+    {
+        m_pImpl->m_interfaceObservers.Vector.clear();
+
+        // End write lock interface observer list
+        m_pImpl->m_interfaceObserversConditionHelper.ExitWriteLock( m_pImpl->m_interfaceObservers );
+    }    
+
+    // Begin exclusive write lock camera list
+    if ( true == m_pImpl->m_camerasConditionHelper.EnterWriteLock( m_pImpl->m_cameras, true ))
+    {
+        for (   CameraPtrMap::iterator iter = m_pImpl->m_cameras.Map.begin();
+                m_pImpl->m_cameras.Map.end() != iter;
+                ++iter)
+        {
+            SP_ACCESS( iter->second )->Close();
+        }
+        m_pImpl->m_cameras.Map.clear();
+
+        // End write lock camera list
+        m_pImpl->m_camerasConditionHelper.ExitWriteLock( m_pImpl->m_cameras );
+    }    
+
+    // Begin exclusive write lock interface list
+    if ( true == m_pImpl->m_interfacesConditionHelper.EnterWriteLock( m_pImpl->m_interfaces, true ))
+    {
+        m_pImpl->m_interfaces.Map.clear();
+
+        // End write lock interface list
+        m_pImpl->m_interfacesConditionHelper.ExitWriteLock( m_pImpl->m_interfaces );
+    }    
+    m_pImpl->m_transportLayers.clear();
+    VmbShutdown();
+    
+    return VmbErrorSuccess;
+}
+
+VmbErrorType VmbSystem::GetInterfaces( InterfacePtr *pInterfaces, VmbUint32_t &rnSize )
+{
+    // update m_interfaces (using write lock)
+    VmbErrorType res = m_pImpl->UpdateInterfaceList();
+
+    if (VmbErrorSuccess == res)
+    {
+        // Begin read lock interface list
+        if (true == m_pImpl->m_interfacesConditionHelper.EnterReadLock(m_pImpl->m_interfaces))
+        {
+            if (nullptr == pInterfaces)
+            {
+                rnSize = (VmbUint32_t)m_pImpl->m_interfaces.Map.size();
+                res = VmbErrorSuccess;
+            }
+            else if (m_pImpl->m_interfaces.Map.size() <= rnSize)
+            {
+                VmbUint32_t i = 0;
+                for (InterfacePtrMap::iterator iter = m_pImpl->m_interfaces.Map.begin();
+                    m_pImpl->m_interfaces.Map.end() != iter;
+                    ++iter, ++i)
+                {
+                    pInterfaces[i] = iter->second;
+                }
+                rnSize = (VmbUint32_t)m_pImpl->m_interfaces.Map.size();
+                res = VmbErrorSuccess;
+            }
+            else
+            {
+                res = VmbErrorMoreData;
+            }
+            // End read lock interface list
+            m_pImpl->m_interfacesConditionHelper.ExitReadLock(m_pImpl->m_interfaces);
+        }
+        else
+        {
+            LOG_FREE_TEXT("Could not lock interface list")
+        }
+    }
+    return res;
+}
+
+VmbErrorType VmbSystem::Impl::GetInterfaceByHandle(VmbHandle_t pHandle, InterfacePtr& rInterface)
+{
+    if ( nullptr == pHandle)
+    {
+        return VmbErrorBadParameter;
+    }
+    VmbErrorType res = VmbErrorNotFound;
+
+    // Begin read lock interface list
+    if (true == m_interfacesConditionHelper.EnterReadLock(m_interfaces))
+    {
+        InterfacePtrMap::iterator iter = m_interfaces.Map.find(pHandle);
+        if (m_interfaces.Map.end() != iter)
+        {
+            rInterface = iter->second;
+            // End read lock interface list
+            m_interfacesConditionHelper.ExitReadLock(m_interfaces);
+            return VmbErrorSuccess;
+        }
+
+        // End read lock interface list
+        m_interfacesConditionHelper.ExitReadLock(m_interfaces);
+    
+        // update m_interfaces (using write lock)
+        res = UpdateInterfaceList();
+
+        // Begin read lock interface list
+        if (true == m_interfacesConditionHelper.EnterReadLock(m_interfaces))
+        {
+            if (VmbErrorSuccess == res)
+            {
+                // New attempt to find interface in the map
+                InterfacePtrMap::iterator iter = m_interfaces.Map.find(pHandle);
+                if (m_interfaces.Map.end() != iter)
+                {
+                    rInterface = iter->second;
+                }
+                else
+                {
+                    res = VmbErrorNotFound;
+                }
+            }
+            // End read lock interface list
+            m_interfacesConditionHelper.ExitReadLock(m_interfaces);
+        }
+        else
+        {
+            LOG_FREE_TEXT("Could not lock interface list")
+        }
+    }
+    else
+    {
+        LOG_FREE_TEXT("Could not lock interface list")
+    }
+    return res;
+}
+
+//VmbErrorType VmbSystem::Impl::GetInterfaceByHandle(VmbHandle_t pHandle, InterfacePtr& rInterface)
+VmbErrorType VmbSystem::GetInterfaceByID( const char *pStrID, InterfacePtr &rInterface )
+{
+    if (nullptr == pStrID)
+    {
+        return VmbErrorBadParameter;
+    }
+    VmbErrorType res = VmbErrorNotFound;
+
+    // Begin read lock interface list
+    if (true == m_pImpl->m_interfacesConditionHelper.EnterReadLock(m_pImpl->m_interfaces))
+    {
+        res = m_pImpl->GetInterfaceByID(pStrID, rInterface);
+        if (VmbErrorSuccess == res)
+        {
+            // End read lock interface list
+            m_pImpl->m_interfacesConditionHelper.ExitReadLock(m_pImpl->m_interfaces);
+            return VmbErrorSuccess;
+        }
+
+        // End read lock interface list
+        m_pImpl->m_interfacesConditionHelper.ExitReadLock(m_pImpl->m_interfaces);
+    
+        // update m_interfaces (using write lock)
+        res = m_pImpl->UpdateInterfaceList();
+        if (VmbErrorSuccess == res)
+        {
+            // Begin read lock interface list
+            if (true == m_pImpl->m_interfacesConditionHelper.EnterReadLock(m_pImpl->m_interfaces))
+            {
+                // New attempt to find interface in the map
+                res = m_pImpl->GetInterfaceByID(pStrID, rInterface);
+            
+                // End read lock interface list
+                m_pImpl->m_interfacesConditionHelper.ExitReadLock(m_pImpl->m_interfaces);
+            }
+            else
+            {
+                LOG_FREE_TEXT("Could not lock interface list")
+            }
+        }
+    }
+    else
+    {
+        LOG_FREE_TEXT("Could not lock interface list")
+    }
+    return res;
+}
+
+VmbErrorType VmbSystem::GetCameras( CameraPtr *pCameras, VmbUint32_t &rnSize )
+{
+    VmbErrorType res = VmbErrorInternalFault;
+
+    // Begin write lock camera list
+    if ( true == m_pImpl->m_camerasConditionHelper.EnterWriteLock( m_pImpl->m_cameras ))
+    {
+        res = m_pImpl->UpdateCameraList();
+
+        if ( VmbErrorSuccess == res )
+        {
+            if ( nullptr == pCameras )
+            {
+                rnSize = (VmbUint32_t)m_pImpl->m_cameras.Map.size();
+                res = VmbErrorSuccess;
+            }
+            else if ( m_pImpl->m_cameras.Map.size() <= rnSize )
+            {
+                VmbUint32_t i = 0;
+                for (   CameraPtrMap::iterator iter = m_pImpl->m_cameras.Map.begin();
+                        m_pImpl->m_cameras.Map.end() != iter;
+                        ++iter, ++i )
+                {
+                    pCameras[i] = iter->second;
+                }
+                rnSize = (VmbUint32_t)m_pImpl->m_cameras.Map.size();
+                res = VmbErrorSuccess;
+            }
+            else
+            {
+                res = VmbErrorMoreData;
+            }
+        }
+
+        // End write lock camera list
+        m_pImpl->m_camerasConditionHelper.ExitWriteLock( m_pImpl->m_cameras );
+    }    
+
+    return res;
+}
+
+VmbErrorType VmbSystem::GetCameraByID( const char *pStrID, CameraPtr &rCamera )
+{
+    if ( nullptr == pStrID )
+    {
+        return VmbErrorBadParameter;
+    }
+
+    VmbError_t res = VmbErrorNotFound;
+
+    // Begin write lock camera list
+    if ( true == m_pImpl->m_camerasConditionHelper.EnterWriteLock( m_pImpl->m_cameras ))
+    {
+        // Try to identify the desired camera by its ID (in the list of known cameras)
+        CameraPtrMap::iterator iter = m_pImpl->m_cameras.Map.find( pStrID );
+        if ( m_pImpl->m_cameras.Map.end() != iter )
+        {
+            rCamera = iter->second;
+            res = VmbErrorSuccess;
+        }
+        else
+        {
+            VmbCameraInfo_t camInfo;
+            res = VmbCameraInfoQuery( pStrID, &camInfo, sizeof(camInfo));
+            if ( VmbErrorSuccess == res )
+            {
+                iter = m_pImpl->m_cameras.Map.find( camInfo.cameraIdExtended );
+                if ( m_pImpl->m_cameras.Map.end() != iter )
+                {
+                    rCamera = iter->second;
+                }
+                else
+                {
+                    res = m_pImpl->AppendCamToMap( camInfo );
+
+                    if (res == VmbErrorSuccess)
+                    {
+                        iter = m_pImpl->m_cameras.Map.find(camInfo.cameraIdExtended);
+                        if (m_pImpl->m_cameras.Map.end() != iter)
+                        {
+                            rCamera = iter->second;
+                        }
+                        else
+                        {
+                            res = VmbErrorNotFound;
+                        }
+                    }
+                }
+            }
+        }
+
+        // End write lock camera list
+        m_pImpl->m_camerasConditionHelper.ExitWriteLock( m_pImpl->m_cameras );
+    }
+
+    return (VmbErrorType)res;
+}
+
+VmbErrorType VmbSystem::OpenCameraByID( const char *pStrID, VmbAccessModeType eAccessMode, CameraPtr &rCamera )
+{
+    if ( nullptr == pStrID )
+    {
+        return VmbErrorBadParameter;
+    }
+
+    VmbErrorType res = GetCameraByID( pStrID, rCamera );
+    if ( VmbErrorSuccess == res )
+    {
+        return SP_ACCESS( rCamera )->Open( eAccessMode );
+    }
+
+    return res;
+}
+
+CameraPtr VmbSystem::GetCameraPtrByHandle( const VmbHandle_t handle ) const
+{
+    CameraPtr res;
+
+    // Begin read lock camera list
+    if ( true == m_pImpl->m_camerasConditionHelper.EnterReadLock( m_pImpl->m_cameras ) )
+    {
+        for (   CameraPtrMap::const_iterator iter = m_pImpl->m_cameras.Map.begin();
+                m_pImpl->m_cameras.Map.end() != iter;
+                ++iter)
+        {
+            if ( SP_ACCESS( iter->second )->GetHandle() == handle )
+            {
+                res = iter->second;
+                break;
+            }
+        }
+
+        // End read lock camera list
+        m_pImpl->m_camerasConditionHelper.ExitReadLock( m_pImpl->m_cameras );
+    }
+    else
+    {
+        LOG_FREE_TEXT( "Could not lock camera list")
+    }
+
+    return res;
+}
+
+
+VmbErrorType VmbSystem::Impl::GetInterfacesByTL( const TransportLayer *pTransportLayer, InterfacePtr *pInterfaces, VmbUint32_t &rnSize )
+{
+    // update m_interfaces (using write lock)
+    VmbErrorType res = UpdateInterfaceList();
+    if (VmbErrorSuccess != res)
+    {
+        return res;
+    }
+    // Begin read lock interface list
+    if (true ==m_interfacesConditionHelper.EnterReadLock(m_interfaces))
+    {
+        if (nullptr == pInterfaces)
+        {
+            rnSize = (VmbUint32_t)m_interfaces.Map.size();
+            res = VmbErrorSuccess;
+        }
+        else if (m_interfaces.Map.size() <= rnSize)
+        {
+            VmbUint32_t foundCnt = 0;  // counter for matching items
+
+            for (InterfacePtrMap::iterator iter = m_interfaces.Map.begin();
+                m_interfaces.Map.end() != iter;
+                ++iter)
+            {
+                InterfacePtr tmpInterface = iter->second;
+                TransportLayerPtr tmpTransportLayer;
+                if (VmbErrorSuccess == SP_ACCESS(tmpInterface)->GetTransportLayer(tmpTransportLayer))
+                {
+                    if ( pTransportLayer->GetHandle() == SP_ACCESS(tmpTransportLayer)->GetHandle() ) {
+                        pInterfaces[foundCnt++] = tmpInterface;
+                    }
+                }
+                else
+                {
+                    res = VmbErrorInternalFault;
+                }
+            }
+            rnSize = foundCnt;  // the real number of items in the returned list
+        }
+        else
+        {
+            res = VmbErrorMoreData;
+        }
+        // End read lock interface list
+        m_interfacesConditionHelper.ExitReadLock(m_interfaces);
+    }
+    else
+    {
+        LOG_FREE_TEXT("Could not lock interface list")
+    }
+    return res;
+}
+
+VmbErrorType VmbSystem::Impl::GetCamerasByTL(const TransportLayer* pTransportLayer, CameraPtr* pCameras, VmbUint32_t& rnSize)
+{
+    VmbErrorType res = VmbErrorNotFound;
+
+    // Begin write lock camera list
+    if (true == m_camerasConditionHelper.EnterWriteLock(m_cameras))
+    {
+        res = UpdateCameraList();
+        if (VmbErrorSuccess == res)
+        {
+        if (nullptr == pCameras)
+            {
+            rnSize = (VmbUint32_t)m_cameras.Map.size();
+            res = VmbErrorSuccess;
+        }
+        else if (m_cameras.Map.size() <= rnSize)
+        {
+            VmbUint32_t foundCnt = 0;  // counter for matching items
+
+            for (CameraPtrMap::iterator iter = m_cameras.Map.begin();
+                m_cameras.Map.end() != iter;
+                ++iter)
+            {
+                CameraPtr tmpCamera = iter->second;
+                TransportLayerPtr tmpTransportLayer;
+                    if (VmbErrorSuccess == SP_ACCESS(tmpCamera)->GetTransportLayer(tmpTransportLayer))
+                {
+                    if (pTransportLayer->GetHandle() == SP_ACCESS(tmpTransportLayer)->GetHandle()) {
+                        pCameras[foundCnt++] = tmpCamera;
+                    }
+                }
+                else
+                {
+                    res = VmbErrorInternalFault;
+                }
+            }
+            rnSize = foundCnt;  // the real number of items in the returned list
+        }
+        else
+        {
+            res = VmbErrorMoreData;
+        }
+        }
+        // End write lock camera list
+        m_camerasConditionHelper.ExitWriteLock(m_cameras);
+    }
+    else
+    {
+        LOG_FREE_TEXT("Could not lock camera list")        
+    }
+
+    return res;
+}
+
+VmbErrorType VmbSystem::Impl::GetCamerasByInterface(const Interface* pInterface, CameraPtr* pCameras, VmbUint32_t& rnSize)
+{
+    VmbErrorType res = VmbErrorNotFound;
+
+    // Begin write lock camera list
+    if (true == m_camerasConditionHelper.EnterWriteLock(m_cameras))
+    {
+        res = UpdateCameraList();
+        if (VmbErrorSuccess == res)
+        {
+        if (nullptr == pCameras)
+        {
+            rnSize = (VmbUint32_t)m_cameras.Map.size();
+            res = VmbErrorSuccess;
+        }
+        else if (m_cameras.Map.size() <= rnSize)
+        {
+            VmbUint32_t foundCnt = 0;  // counter for matching items
+
+                for (CameraPtrMap::iterator iter = m_cameras.Map.begin();
+                m_cameras.Map.end() != iter;
+                ++iter)
+            {
+                CameraPtr tmpCamera = iter->second;
+                InterfacePtr tmpInterface;
+                if (VmbErrorSuccess == SP_ACCESS(tmpCamera)->GetInterface(tmpInterface))
+                {
+                    if (pInterface->GetHandle() == SP_ACCESS(tmpInterface)->GetHandle()) {
+                        pCameras[foundCnt++] = tmpCamera;
+                    }
+                }
+                else
+                {
+                    res = VmbErrorInternalFault;
+                }
+            }
+            rnSize = foundCnt;  // the real number of items in the returned list
+        }
+        else
+        {
+            res = VmbErrorMoreData;
+        }
+        }
+        // End write lock camera list
+        m_camerasConditionHelper.ExitWriteLock(m_cameras);
+    }
+    else
+    {
+        LOG_FREE_TEXT("Could not lock camera list")
+    }
+
+    return res;
+}
+
+VmbErrorType VmbSystem::GetTransportLayers( TransportLayerPtr *pTransportLayers, VmbUint32_t &rnSize ) noexcept
+{
+    return CopyMapValuesToBuffer(m_pImpl->m_transportLayers, pTransportLayers, rnSize);
+}
+
+VmbErrorType VmbSystem::GetTransportLayerByID( const char *pStrID, TransportLayerPtr &rTransportLayer )
+{
+    if ( nullptr == pStrID )
+    {
+        return VmbErrorBadParameter;
+    }
+
+    VmbErrorType res = VmbErrorNotFound;
+    // iterate through the map comparing the TL-ID's
+    for(auto iter = m_pImpl->m_transportLayers.begin(); iter != m_pImpl->m_transportLayers.end(); ++iter) {
+        std::string tmpStrID;
+        res = SP_ACCESS(iter->second)->GetID(tmpStrID);
+        if ( tmpStrID == std::string(pStrID) )
+        {
+            rTransportLayer = iter->second;
+            res = VmbErrorSuccess;
+            break;
+        }
+    }
+
+    return res;
+}
+
+void VMB_CALL VmbSystem::Impl::CameraDiscoveryCallback( const VmbHandle_t pHandle, const char* /*name*/, void* /*context*/ )
+{
+    VmbError_t err;
+    std::string cameraId;
+    VmbUint32_t nCount = 0;
+    
+    err = VmbFeatureStringGet(pHandle, "EventCameraDiscoveryCameraID", nullptr, nCount, &nCount);
+    if (0 < nCount && VmbErrorSuccess == err)
+    {
+        std::vector<char> strID(nCount);
+        err = VmbFeatureStringGet(pHandle, "EventCameraDiscoveryCameraID", &strID[0], nCount, &nCount);
+        if (VmbErrorSuccess == err)
+        {
+            cameraId = &*strID.begin();
+        }
+    }
+
+    if ( VmbErrorSuccess == err )
+    {
+        UpdateTriggerType reason = UpdateTriggerPluggedIn;
+        const char* pReason = nullptr;
+
+        // Get the reason that has triggered the callback
+        err = VmbFeatureEnumGet(pHandle, "EventCameraDiscoveryType", &pReason );
+        if ( VmbErrorSuccess == err )
+        {
+            if (std::strcmp(pReason, "Missing") == 0)
+            {
+                reason = UpdateTriggerPluggedOut;
+            }
+            else if (std::strcmp(pReason, "Detected") == 0)
+            {
+                reason = UpdateTriggerPluggedIn;
+            }
+            else
+            {
+                reason = UpdateTriggerOpenStateChanged;
+            }
+                    
+            // Begin read lock camera list
+            if ( true == _instance.m_pImpl->m_camerasConditionHelper.EnterReadLock( _instance.m_pImpl->m_cameras ))
+            {
+                // will only find the entry if EventCameraDiscoveryCameraID returns the extended ID
+                CameraPtrMap::iterator iter = _instance.m_pImpl->m_cameras.Map.find( cameraId );
+                CameraPtr pCam;
+
+                bool bFound;
+
+                // Was the camera known before?
+                if ( _instance.m_pImpl->m_cameras.Map.end() != iter )
+                {
+                    bFound = true;
+                    pCam = iter->second;
+                }
+                else
+                {
+                    bFound = false;
+
+                    // As long as EventCameraDiscoveryCameraID will return the regular ID and not the extended one,
+                    // we need to compare every entry entry in the camera map (which uses the extended ID as key)
+                    for (auto& cameraMapEntry : _instance.m_pImpl->m_cameras.Map)
+                    {
+                        std::string currentCamId;
+                        if (VmbErrorSuccess == cameraMapEntry.second->GetID(currentCamId)
+                            && currentCamId == cameraId)
+                        {
+                            bFound = true;
+                        }
+                    }                        
+                }
+
+                // End read lock camera list
+                _instance.m_pImpl->m_camerasConditionHelper.ExitReadLock( _instance.m_pImpl->m_cameras );
+
+                // If the camera was not known before we query for it
+                if ( false == bFound )
+                {
+                    err = _instance.GetCameraByID( cameraId.c_str(), pCam );
+                    if ( VmbErrorSuccess != err )
+                    {
+                        err = VmbErrorInternalFault;
+                        LOG_FREE_TEXT( "Could not find a known camera in camera list")
+                    }
+                }
+
+                // Now that we know about the reason for the callback and the camera we can call all registered observers
+                if ( VmbErrorSuccess == err )
+                {
+                    // Begin read lock camera observer list
+                    if ( true == _instance.m_pImpl->m_cameraObserversConditionHelper.EnterReadLock( _instance.m_pImpl->m_cameraObservers ))
+                    {
+                        for (   ICameraListObserverPtrVector::iterator iter = _instance.m_pImpl->m_cameraObservers.Vector.begin();
+                                _instance.m_pImpl->m_cameraObservers.Vector.end() != iter;
+                                ++iter )
+                        {
+                            SP_ACCESS(( *iter ))->CameraListChanged( pCam, reason );
+                        }
+
+                        // End read lock camera observer list
+                        _instance.m_pImpl->m_cameraObserversConditionHelper.ExitReadLock( _instance.m_pImpl->m_cameraObservers );
+                    }
+                    else
+                    {
+                        LOG_FREE_TEXT( "Could not lock camera observer list")
+                    }
+                }
+            }
+            else
+            {
+                LOG_FREE_TEXT( "Could not lock camera list")
+            }
+        }
+        else
+        {
+            LOG_FREE_TEXT( "Could not get callback trigger" )
+        }
+    }
+    else
+    {
+        LOG_FREE_TEXT( "Could not get camera ID" )
+    }
+}
+
+void VMB_CALL VmbSystem::Impl::InterfaceDiscoveryCallback( const VmbHandle_t pHandle, const char* /*name*/, void* /*context*/)
+{
+    VmbError_t err;
+    std::string interfaceID;
+    VmbUint32_t nCount = 0;
+
+    // Get the ID of the interface that has triggered the callback
+    err = VmbFeatureStringGet(pHandle, "EventInterfaceDiscoveryInterfaceID", nullptr, nCount, &nCount);
+    if (0 < nCount && VmbErrorSuccess == err)
+    {
+        std::vector<char> strID(nCount);
+        err = VmbFeatureStringGet(pHandle, "EventInterfaceDiscoveryInterfaceID", &strID[0], nCount, &nCount);
+        if (VmbErrorSuccess == err)
+        {
+            interfaceID = &*strID.begin();
+        }
+    }
+
+    if ( VmbErrorSuccess == err )
+    {
+        // Begin read lock interface list
+        if ( true == _instance.m_pImpl->m_interfacesConditionHelper.EnterReadLock( _instance.m_pImpl->m_interfaces ))
+        {
+            InterfacePtr pInterface;
+            bool bFoundBeforeUpdate = _instance.m_pImpl->GetInterfaceByID(interfaceID, pInterface) == VmbErrorSuccess;
+
+            // End read lock interface list
+            _instance.m_pImpl->m_interfacesConditionHelper.ExitReadLock( _instance.m_pImpl->m_interfaces );
+                        
+            err = _instance.m_pImpl->UpdateInterfaceList();
+                            
+            if ( VmbErrorSuccess == err )
+            {
+                // Begin read lock interface list
+                if ( true == _instance.m_pImpl->m_interfacesConditionHelper.EnterReadLock( _instance.m_pImpl->m_interfaces ))
+                {
+                    UpdateTriggerType reason = UpdateTriggerPluggedIn;
+                    InterfacePtr pInterface2;
+                    bool bFoundAfterUpdate = _instance.m_pImpl->GetInterfaceByID(interfaceID, pInterface2) == VmbErrorSuccess;
+
+                    // The interface was known before
+                    if ( true == bFoundBeforeUpdate )
+                    {
+                        // The interface now has been removed
+                        if ( false == bFoundAfterUpdate )
+                        {
+                            reason = UpdateTriggerPluggedOut;
+                        }
+                        else
+                        {
+                            reason = UpdateTriggerOpenStateChanged;
+                        }
+                    }
+                    // The interface is new
+                    else
+                    {
+                        if ( true == bFoundAfterUpdate)
+                        {
+                            pInterface = pInterface2;
+                            reason = UpdateTriggerPluggedIn;
+                        }
+                        else
+                        {
+                            err = VmbErrorInternalFault;
+                            // Do some logging
+                            LOG_FREE_TEXT( "Could not find interface in interface list." )
+                        }
+                    }
+
+                    // End read lock interface list
+                    _instance.m_pImpl->m_interfacesConditionHelper.ExitReadLock( _instance.m_pImpl->m_interfaces );
+
+                    if ( VmbErrorSuccess == err )
+                    {
+                        // Begin read lock interface observer list
+                        if ( true == _instance.m_pImpl->m_interfaceObserversConditionHelper.EnterReadLock( _instance.m_pImpl->m_interfaceObservers ))
+                        {
+                            for (   IInterfaceListObserverPtrVector::iterator iter = _instance.m_pImpl->m_interfaceObservers.Vector.begin();
+                                _instance.m_pImpl->m_interfaceObservers.Vector.end() != iter;
+                                ++iter)
+                            {
+                                SP_ACCESS(( *iter ))->InterfaceListChanged( pInterface, reason );
+                            }
+
+                            // End read lock interface observer list
+                            _instance.m_pImpl->m_interfaceObserversConditionHelper.ExitReadLock( _instance.m_pImpl->m_interfaceObservers );
+                        }
+                        else
+                        {
+                            LOG_FREE_TEXT( "Could not lock interface observer list")
+                        }
+                    }                        
+                }
+                else
+                {
+                    LOG_FREE_TEXT( "Could not lock interface list")
+                }
+            }                
+        }            
+        
+    }
+}
+
+VmbErrorType VmbSystem::RegisterCameraListObserver( const ICameraListObserverPtr &rObserver )
+{
+    if ( SP_ISNULL( rObserver ))
+    {
+        return VmbErrorBadParameter;
+    }
+
+    VmbError_t res = VmbErrorSuccess;
+
+    // Begin write lock camera observer list
+    if ( true == _instance.m_pImpl->m_cameraObserversConditionHelper.EnterWriteLock( m_pImpl->m_cameraObservers ))
+    {
+        // The very same observer cannot be registered twice
+        for ( size_t i=0; i<m_pImpl->m_cameraObservers.Vector.size(); ++i )
+        {
+            if ( SP_ISEQUAL( rObserver, m_pImpl->m_cameraObservers.Vector[i] ))
+            {
+                res = VmbErrorInvalidCall;
+                break;
+            }
+        }
+
+        if ( VmbErrorSuccess == res )
+        {
+            m_pImpl->m_cameraObservers.Vector.push_back( rObserver );
+
+            // first camera observer is registered
+            if ( 1 == m_pImpl->m_cameraObservers.Vector.size() )
+            {
+                // make sure camera list is initialized (to be able to detect missing cameras correctly)
+                if (true == m_pImpl->m_camerasConditionHelper.EnterWriteLock(m_pImpl->m_cameras))
+                {
+                    if(VmbErrorSuccess != m_pImpl->UpdateCameraList())
+                    {
+                        LOG_FREE_TEXT("Could not update camera list")
+                    }
+
+                    m_pImpl->m_camerasConditionHelper.ExitWriteLock(m_pImpl->m_cameras);
+                }
+                else
+                {
+                    LOG_FREE_TEXT("Could not lock camera list")
+                }
+
+                // enable camera discovery events at supervisor
+                res = VmbFeatureEnumSet(gVmbHandle, "EventSelector", "CameraDiscovery");
+
+                if (VmbErrorSuccess == res)
+                {
+                    res = VmbFeatureEnumSet(gVmbHandle, "EventNotification", "On");
+
+                    if (VmbErrorSuccess == res)
+                    {
+                        res = VmbFeatureInvalidationRegister(gVmbHandle, "EventCameraDiscovery", m_pImpl->CameraDiscoveryCallback, nullptr);
+                    }
+                }
+                
+                if ( VmbErrorSuccess != res )
+                {
+                    // Rollback
+                    m_pImpl->m_cameraObservers.Vector.pop_back();
+                    // Do some logging
+                    LOG_FREE_TEXT( "Could not register camera list observer" )
+                }
+            }
+        }
+
+        // End write lock camera observer list
+        _instance.m_pImpl->m_cameraObserversConditionHelper.ExitWriteLock( m_pImpl->m_cameraObservers );
+    }    
+    
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType VmbSystem::UnregisterCameraListObserver( const ICameraListObserverPtr &rObserver )
+{
+    if ( SP_ISNULL( rObserver ))
+    {
+        return VmbErrorBadParameter;
+    }
+
+    VmbError_t res = VmbErrorNotFound;
+
+    // Begin exclusive write lock camera observer list
+    if ( true == m_pImpl->m_cameraObserversConditionHelper.EnterWriteLock( m_pImpl->m_cameraObservers, true ))
+    {
+        for (   ICameraListObserverPtrVector::iterator iter = m_pImpl->m_cameraObservers.Vector.begin();
+                m_pImpl->m_cameraObservers.Vector.end() != iter;)    
+        {
+            if ( SP_ISEQUAL( rObserver, *iter ))
+            {
+                // If we are about to unregister the last observer we cancel all camera discovery notifications
+                if ( 1 == m_pImpl->m_cameraObservers.Vector.size() )
+                {
+                    res = VmbFeatureInvalidationUnregister( gVmbHandle, "EventCameraDiscovery", m_pImpl->CameraDiscoveryCallback );
+
+                    if (VmbErrorSuccess == res)
+                    {
+                        res = VmbFeatureEnumSet(gVmbHandle, "EventSelector", "CameraDiscovery");
+
+                        if (VmbErrorSuccess == res)
+                        {
+                            res = VmbFeatureEnumSet(gVmbHandle, "EventNotification", "Off");
+                        }
+                    }
+                }
+                
+                if (    VmbErrorSuccess == res
+                     || 1 < m_pImpl->m_cameraObservers.Vector.size() )
+                {
+                    iter = m_pImpl->m_cameraObservers.Vector.erase( iter );
+                    res = VmbErrorSuccess;
+                }
+                break;
+            }
+            else
+            {
+                ++iter;
+            }
+        }
+
+        // End write lock camera observer list
+        m_pImpl->m_cameraObserversConditionHelper.ExitWriteLock( m_pImpl->m_cameraObservers );
+    }
+    else
+    {
+        LOG_FREE_TEXT( "Could not lock camera observer list.")
+        res = VmbErrorInternalFault;
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType VmbSystem::RegisterInterfaceListObserver( const IInterfaceListObserverPtr &rObserver )
+{
+    if ( SP_ISNULL( rObserver ))
+    {
+        return VmbErrorBadParameter;
+    }
+
+    VmbError_t res = VmbErrorSuccess;
+
+    // Begin write lock interface observer list
+    if ( true == _instance.m_pImpl->m_interfaceObserversConditionHelper.EnterWriteLock( m_pImpl->m_interfaceObservers ))
+    {
+        // The very same observer cannot be registered twice
+        for ( size_t i=0; i<m_pImpl->m_interfaceObservers.Vector.size(); ++i )
+        {
+            if ( SP_ISEQUAL( rObserver, m_pImpl->m_interfaceObservers.Vector[i] ))
+            {
+                res = VmbErrorInvalidCall;
+                break;
+            }
+        }
+
+        if ( VmbErrorSuccess == res )
+        {
+            m_pImpl->m_interfaceObservers.Vector.push_back( rObserver );
+
+            if ( 1 == m_pImpl->m_interfaceObservers.Vector.size() )
+            {
+                res = VmbFeatureEnumSet(gVmbHandle, "EventSelector", "InterfaceDiscovery");
+                
+                if (VmbErrorSuccess == res)
+                {
+                    res = VmbFeatureEnumSet(gVmbHandle, "EventNotification", "On");
+
+                    if (VmbErrorSuccess == res)
+                    {
+                        res = VmbFeatureInvalidationRegister(gVmbHandle, "EventInterfaceDiscovery", m_pImpl->InterfaceDiscoveryCallback, nullptr);
+                    }
+                }
+
+                if ( VmbErrorSuccess != res )
+                {
+                    // Rollback
+                    m_pImpl->m_interfaceObservers.Vector.pop_back();
+
+                    // Do some logging
+                    LOG_FREE_TEXT( "Could not register interface list observer" )
+                }
+            }
+        }
+
+        // End write lock interface observer list
+        _instance.m_pImpl->m_interfaceObserversConditionHelper.ExitWriteLock( m_pImpl->m_interfaceObservers );
+    }    
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType VmbSystem::UnregisterInterfaceListObserver( const IInterfaceListObserverPtr &rObserver )
+{
+    if ( SP_ISNULL( rObserver ))
+    {
+        return VmbErrorBadParameter;
+    }
+
+    VmbError_t res = VmbErrorNotFound;
+
+    // Begin exclusive write lock interface observer list
+    if ( true == _instance.m_pImpl->m_interfaceObserversConditionHelper.EnterWriteLock( m_pImpl->m_interfaceObservers, true ))
+    {
+        for (   IInterfaceListObserverPtrVector::iterator iter = m_pImpl->m_interfaceObservers.Vector.begin();
+                m_pImpl->m_interfaceObservers.Vector.end() != iter;)
+        {
+            if ( SP_ISEQUAL( rObserver, *iter ))
+            {
+                // If we are about to unregister the last observer we cancel all interface discovery notifications
+                if ( 1 == m_pImpl->m_interfaceObservers.Vector.size() )
+                {
+                    res = VmbFeatureInvalidationUnregister( gVmbHandle, "EventInterfaceDiscovery", m_pImpl->InterfaceDiscoveryCallback );
+
+                    if (VmbErrorSuccess == res)
+                    {
+                        res = VmbFeatureEnumSet(gVmbHandle, "EventSelector", "InterfaceDiscovery");
+
+                        if (VmbErrorSuccess == res)
+                        {
+                            res = VmbFeatureEnumSet(gVmbHandle, "EventNotification", "Off");
+                        }
+                    }
+                }
+                if (    VmbErrorSuccess == res
+                     || 1 < m_pImpl->m_interfaceObservers.Vector.size() )
+                {
+                    iter = m_pImpl->m_interfaceObservers.Vector.erase( iter );
+                    res = VmbErrorSuccess;
+                }
+                break;
+            }
+            else
+            {
+                ++iter;
+            }
+        }
+
+        // End write lock interface observer list
+        _instance.m_pImpl->m_interfaceObserversConditionHelper.ExitWriteLock( m_pImpl->m_interfaceObservers );
+    }
+    else
+    {
+        LOG_FREE_TEXT( "Could not lock interface observer list.")
+        res = VmbErrorInternalFault;
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType VmbSystem::RegisterCameraFactory( const ICameraFactoryPtr &cameraFactory )
+{
+    if ( SP_ISNULL( cameraFactory ))
+    {
+        return VmbErrorBadParameter;
+    }
+
+    m_pImpl->m_pCameraFactory = cameraFactory;
+    
+    return VmbErrorSuccess;
+}
+
+VmbErrorType VmbSystem::UnregisterCameraFactory()
+{
+    m_pImpl->m_pCameraFactory = ICameraFactoryPtr( new DefaultCameraFactory() );
+
+    if ( SP_ISNULL( m_pImpl->m_pCameraFactory ))
+    {
+        return VmbErrorInternalFault;
+    }
+
+    return VmbErrorSuccess;
+}
+
+// Singleton
+VmbSystem::VmbSystem()
+    :   m_pImpl( new Impl() )
+{
+    m_pImpl->m_pLogger = CreateLogger();
+    m_pImpl->m_pCameraFactory = ICameraFactoryPtr( new DefaultCameraFactory() );
+}
+
+VmbSystem::~VmbSystem()
+{
+    delete m_pImpl->m_pLogger;
+    m_pImpl->m_pLogger = nullptr;
+}
+
+// Instance
+VmbSystem VmbSystem::_instance;
+
+// Gets a list of all connected interfaces and updates the internal interfaces map accordingly.
+// Reference counting for removed interfaces is decreased,
+// new interfaces are added.
+VmbErrorType VmbSystem::Impl::UpdateInterfaceList()
+{
+    std::vector<VmbInterfaceInfo_t> interfaceInfos;
+    VmbErrorType res = GetInterfaceList( interfaceInfos );
+    VmbUint32_t nCount = (VmbUint32_t)interfaceInfos.size();
+
+    if ( VmbErrorSuccess == res )
+    {
+        // Begin write lock interface list
+        if (true == m_interfacesConditionHelper.EnterWriteLock(m_interfaces))
+        {
+            InterfacePtrMap::iterator iter = m_interfaces.Map.begin();
+            std::vector<VmbInterfaceInfo_t>::iterator iterInfo = interfaceInfos.begin();
+            bool bFound = false;
+
+            // Delete removed Interfaces from m_interfaces
+            while ( m_interfaces.Map.end() != iter )
+            {
+                for ( VmbUint32_t i=0; i<nCount; ++i, ++iterInfo )
+                {
+                    if ( iterInfo->interfaceIdString == iter->first )
+                    {
+                        bFound = true;
+                        break;
+                    }
+                }
+
+                if ( false == bFound )
+                {
+                    m_interfaces.Map.erase( iter++ );
+                }
+                else
+                {
+                    ++iter;
+                }
+
+                bFound = false;
+                iterInfo = interfaceInfos.begin();
+            }
+
+            // Add new Interfaces to m_Interfaces
+            while ( 0 < nCount-- )
+            {
+                iter = m_interfaces.Map.find( iterInfo->interfaceHandle );
+
+                if ( m_interfaces.Map.end() == iter )
+                {
+                    auto tlIter = m_transportLayers.find(iterInfo->transportLayerHandle);
+                    if (m_transportLayers.end() != tlIter)
+                    {
+                        TransportLayerPtr pTransportLayer = tlIter->second;
+                        Interface::GetCamerasByInterfaceFunction getCamerasFunc = std::bind(&VmbSystem::Impl::GetCamerasByInterface, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
+                        SP_SET(m_interfaces.Map[iterInfo->interfaceHandle], new Interface(*iterInfo, pTransportLayer, getCamerasFunc));
+                    }
+                    else
+                    {
+                        res = VmbErrorTLNotFound;
+                    }
+                }
+
+                ++iterInfo;
+            }
+            // End write lock interface list
+            m_interfacesConditionHelper.ExitWriteLock(m_interfaces);
+        }
+        else
+        {
+            LOG_FREE_TEXT("Could not lock interface list")
+        }
+    }
+    return res;
+}
+
+// Gets a list of all connected cameras and updates the internal cameras map accordingly.
+// Reference counting for removed cameras is decreased,
+// new cameras are added.
+VmbErrorType VmbSystem::Impl::UpdateCameraList()
+{
+    VmbError_t res = VmbErrorSuccess;
+    VmbUint32_t nCount = 0;
+
+    try
+    {
+        std::vector<VmbCameraInfo_t> cameraInfos( 10 );
+
+        // First get 10 cameras at most
+        res = VmbCamerasList( &cameraInfos[0], (VmbUint32_t)cameraInfos.size(), &nCount, sizeof(VmbCameraInfo_t) );
+        // If there are more get them eventually
+        // If even more new cameras were discovered in between the function calls we increase the allocated memory consecutively
+        while ( VmbErrorMoreData == res )
+        {
+            cameraInfos.resize( nCount );
+            res = VmbCamerasList( &cameraInfos[0], (VmbUint32_t)cameraInfos.size(), &nCount, sizeof(VmbCameraInfo_t) );
+        }
+
+        if ( VmbErrorSuccess == res )
+        {
+            if( 0 != nCount )
+            {
+                if( nCount < cameraInfos.size() )
+                {
+                    cameraInfos.resize( nCount );
+                }
+                CameraPtrMap::iterator  mapPos  = m_cameras.Map.begin();
+                typedef std::vector<VmbCameraInfo_t>::const_iterator const_info_iterator;
+
+                // Delete removed cameras from m_cameras
+                while ( m_cameras.Map.end() != mapPos )
+                {
+                    bool bFound = false;
+                    for( const_info_iterator infoPos = cameraInfos.begin(); cameraInfos.end() != infoPos; ++infoPos )
+                    {
+                        if ( infoPos->cameraIdExtended == mapPos->first )
+                        {
+                            bFound = true;
+                            break;
+                        }
+                    }
+
+                    if ( false == bFound )
+                    {
+                        m_cameras.Map.erase( mapPos++ );
+                    }
+                    else
+                    {
+                        ++mapPos;
+                    }
+                }
+
+                // Add new cameras to m_cameras
+                for (const_info_iterator infoPos = cameraInfos.begin(); infoPos != cameraInfos.end(); ++infoPos )
+                {
+                    CameraPtrMap::const_iterator findPos = m_cameras.Map.find( infoPos->cameraIdExtended);
+            
+                    if ( m_cameras.Map.end() == findPos )
+                    {
+                        AppendCamToMap( *infoPos );
+                    }
+                }
+            }
+            else
+            {
+                m_cameras.Map.clear();
+            }
+        }
+    }
+    catch( const std::bad_alloc& /*badAlloc*/ )
+    {
+        return VmbErrorResources;
+    }
+    
+
+    return (VmbErrorType)res;
+}
+
+Logger* VmbSystem::GetLogger() const noexcept
+{
+    if(m_pImpl == nullptr)
+        return nullptr;
+    return m_pImpl->m_pLogger;
+}
+
+bool VmbSystem::Impl::IsIPAddress( const char *pStrID )
+{
+    if( nullptr == pStrID )
+    {
+        return false;
+    }
+
+    size_t nCount = 0;
+    size_t nSize = 0;
+    size_t nIndex = 0;
+    while( pStrID[nIndex] != '\0' )
+    {
+        if( isdigit( pStrID[nIndex] ) != 0 )
+        {
+            if( nSize >= 3 )
+            {
+                return false;
+            }
+            nSize++;
+        }
+        else if( '.' == pStrID[nIndex] )
+        {
+            if(     (nSize <= 0)
+                ||  (nSize > 3)
+                ||  (nCount >= 3) )
+            {
+                return false;
+            }
+            nCount++;
+            nSize = 0;
+        }
+        else
+        {
+            return false;
+        }
+
+        nIndex++;
+    }
+    if(     (nSize <= 0)
+        ||  (nSize > 3)
+        ||  (nCount != 3) )
+    {
+        return false;
+    }
+
+    return true;
+}
+
+VmbErrorType VmbSystem::Impl::AppendCamToMap( VmbCameraInfo_t const& camInfo )
+{
+    InterfacePtr             pInterface;
+
+    // HINT: Before inserting (and potentially overwriting) a camera, we check whether it is present already
+    try
+    {
+        auto insertionResult = m_cameras.Map.emplace(camInfo.cameraIdExtended, nullptr);
+        if (insertionResult.second
+            || insertionResult.first->second == nullptr
+            || !insertionResult.first->second->ExtendedIdEquals(camInfo.cameraIdExtended))
+        {
+            bool insertionFailure = false;
+            // new camera or camera that needs to overwrite the existing non-extended id
+            try
+            {
+                insertionResult.first->second = CreateNewCamera(camInfo);
+                if (insertionResult.first->second == nullptr)
+                {
+                    insertionFailure = true;
+                }
+            }
+            catch (...)
+            {
+                insertionFailure = true;
+            }
+
+            if (insertionFailure)
+            {
+                // we cannot fill the value of the entry -> remove the entry to avoid
+                // having an entry pointing to null
+                m_cameras.Map.erase(insertionResult.first);
+                return VmbErrorResources;
+            }
+        }
+    }
+    catch (std::bad_alloc const&)
+    {
+        return VmbErrorResources;
+    }
+    return VmbErrorSuccess;
+}
+
+VmbErrorType VmbSystem::Impl::GetInterfaceList( std::vector<VmbInterfaceInfo_t> &rInterfaceInfos )
+{
+    VmbError_t res;
+    VmbUint32_t nCount;
+
+    res = VmbInterfacesList( nullptr, 0, &nCount, sizeof(VmbInterfaceInfo_t));
+    if ( VmbErrorSuccess == res )
+    {
+        rInterfaceInfos.resize( nCount );
+        res = VmbInterfacesList( &rInterfaceInfos[0], nCount, &nCount, sizeof(VmbInterfaceInfo_t));
+    }
+
+    return (VmbErrorType)res;
+}
+
+VmbErrorType VmbSystem::Impl::SetTransportLayerList() noexcept
+{
+    // check if the function has been already called
+    if ( !m_transportLayers.empty())
+    {
+        return VmbErrorInvalidAccess;
+    }
+    
+    VmbUint32_t nCount;
+
+    VmbError_t res = VmbTransportLayersList( nullptr, 0, &nCount, sizeof(VmbTransportLayerInfo_t));
+    if ( VmbErrorSuccess == res )
+    {
+        try
+        {
+            std::vector<VmbTransportLayerInfo_t> rTransportLayerInfos(nCount);
+            res = VmbTransportLayersList(&rTransportLayerInfos[0], nCount, &nCount, sizeof(VmbTransportLayerInfo_t));
+            if (VmbErrorSuccess == res)
+            {
+                for (std::vector<VmbTransportLayerInfo_t>::const_iterator iter = rTransportLayerInfos.begin();
+                     rTransportLayerInfos.end() != iter;
+                     ++iter)
+                {
+                    TransportLayer::GetInterfacesByTLFunction getInterfacesFunc = std::bind(&VmbSystem::Impl::GetInterfacesByTL, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
+                    TransportLayer::GetCamerasByTLFunction getCamerasFunc = std::bind(&VmbSystem::Impl::GetCamerasByTL, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
+                    SP_SET(m_transportLayers[iter->transportLayerHandle], new TransportLayer(*iter, getInterfacesFunc, getCamerasFunc));
+                }
+            }
+            else
+            {
+                return VmbErrorTLNotFound;
+            }
+        }
+        catch (std::bad_alloc const&)
+        {
+            return VmbErrorResources;
+        }
+    }
+
+    return static_cast<VmbErrorType>(res);
+}
+
+VmbErrorType VmbSystem::Impl::GetInterfaceByID(const std::string& strID, InterfacePtr& rInterface)
+{
+    for (InterfacePtrMap::iterator iter = m_interfaces.Map.begin();
+        m_interfaces.Map.end() != iter;
+        ++iter)
+    {
+        std::string tmpID;
+        VmbErrorType res = SP_ACCESS(iter->second)->GetID(tmpID);
+        if (VmbErrorSuccess == res && strID == tmpID)
+        {
+            rInterface = iter->second;
+            return VmbErrorSuccess;
+        }
+    }
+
+    return VmbErrorNotFound;
+}
+
+}  // namespace VmbCPP
diff --git a/VimbaX/api/source/VmbCPP/resource.h b/VimbaX/api/source/VmbCPP/resource.h
new file mode 100644
index 0000000000000000000000000000000000000000..d7e1664ffc8e41042f3ea113463ac3ed86928a26
--- /dev/null
+++ b/VimbaX/api/source/VmbCPP/resource.h
@@ -0,0 +1,14 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by VmbCPP.rc
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        101
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
diff --git a/VimbaX/cti/SetGenTLPath.sh b/VimbaX/cti/SetGenTLPath.sh
new file mode 100755
index 0000000000000000000000000000000000000000..344077336f64744eedbe4e9da7a23a046065009c
--- /dev/null
+++ b/VimbaX/cti/SetGenTLPath.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+#==============================================================================
+# Copyright (C) 2017 Allied Vision Technologies.  All Rights Reserved.
+#
+# Redistribution of this file, in original or modified form, without
+# prior written consent of Allied Vision Technologies is prohibited.
+#
+#------------------------------------------------------------------------------
+#
+# File:			SetGenTLPath.sh
+#
+# Description:	This script sets the GENICAM_GENTL32_PATH and
+#	       		GENICAM_GENTL64_PATH environment variable for the current shell
+#	       		only.
+#	       		This can become necessary when running a Vimba X application under
+#				a not logged-in user like a service.
+#
+# Note:			This script needs to be executed sourced. That is, using the
+#				same shell the application will be launched in. This is done
+#				by calling the script with the built-in shell command source
+#				or . (period), e.g. . SetGenTLPath.sh
+#
+#------------------------------------------------------------------------------
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+#
+#==============================================================================
+CWD=$(dirname $(readlink -f $_))
+UNAME=$(uname -m)
+
+if [ ${UNAME} = aarch64 ]
+then
+ARCH=arm
+elif [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
+then
+ARCH=x86
+else
+   echo "
+   Error: Incompatible system architecture found." 1>&2
+   exit 1
+fi
+
+if [ "$_" = "$0" ]
+then
+  echo "
+  Please asure to run this script using the 'source' shell command.
+  This is done through: '. SetGenTLPath.sh'
+  Please note the whitespace.
+  Further help can be found by typing 'help source' or 'help .' in your shell.
+  "
+  exit 1
+fi
+
+TL_PATH_64BIT=$CWD
+echo "
+Setting the GENICAM_GENTL64_PATH to $TL_PATH_64BIT for this shell only."
+export GENICAM_GENTL64_PATH=:$TL_PATH_64BIT	
+
+echo "  Done
+"
diff --git a/VimbaX/cti/VimbaGigETL.cti b/VimbaX/cti/VimbaGigETL.cti
new file mode 100644
index 0000000000000000000000000000000000000000..47926638cd1aaa1a4aa151a626ba9c187bdae609
Binary files /dev/null and b/VimbaX/cti/VimbaGigETL.cti differ
diff --git a/VimbaX/cti/VimbaGigETL.xml b/VimbaX/cti/VimbaGigETL.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4af9c62dafc45f98aeca974d49f1ce753af5f756
--- /dev/null
+++ b/VimbaX/cti/VimbaGigETL.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" standalone="no" ?>
+<Settings>
+
+    <!--
+        Use this to activate logging and set filename for logging (path can be absolute or relative to TL)
+        Default behavior if omitted:    Logging is deactivated
+    -->
+    <!-- <LogFileName>AvtGigETL.log</LogFileName> -->
+
+    <!--
+        Append messages to log file or reset log file at each transport layer restart (if logging is enabled)
+        True:                           Always append log messages
+        False:                          Reset log file at each transport layer restart
+        Default behavior if omitted:    Reset log file at each transport layer restart
+    -->
+    <!-- <AppendLog>False</AppendLog> -->
+
+
+    <!--
+        Set the payload size of one Ethernet frame in Bytes. This is equivalent to the MTU. Increasing this value
+        reduces the CPU load. Only set it to a higher value than 1500 Bytes if the network infrastructure supports Jumbo Frames.
+
+        [numeric value]:              	Set GVSPPacketSize to [numeric value]
+        Minimum:						500
+        Maximum:						16384
+        Default behavior if omitted:    8228 (Jumbo Frames required) or volatile value stored in the cam
+    -->
+    <!-- <DefaultPacketSize>8228</DefaultPacketSize> -->
+
+    <!--
+        Set the initial device discovery mode of each interface.
+        Off:                            No GigE camera detection.
+        Once:                           Detect GigE cameras once during VmbStartup (Vmb user) or TLOpenInterface (GenTL user)
+        Auto:                           Detect GigE cameras permanently.
+        Default behavior if omitted:    Off if used with Vimba, otherwise Auto.
+    -->
+    <DefaultDeviceDiscovery>Auto</DefaultDeviceDiscovery>
+
+</Settings>
diff --git a/VimbaX/cti/VimbaGigETL_Install.sh b/VimbaX/cti/VimbaGigETL_Install.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0a0e31afc80db108ce39aafab16cd0270ffb2dd0
--- /dev/null
+++ b/VimbaX/cti/VimbaGigETL_Install.sh
@@ -0,0 +1,60 @@
+#!/bin/sh
+#==============================================================================
+# Copyright (C) 2013 - 2014 Allied Vision Technologies.  All Rights Reserved.
+#
+# Redistribution of this file, in original or modified form, without
+# prior written consent of Allied Vision Technologies is prohibited.
+#
+#------------------------------------------------------------------------------
+#
+# File:        Install.sh
+#
+# Description: Setup script for creating a startup script that exports the
+#	       GENICAM_GENTL32_PATH and GENICAM_GENTL64_PATH variable
+#
+#------------------------------------------------------------------------------
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+#
+#==============================================================================
+CWD=$(dirname $(readlink -f $0))
+UNAME=$(uname -m)
+
+if [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
+then
+ARCH=x86
+elif [ ${UNAME} = aarch64 ]
+then
+ARCH=arm
+else
+   echo "Error: Incompatible system architecture found." 1>&2
+   exit 1
+fi
+
+# Make sure our script is only being run with root privileges
+if [ "$(id -u)" != "0" ];
+then
+   echo "Error: This script must be run with root privileges." 1>&2
+   exit 1
+fi
+
+TL_NAME=AVTGigETL
+PROFILE_FOLDER=/etc/profile.d
+
+TL_SCRIPT_64BIT=${PROFILE_FOLDER}/${TL_NAME}_64bit.sh
+TL_PATH_64BIT=$CWD
+echo "Registering GENICAM_GENTL64_PATH"
+printf "#!/bin/sh\n\n#Do not edit this file manually because it may be overwritten automatically.\nexport GENICAM_GENTL64_PATH=\$GENICAM_GENTL64_PATH:\"%s\"" $TL_PATH_64BIT > $TL_SCRIPT_64BIT
+chmod +x $TL_SCRIPT_64BIT
+
+echo "Done"
+echo "Please log off once before using the GigE transport layer"
diff --git a/VimbaX/cti/VimbaGigETL_Uninstall.sh b/VimbaX/cti/VimbaGigETL_Uninstall.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8500b2b1f57d17aa30cd7c9ceb3168eb32d977c5
--- /dev/null
+++ b/VimbaX/cti/VimbaGigETL_Uninstall.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+#==============================================================================
+# Copyright (C) 2013 - 2014 Allied Vision Technologies.  All Rights Reserved.
+#
+# Redistribution of this file, in original or modified form, without
+# prior written consent of Allied Vision Technologies is prohibited.
+#
+#------------------------------------------------------------------------------
+#
+# File:        Uninstall.sh
+#
+# Description: Setup script for deleting a startup script that exports the
+#	       GENICAM_GENTL32_PATH and GENICAM_GENTL64_PATH variable
+#
+#------------------------------------------------------------------------------
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+#
+#==============================================================================
+
+CWD=$(dirname $(readlink -f $0))
+UNAME=$(uname -m)
+
+if [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
+then
+ARCH=x86
+elif [ ${UNAME} = aarch64 ]
+then
+ARCH=arm
+else
+   echo "Error: Incompatible system architecture found." 1>&2
+   exit 1
+fi
+
+# Make sure our script is only being run with root privileges
+if [ "$(id -u)" != "0" ];
+then
+   echo "Error: This script must be run with root privileges." 1>&2
+   exit 1
+fi
+
+TL_NAME=AVTGigETL
+PROFILE_FOLDER=/etc/profile.d
+
+TL_SCRIPT_64BIT=${PROFILE_FOLDER}/${TL_NAME}_64bit.sh
+if [ -f $TL_SCRIPT_64BIT ]; then
+	echo "Unregistering GENICAM_GENTL64_PATH"
+	rm $TL_SCRIPT_64BIT
+else
+	echo "Could not unregister $TL_NAME 64bit because it was not registered" 
+fi
+
+echo "Done"
diff --git a/VimbaX/cti/VimbaUSBTL.cti b/VimbaX/cti/VimbaUSBTL.cti
new file mode 100755
index 0000000000000000000000000000000000000000..89525f5be474c42fa68253fe5fe965f47e1be8d6
Binary files /dev/null and b/VimbaX/cti/VimbaUSBTL.cti differ
diff --git a/VimbaX/cti/VimbaUSBTL.xml b/VimbaX/cti/VimbaUSBTL.xml
new file mode 100644
index 0000000000000000000000000000000000000000..752aa2108f4179ecc56b3e05f9bf4bf4a9a8259c
--- /dev/null
+++ b/VimbaX/cti/VimbaUSBTL.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" standalone="no" ?>
+<Settings>
+
+    <!--
+            Use this to activate logging and set filename for logging (path can be absolute or relative to TL)
+            Default behavior if omitted:    Logging is deactivated
+    -->
+    <!-- <LogFileName>&#37;TEMP&#37;\VimbaUSBTL.log</LogFileName> -->
+
+
+    <!--
+            Append messages to log file or reset log file at each transport layer restart (if logging is enabled)
+            True:                           Always append log messages
+            False:                          Reset log file at each transport layer restart
+            Default behavior if omitted:    Reset log file at each transport layer restart
+    -->
+    <!-- <AppendLog>True</AppendLog> -->
+
+
+    <!--
+            Activate less pedantic function parameter checks (needed for some TL consumers)
+            True:                           Tolerant function parameter checks
+            False:                          Pedantic function parameter checks
+            Default behavior if omitted:    Pedantic function parameter checks (GenTL compliant behavior)
+    -->
+    <TolerateTypeNullptr>True</TolerateTypeNullptr>
+
+
+    <!--
+            Emulate unsupported device access modes (needed for some TL consumers)
+            True:                           Emulation on
+            False:                          Emulation off
+            Default behavior if omitted:    Emulation off (GenTL compliant behavior)
+    -->
+    <EmulateAccessModes>True</EmulateAccessModes>
+    
+    
+    <!--
+			Use manual maximum transfer count for USB transfers
+            Decimal and hexadecimal numbers (prefixed with "0x") can be used
+            Default behavior if omitted:    Windows: 64
+                                            Linux:   31
+    -->
+    <!-- <MaxTransferCount>64</MaxTransferCount> -->
+	
+    
+	<!--
+			Use manual maximum transfer size (in bytes) for USB transfers
+            Decimal and hexadecimal numbers (prefixed with "0x") can be used
+            Default behavior if omitted:    262144
+    -->
+    <!-- <MaxTransferSize>262144</MaxTransferSize> -->
+    
+    
+    <!--
+			Number of frames to use for intermediate frame buffering. Values
+            greater than 0 mean that no zero copy is possible anymore.
+            Decimal and hexadecimal numbers (prefixed with "0x") can be used
+            Default behavior if omitted:    0 (No intermediate frame buffering)
+    -->
+    <!-- <DriverBuffersCount>3</DriverBuffersCount> -->
+    
+    <!--
+            Set the folder in which remote device XML files will be cached
+            Default behavior if omitted:    No XML files will be cached
+    -->
+    <!-- <XMLCacheFolder>XMLCache</XMLCacheFolder> -->
+
+</Settings>
\ No newline at end of file
diff --git a/VimbaX/cti/VimbaUSBTL_Install.sh b/VimbaX/cti/VimbaUSBTL_Install.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3f92c331a94851c7e5e294e1d57573b880d53946
--- /dev/null
+++ b/VimbaX/cti/VimbaUSBTL_Install.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+#==============================================================================
+# Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
+#
+# Redistribution of this file, in original or modified form, without
+# prior written consent of Allied Vision Technologies is prohibited.
+#
+#------------------------------------------------------------------------------
+#
+# File:        Install.sh
+#
+# Description: Setup script for creating a startup script that exports the
+#	       GENICAM_GENTL32_PATH and GENICAM_GENTL64_PATH variable
+#
+#------------------------------------------------------------------------------
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+#
+#==============================================================================
+CWD=$(dirname $(readlink -f $0))
+UNAME=$(uname -m)
+
+if [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
+then
+ARCH=x86
+elif [ ${UNAME} = aarch64 ]
+then
+ARCH=arm
+else
+   echo "Error: Incompatible system architecture found." 1>&2
+   exit 1
+fi
+
+# Make sure our script is only being run with root privileges
+if [ "$(id -u)" != "0" ];
+then
+   echo "Error: This script must be run with root privileges." 1>&2
+   exit 1
+fi
+
+TL_NAME=AVTUSBTL
+PROFILE_FOLDER=/etc/profile.d
+UDEV_FOLDER=/etc/udev/rules.d
+
+TL_SCRIPT_64BIT=${PROFILE_FOLDER}/${TL_NAME}_64bit.sh
+TL_PATH_64BIT=$CWD
+echo "Registering GENICAM_GENTL64_PATH"
+printf "#!/bin/sh\n\n#Do not edit this file manually because it may be overwritten automatically.\nexport GENICAM_GENTL64_PATH=\$GENICAM_GENTL64_PATH:\"%s\"" $TL_PATH_64BIT > $TL_SCRIPT_64BIT
+chmod +x $TL_SCRIPT_64BIT
+
+UDEV_SCRIPT=${UDEV_FOLDER}/99-${TL_NAME}.rules
+echo "Registering $TL_NAME device types"
+printf "SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"1ab2\", ATTRS{idProduct}==\"0001\", MODE=\"0666\"\nSUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"1ab2\", ATTRS{idProduct}==\"ff01\", MODE=\"0666\"\n" > $UDEV_SCRIPT
+
+echo "Done"
+echo "Please reboot before using the USB transport layer"
diff --git a/VimbaX/cti/VimbaUSBTL_Uninstall.sh b/VimbaX/cti/VimbaUSBTL_Uninstall.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d2226b709452cd4586113fd44e635cca70200768
--- /dev/null
+++ b/VimbaX/cti/VimbaUSBTL_Uninstall.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+#==============================================================================
+# Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
+#
+# Redistribution of this file, in original or modified form, without
+# prior written consent of Allied Vision Technologies is prohibited.
+#
+#------------------------------------------------------------------------------
+#
+# File:        Uninstall.sh
+#
+# Description: Setup script for deleting a startup script that exports the
+#	       GENICAM_GENTL32_PATH and GENICAM_GENTL64_PATH variable
+#
+#------------------------------------------------------------------------------
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
+# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
+# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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.
+#
+#==============================================================================
+
+CWD=$(dirname $(readlink -f $0))
+UNAME=$(uname -m)
+
+if [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
+then
+ARCH=x86
+elif [ ${UNAME} = aarch64 ]
+then
+ARCH=arm
+else
+   echo "Error: Incompatible system architecture found." 1>&2
+   exit 1
+fi
+
+# Make sure our script is only being run with root privileges
+if [ "$(id -u)" != "0" ];
+then
+   echo "Error: This script must be run with root privileges." 1>&2
+   exit 1
+fi
+
+TL_NAME=AVTUSBTL
+PROFILE_FOLDER=/etc/profile.d
+UDEV_FOLDER=/etc/udev/rules.d
+
+TL_SCRIPT_64BIT=${PROFILE_FOLDER}/${TL_NAME}_64bit.sh
+if [ -f $TL_SCRIPT_64BIT ]; then
+	echo "Unregistering GENICAM_GENTL64_PATH"
+	rm $TL_SCRIPT_64BIT
+else
+	echo "Could not unregister $TL_NAME 64bit because it was not registered" 
+fi
+
+UDEV_SCRIPT=${UDEV_FOLDER}/99-${TL_NAME}.rules
+if [ -f $UDEV_SCRIPT ]; then
+	echo "Unregistering USB device types"
+	rm $UDEV_SCRIPT
+else
+	echo "Could not unregister $TL_NAME device types because they were not registered" 
+fi
+
+echo "Done"
diff --git a/VimbaX/doc/VimbaX_Documentation/.buildinfo b/VimbaX/doc/VimbaX_Documentation/.buildinfo
new file mode 100644
index 0000000000000000000000000000000000000000..96e7fa5adc24a1e43770bf98f70a28629551f589
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 2c657ebb35b85c38d2bdcaac32dd0056
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/about.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/about.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..3a23a27127b578d0b7ab0929c6e2a8ee8c7b9973
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/about.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/cAPIManual.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/cAPIManual.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..c45026467e2a853c531ecd5d956876855aa96fa7
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/cAPIManual.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/cppAPIManual.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/cppAPIManual.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..102a7e0988188491adde9aa36c391d79c2f1a021
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/cppAPIManual.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/driverInstaller.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/driverInstaller.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..a080a4735102253f08300be6120041ce27c755e0
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/driverInstaller.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/environment.pickle b/VimbaX/doc/VimbaX_Documentation/.doctrees/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..a58982a8eff37d555315ea231bbbd0277e91fb44
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/environment.pickle differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/examplesOverview.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/examplesOverview.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..7ef45af36fca1a833163d6c1c16076c87a0f4e30
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/examplesOverview.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/fwUpdater.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/fwUpdater.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..6e85483d97eed2380a265d0c44dcab2c5de98530
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/fwUpdater.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/genindex.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/genindex.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..001e75b2bee7d661417ad584e660e42dea64fe2c
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/genindex.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/imagetransformManual.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/imagetransformManual.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..381829b3455ed3ee0cffa509333a34c1518ceb0b
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/imagetransformManual.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/index.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/index.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..a3ec39333d80bf9101eafd586d06463060a7496d
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/index.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/legalInformation.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/legalInformation.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..2c857fa9ab2e53d063b05ab77d81814b94c06f61
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/legalInformation.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/migrationGuide.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/migrationGuide.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..e935cabeef78ca0e9aba9ccadd4636054833de96
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/migrationGuide.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/pythonAPIManual.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/pythonAPIManual.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..edb1a5dcfdf385548144642dce1ba47032997ce4
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/pythonAPIManual.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/sdkManual.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/sdkManual.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..ceaaf2199ab7d2ad0bcb9b4165b812168daedd04
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/sdkManual.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/troubleshooting.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/troubleshooting.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..8e29564ec1cdde4a98e4cdd73706b4b5b10523f6
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/troubleshooting.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/.doctrees/viewerGuide.doctree b/VimbaX/doc/VimbaX_Documentation/.doctrees/viewerGuide.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..0877d57f034517a64ee04e0e21270bf158aa900d
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/.doctrees/viewerGuide.doctree differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_downloads/3f0807fa16ecb879f8d12407155e197c/Apache.txt b/VimbaX/doc/VimbaX_Documentation/_downloads/3f0807fa16ecb879f8d12407155e197c/Apache.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_downloads/3f0807fa16ecb879f8d12407155e197c/Apache.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/VimbaX/doc/VimbaX_Documentation/_downloads/881186e1f3a177c46729e78aef18f0bb/MIT_License.txt b/VimbaX/doc/VimbaX_Documentation/_downloads/881186e1f3a177c46729e78aef18f0bb/MIT_License.txt
new file mode 100644
index 0000000000000000000000000000000000000000..27e69d9f341175d36e9c0fa2e366c68246cfc6bc
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_downloads/881186e1f3a177c46729e78aef18f0bb/MIT_License.txt
@@ -0,0 +1,25 @@
+
+The MIT License (MIT)
+[OSI Approved License]
+
+The MIT License (MIT)
+
+Copyright (c) <year> <copyright holders>
+
+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.
diff --git a/VimbaX/doc/VimbaX_Documentation/_downloads/bf68854ed599e86458e218249fd8b6f7/xs3p_License.mht b/VimbaX/doc/VimbaX_Documentation/_downloads/bf68854ed599e86458e218249fd8b6f7/xs3p_License.mht
new file mode 100644
index 0000000000000000000000000000000000000000..6ec8742c93b4958256281dad6bf6774f13691323
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_downloads/bf68854ed599e86458e218249fd8b6f7/xs3p_License.mht
@@ -0,0 +1,630 @@
+From: <Mit Microsoft Internet Explorer 7 gespeichert>
+Subject: DSTC Public License
+Date: Thu, 25 Sep 2008 18:08:08 +0200
+MIME-Version: 1.0
+Content-Type: text/html;
+	charset="utf-8"
+Content-Transfer-Encoding: quoted-printable
+Content-Location: file://C:\Projects\genicam_v1_2\xml\GenApi\xs3p-1.1.3\LICENSE.html
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579
+
+=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML><HEAD><TITLE>DSTC Public License</TITLE>
+<META http-equiv=3DContent-Type content=3D"text/html; charset=3DUTF-8">
+<META content=3D"MSHTML 6.00.6000.16705" name=3DGENERATOR></HEAD>
+<BODY>
+<H1>DSTC Public License (DPL)</H1>
+<P>Version 1.1</P>
+<H2>1. Definitions.</H2>
+<P><B>1.0.1. "Commercial Use" </B>means distribution or otherwise making =
+the=20
+Covered Code available to a third party.</P>
+<P><B>1.1. "Contributor"</B> means each entity that creates or =
+contributes to=20
+the creation of Modifications.</P>
+<P><B>1.2. "Contributor Version"</B> means the combination of the =
+Original Code,=20
+prior Modifications used by a Contributor, and the Modifications made by =
+that=20
+particular Contributor.</P>
+<P><B>1.3. "Covered Code"</B> means the Original Code or Modifications =
+or the=20
+combination of the Original Code and Modifications, in each case =
+including=20
+portions thereof<B>.</B></P>
+<P><B>1.4. "Electronic Distribution Mechanism"</B> means a mechanism =
+generally=20
+accepted in the software development community for the electronic =
+transfer of=20
+data.</P>
+<P><B>1.5. "Executable"</B> means Covered Code in any form other than =
+Source=20
+Code.</P>
+<P><B>1.6. "Initial Developer"</B> means the individual or entity =
+identified as=20
+the Initial Developer in the Source Code notice required by <B>Exhibit=20
+A</B>.</P>
+<P><B>1.7. "Larger Work"</B> means a work which combines Covered Code or =
+
+portions thereof with code not governed by the terms of this =
+License.</P>
+<P><B>1.8. "License"</B> means this document.</P>
+<P><B>1.8.1. "Licensable"</B> means having the right to grant, to the =
+maximum=20
+extent possible, whether at the time of the initial grant or =
+subsequently=20
+acquired, any and all of the rights conveyed herein.</P>
+<P><B>1.9. "Modifications"</B> means any addition to or deletion from =
+the=20
+substance or structure of either the Original Code or any previous=20
+Modifications. When Covered Code is released as a series of files, a=20
+Modification is:</P>
+<UL>
+  <LI><B>A.</B> Any addition to or deletion from the contents of a file=20
+  containing Original Code or previous Modifications.=20
+  <LI><B>B.</B> Any new file that contains any part of the Original Code =
+or=20
+  previous Modifications. </LI></UL>
+<P><B>1.10. "Original Code"</B> means Source Code of computer software =
+code=20
+which is described in the Source Code notice required by <B>Exhibit =
+A</B> as=20
+Original Code, and which, at the time of its release under this License =
+is not=20
+already Covered Code governed by this License.</P>
+<P><B>1.10.1. "Patent Claims"</B> means any patent claim(s), now owned =
+or=20
+hereafter acquired, including without limitation, method, process, and =
+apparatus=20
+claims, in any patent Licensable by grantor.</P>
+<P><B>1.11. "Source Code"</B> means the preferred form of the Covered =
+Code for=20
+making modifications to it, including all modules it contains, plus any=20
+associated interface definition files, scripts used to control =
+compilation and=20
+installation of an Executable, or source code differential comparisons =
+against=20
+either the Original Code or another well known, available Covered Code =
+of the=20
+Contributor's choice. The Source Code can be in a compressed or archival =
+form,=20
+provided the appropriate decompression or de-archiving software is =
+widely=20
+available for no charge.</P>
+<P><B>1.12. "You" (or "Your")</B> means an individual or a legal entity=20
+exercising rights under, and complying with all of the terms of, this =
+License or=20
+a future version of this License issued under Section 6.1. For legal =
+entities,=20
+"You" includes any entity which controls, is controlled by, or is under =
+common=20
+control with You. For purposes of this definition, "control" means (a) =
+the=20
+power, direct or indirect, to cause the direction or management of such =
+entity,=20
+whether by contract or otherwise, or (b) ownership of more than fifty =
+percent=20
+(50%) of the outstanding shares or beneficial ownership of such =
+entity.</P>
+<H2>2. Source Code License.</H2>
+<H3>2.1. The Initial Developer Grant.</H3>
+<P>The Initial Developer hereby grants You a world-wide, royalty-free,=20
+non-exclusive license, subject to third party intellectual property =
+claims:</P>
+<P><B>(a)</B> under intellectual property rights (other than patent or=20
+trademark) Licensable by Initial Developer to use, reproduce, modify, =
+display,=20
+perform, sublicense and distribute the Original Code (or portions =
+thereof) with=20
+or without Modifications, and/or as part of a Larger Work; and</P>
+<P><B>(b)</B> under Patents Claims infringed by the making, using or =
+selling of=20
+Original Code, to make, have made, use, practice, sell, and offer for =
+sale,=20
+and/or otherwise dispose of the Original Code (or portions thereof).</P>
+<P><B>(c) </B>the licenses granted in this Section 2.1(a) and (b) are =
+effective=20
+on the date Initial Developer first distributes Original Code under the =
+terms of=20
+this License.</P>
+<P><B>(d) </B>Notwithstanding Section 2.1(b) above, no patent license is =
+
+granted: 1) for code that You delete from the Original Code; 2) separate =
+from=20
+the Original Code; or 3) for infringements caused by: i) the =
+modification of the=20
+Original Code or ii) the combination of the Original Code with other =
+software or=20
+devices.</P>
+<H3>2.2. Contributor Grant.</H3>
+<P>Subject to third party intellectual property claims, each Contributor =
+hereby=20
+grants You a world-wide, royalty-free, non-exclusive license</P>
+<P><B>(a)</B> under intellectual property rights (other than patent or=20
+trademark) Licensable by Contributor, to use, reproduce, modify, =
+display,=20
+perform, sublicense and distribute the Modifications created by such =
+Contributor=20
+(or portions thereof) either on an unmodified basis, with other =
+Modifications,=20
+as Covered Code and/or as part of a Larger Work; and</P>
+<P><B>(b)</B> under Patent Claims infringed by the making, using, or =
+selling of=20
+Modifications made by that Contributor either alone and/or in =
+combination with=20
+its Contributor Version (or portions of such combination), to make, use, =
+sell,=20
+offer for sale, have made, and/or otherwise dispose of: 1) Modifications =
+made by=20
+that Contributor (or portions thereof); and 2) the combination of =
+Modifications=20
+made by that Contributor with its Contributor Version (or portions of =
+such=20
+combination).</P>
+<P><B>(c) </B>the licenses granted in Sections 2.2(a) and 2.2(b) are =
+effective=20
+on the date Contributor first makes Commercial Use of the Covered =
+Code.</P>
+<P><B>(d)</B> Notwithstanding Section 2.2(b) above, no patent license is =
+
+granted: 1) for any code that Contributor has deleted from the =
+Contributor=20
+Version; 2) separate from the Contributor Version; 3) for infringements =
+caused=20
+by: i) third party modifications of Contributor Version or ii) the =
+combination=20
+of Modifications made by that Contributor with other software (except as =
+part of=20
+the Contributor Version) or other devices; or 4) under Patent Claims =
+infringed=20
+by Covered Code in the absence of Modifications made by that =
+Contributor.</P>
+<H2>3. Distribution Obligations</H2>
+<H3>3.1. Application of License.</H3>
+<P>The Modifications which You create or to which You contribute are =
+governed by=20
+the terms of this License, including without limitation Section =
+<B>2.2</B>. The=20
+Source Code version of Covered Code may be distributed only under the =
+terms of=20
+this License or a future version of this License released under Section=20
+<B>6.1</B>, and You must include a copy of this License with every copy =
+of the=20
+Source Code You distribute. You may not offer or impose any terms on any =
+Source=20
+Code version that alters or restricts the applicable version of this =
+License or=20
+the recipients' rights hereunder. However, You may include an additional =
+
+document offering the additional rights described in Section =
+<B>3.5</B>.</P>
+<H3>3.2. Availability of Source Code.</H3>
+<P>Any Modification which You create or to which You contribute must be =
+made=20
+available in Source Code form under the terms of this License either on =
+the same=20
+media as an Executable version or via an accepted Electronic =
+Distribution=20
+Mechanism to anyone to whom you made an Executable version available; =
+and if=20
+made available via Electronic Distribution Mechanism, must remain =
+available for=20
+at least twelve (12) months after the date it initially became =
+available, or at=20
+least six (6) months after a subsequent version of that particular =
+Modification=20
+has been made available to such recipients. You are responsible for =
+ensuring=20
+that the Source Code version remains available even if the Electronic=20
+Distribution Mechanism is maintained by a third party.</P>
+<H3>3.3. Description of Modifications.</H3>
+<P>You must cause all Covered Code to which You contribute to contain a =
+file=20
+documenting the changes You made to create that Covered Code and the =
+date of any=20
+change. You must include a prominent statement that the Modification is =
+derived,=20
+directly or indirectly, from Original Code provided by the Initial =
+Developer and=20
+including the name of the Initial Developer in (a) the Source Code, and =
+(b) in=20
+any notice in an Executable version or related documentation in which =
+You=20
+describe the origin or ownership of the Covered Code.</P>
+<H3>3.4. Intellectual Property Matters</H3>
+<H4>(a) Third Party Claims.</H4>
+<P>If Contributor has knowledge that a license under a third party's=20
+intellectual property rights is required to exercise the rights granted =
+by such=20
+Contributor under Sections 2.1 or 2.2, Contributor must include a text =
+file with=20
+the Source Code distribution titled "LEGAL" which describes the claim =
+and the=20
+party making the claim in sufficient detail that a recipient will know =
+whom to=20
+contact. If Contributor obtains such knowledge after the Modification is =
+made=20
+available as described in Section 3.2, Contributor shall promptly modify =
+the=20
+LEGAL file in all copies Contributor makes available thereafter and =
+shall take=20
+other steps (such as notifying appropriate mailing lists or newsgroups)=20
+reasonably calculated to inform those who received the Covered Code that =
+new=20
+knowledge has been obtained.</P>
+<H4>(b) Contributor APIs.</H4>
+<P>If Contributor's Modifications include an application programming =
+interface=20
+and Contributor has knowledge of patent licenses which are reasonably =
+necessary=20
+to implement that API, Contributor must also include this information in =
+the=20
+LEGAL file.</P>
+<H4>(c) Representations.</H4>
+<P>Contributor represents that, except as disclosed pursuant to Section =
+3.4(a)=20
+above, Contributor believes that Contributor's Modifications are =
+Contributor's=20
+original creation(s) and/or Contributor has sufficient rights to grant =
+the=20
+rights conveyed by this License.</P>
+<H3>3.5. Required Notices.</H3>
+<P>You must duplicate the notice in <B>Exhibit A</B> in each file of the =
+Source=20
+Code. If it is not possible to put such notice in a particular Source =
+Code file=20
+due to its structure, then You must include such notice in a location =
+(such as a=20
+relevant directory) where a user would be likely to look for such a =
+notice. If=20
+You created one or more Modification(s) You may add your name as a =
+Contributor=20
+to the notice described in <B>Exhibit A</B>. You must also duplicate =
+this=20
+License in any documentation for the Source Code where You describe =
+recipients'=20
+rights or ownership rights relating to Covered Code. You may choose to =
+offer,=20
+and to charge a fee for, warranty, support, indemnity or liability =
+obligations=20
+to one or more recipients of Covered Code. However, You may do so only =
+on Your=20
+own behalf, and not on behalf of the Initial Developer or any =
+Contributor. You=20
+must make it absolutely clear than any such warranty, support, indemnity =
+or=20
+liability obligation is offered by You alone, and You hereby agree to =
+indemnify=20
+the Initial Developer and every Contributor for any liability incurred =
+by the=20
+Initial Developer or such Contributor as a result of warranty, support,=20
+indemnity or liability terms You offer.</P>
+<H3>3.6. Distribution of Executable Versions.</H3>
+<P>You may distribute Covered Code in Executable form only if the =
+requirements=20
+of Section <B>3.1-3.5</B> have been met for that Covered Code, and if =
+You=20
+include a notice stating that the Source Code version of the Covered =
+Code is=20
+available under the terms of this License, including a description of =
+how and=20
+where You have fulfilled the obligations of Section <B>3.2</B>. The =
+notice must=20
+be conspicuously included in any notice in an Executable version, =
+related=20
+documentation or collateral in which You describe recipients' rights =
+relating to=20
+the Covered Code. You may distribute the Executable version of Covered =
+Code or=20
+ownership rights under a license of Your choice, which may contain terms =
+
+different from this License, provided that You are in compliance with =
+the terms=20
+of this License and that the license for the Executable version does not =
+attempt=20
+to limit or alter the recipient's rights in the Source Code version from =
+the=20
+rights set forth in this License. If You distribute the Executable =
+version under=20
+a different license You must make it absolutely clear that any terms =
+which=20
+differ from this License are offered by You alone, not by the Initial =
+Developer=20
+or any Contributor. You hereby agree to indemnify the Initial Developer =
+and=20
+every Contributor for any liability incurred by the Initial Developer or =
+such=20
+Contributor as a result of any such terms You offer.</P>
+<H3>3.7. Larger Works.</H3>
+<P>You may create a Larger Work by combining Covered Code with other =
+code not=20
+governed by the terms of this License and distribute the Larger Work as =
+a single=20
+product. In such a case, You must make sure the requirements of this =
+License are=20
+fulfilled for the Covered Code.</P>
+<H2>4. Inability to Comply Due to Statute or Regulation.</H2>
+<P>If it is impossible for You to comply with any of the terms of this =
+License=20
+with respect to some or all of the Covered Code due to statute, judicial =
+order,=20
+or regulation then You must: (a) comply with the terms of this License =
+to the=20
+maximum extent possible; and (b) describe the limitations and the code =
+they=20
+affect. Such description must be included in the LEGAL file described in =
+Section=20
+<B>3.4</B> and must be included with all distributions of the Source =
+Code.=20
+Except to the extent prohibited by statute or regulation, such =
+description must=20
+be sufficiently detailed for a recipient of ordinary skill to be able to =
+
+understand it.</P>
+<H2>5. Application of this License.</H2>
+<P>This License applies to code to which the Initial Developer has =
+attached the=20
+notice in <B>Exhibit A</B> and to related Covered Code.</P>
+<H2>6. Versions of the License.</H2>
+<H3>6.1. New Versions</H3>
+<P>The Distributed Systems Technology Centre ("DSTC") may publish =
+revised and/or=20
+new versions of the License from time to time. Each version will be =
+given a=20
+distinguishing version number.</P>
+<H3>6.2. Effect of New Versions</H3>
+<P>Once Covered Code has been published under a particular version of =
+the=20
+License, You may always continue to use it under the terms of that =
+version. You=20
+may also choose to use such Covered Code under the terms of any =
+subsequent=20
+version of the License published by DSTC. No one other than DSTC has the =
+right=20
+to modify the terms applicable to Covered Code created under this =
+License.</P>
+<H3>6.3. Derivative Works</H3>
+<P>If You create or use a modified version of this License (which you =
+may only=20
+do in order to apply it to code which is not already Covered Code =
+governed by=20
+this License), You must (a) rename Your license so that the phrases =
+"DSTC",=20
+"DPL" or any confusingly similar phrase do not appear in your license =
+(except to=20
+note that your license differs from this License) and (b) otherwise make =
+it=20
+clear that Your version of the license contains terms which differ from =
+the DSTC=20
+Public License. (Filling in the name of the Initial Developer, Original =
+Code or=20
+Contributor in the notice described in <B>Exhibit A</B> shall not of =
+themselves=20
+be deemed to be modifications of this License.)</P>
+<H2>7. Disclaimer of Warranty.</H2>
+<P>COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, =
+WITHOUT=20
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT=20
+LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, =
+MERCHANTABLE,=20
+FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO =
+THE=20
+QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY =
+COVERED CODE=20
+PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY =
+OTHER=20
+CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR =
+CORRECTION.=20
+THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS =
+LICENSE. NO=20
+USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS=20
+DISCLAIMER.</P>
+<H2>8. Termination.</H2>
+<P><B>8.1. </B>This License and the rights granted hereunder will =
+terminate=20
+automatically if You fail to comply with terms herein and fail to cure =
+such=20
+breach within 30 days of becoming aware of the breach. All sublicenses =
+to the=20
+Covered Code which are properly granted shall survive any termination of =
+this=20
+License. Provisions which, by their nature, must remain in effect beyond =
+the=20
+termination of this License shall survive.</P>
+<P><B>8.2. </B>If You initiate litigation by asserting a patent =
+infringement=20
+claim (excluding declatory judgment actions) against Initial Developer =
+or a=20
+Contributor (the Initial Developer or Contributor against whom You file =
+such=20
+action is referred to as 'Participant') alleging that:</P>
+<P><B>(a) </B>such Participant's Contributor Version directly or =
+indirectly=20
+infringes any patent, then any and all rights granted by such =
+Participant to You=20
+under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice =
+from=20
+Participant terminate prospectively, unless if within 60 days after =
+receipt of=20
+notice You either: (i) agree in writing to pay Participant a mutually =
+agreeable=20
+reasonable royalty for Your past and future use of Modifications made by =
+such=20
+Participant, or (ii) withdraw Your litigation claim with respect to the=20
+Contributor Version against such Participant. If within 60 days of =
+notice, a=20
+reasonable royalty and payment arrangement are not mutually agreed upon =
+in=20
+writing by the parties or the litigation claim is not withdrawn, the =
+rights=20
+granted by Participant to You under Sections 2.1 and/or 2.2 =
+automatically=20
+terminate at the expiration of the 60 day notice period specified =
+above.</P>
+<P><B>(b)</B> any software, hardware, or device, other than such =
+Participant's=20
+Contributor Version, directly or indirectly infringes any patent, then =
+any=20
+rights granted to You by such Participant under Sections 2.1(b) and =
+2.2(b) are=20
+revoked effective as of the date You first made, used, sold, =
+distributed, or had=20
+made, Modifications made by that Participant.</P>
+<P><B>8.3. </B>If You assert a patent infringement claim against =
+Participant=20
+alleging that such Participant's Contributor Version directly or =
+indirectly=20
+infringes any patent where such claim is resolved (such as by license or =
+
+settlement) prior to the initiation of patent infringement litigation, =
+then the=20
+reasonable value of the licenses granted by such Participant under =
+Sections 2.1=20
+or 2.2 shall be taken into account in determining the amount or value of =
+any=20
+payment or license.</P>
+<P><B>8.4.</B> In the event of termination under Sections 8.1 or 8.2 =
+above, all=20
+end user license agreements (excluding distributors and resellers) which =
+have=20
+been validly granted by You or any distributor hereunder prior to =
+termination=20
+shall survive termination.</P>
+<H2>9. Limitation of Liability.</H2>
+<P>UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT =
+(INCLUDING=20
+NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, =
+ANY OTHER=20
+CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY =
+OF SUCH=20
+PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, =
+OR=20
+CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, =
+DAMAGES=20
+FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR =
+ANY AND=20
+ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE =
+BEEN=20
+INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF =
+LIABILITY SHALL=20
+NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH =
+PARTY'S=20
+NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME=20
+JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR=20
+CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO =
+
+YOU.</P>
+<H2>10. U.S. Government End Users.</H2>
+<P>The Covered Code is a "commercial item," as that term is defined in =
+48 C.F.R.=20
+2.101 (Oct. 1995), consisting of "commercial computer software" and =
+"commercial=20
+computer software documentation," as such terms are used in 48 C.F.R. =
+12.212=20
+(Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 =
+through=20
+227.7202-4 (June 1995), all U.S. Government End Users acquire Covered =
+Code with=20
+only those rights set forth herein.</P>
+<H2>11. Miscellaneous.</H2>
+<P>This License represents the complete agreement concerning subject =
+matter=20
+hereof. If any provision of this License is held to be unenforceable, =
+such=20
+provision shall be reformed only to the extent necessary to make it =
+enforceable.=20
+This License shall be governed by Queensland, Australia law provisions =
+(except=20
+to the extent applicable law, if any, provides otherwise), excluding its =
+
+conflict-of-law provisions. With respect to disputes in which at least =
+one party=20
+is a citizen of, or an entity chartered or registered to do business in=20
+Australia, any litigation relating to this License shall be subject to =
+the=20
+jurisdiction of Australian Courts, with the losing party responsible for =
+costs,=20
+including without limitation, court costs and reasonable attorneys' fees =
+and=20
+expenses. The application of the United Nations Convention on Contracts =
+for the=20
+International Sale of Goods is expressly excluded. Any law or regulation =
+which=20
+provides that the language of a contract shall be construed against the =
+drafter=20
+shall not apply to this License.</P>
+<H2>12. Responsibility for Claims.</H2>
+<P>As between Initial Developer and the Contributors, each party is =
+responsible=20
+for claims and damages arising, directly or indirectly, out of its =
+utilization=20
+of rights under this License and You agree to work with Initial =
+Developer and=20
+Contributors to distribute such responsibility on an equitable basis. =
+Nothing=20
+herein is intended or shall be deemed to constitute any admission of=20
+liability.</P>
+<H2>13. Multiple-licensed Code.</H2>
+<P>Initial Developer may designate portions of the Covered Code as=20
+"Multiple-Licensed". "Multiple-Licensed" means that the Initial =
+Developer=20
+permits you to utilize portions of the Covered Code under Your choice of =
+the DPL=20
+or the alternative licenses, if any, specified by the Initial Developer =
+in the=20
+file described in Exhibit A.</P>
+<H2>14. High Risk Activities.</H2>
+<P>The Software is not fault-tolerant and is not designed, manufactured =
+or=20
+intended for use or resale as on-line control equipment in hazardous=20
+environments requiring fail-safe performance, such as in the operation =
+of=20
+nuclear facilities, aircraft navigation or communication systems, air =
+traffic=20
+control, direct life support machines, or weapons systems, in which the =
+failure=20
+of the Software could lead directly to death, personal injury, or severe =
+
+physical or environmental damage ("High Risk Activities").</P>
+<H2>EXHIBIT A - DSTC Public License.</H2>
+<P>The contents of this file are subject to the DSTC Public License =
+Version 1.1=20
+(the 'License'); you may not use this file except in compliance with the =
+
+License.</P>
+<P>Software distributed under the License is distributed on an 'AS IS' =
+basis,=20
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License =
+for the=20
+specific language governing rights and limitations under the =
+License.</P>
+<P>The Original Code is ______________________________________.</P>
+<P>The Initial Developer of the Original Code is =
+________________________.=20
+Portions created by ______________________ are Copyright =C2=A9=20
+_____________________________. All Rights Reserved.</P>
+<P>Contributor(s): ______________________________________.</P>
+<P>Alternatively, the contents of this file may be used under the terms =
+of the=20
+_____ license (the "[___] License"), in which case the provisions of =
+[______]=20
+License are applicable instead of those above. If you wish to allow use =
+of your=20
+version of this file only under the terms of the [____] License and not =
+to allow=20
+others to use your version of this file under the DPL, indicate your =
+decision by=20
+deleting the provisions above and replace them with the notice and other =
+
+provisions required by the [___] License. If you do not delete the =
+provisions=20
+above, a recipient may use your version of this file under either the =
+DPL or the=20
+[___] License.'</P>
+<P>[NOTE: The text of this Exhibit A may differ slightly from the text =
+of the=20
+notices in the Source Code files of the Original Code. You should use =
+the text=20
+of this Exhibit A rather than the text found in the Original Code Source =
+Code=20
+for Your Modifications.]</P></BODY></HTML>
diff --git a/VimbaX/doc/VimbaX_Documentation/_downloads/e3a7eafb0f29d7f863430387a6e66a64/LGPL.html b/VimbaX/doc/VimbaX_Documentation/_downloads/e3a7eafb0f29d7f863430387a6e66a64/LGPL.html
new file mode 100644
index 0000000000000000000000000000000000000000..b00b56148a4d317833ae3508e39388b677de7a7d
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_downloads/e3a7eafb0f29d7f863430387a6e66a64/LGPL.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>GNU Lesser General Public License v3.0 - GNU Project - Free Software Foundation (FSF)</title>
+ <link rel="alternate" type="application/rdf+xml"
+       href="http://www.gnu.org/licenses/lgpl-3.0.rdf" /> 
+</head>
+<body>
+<h3 style="text-align: center;">GNU LESSER GENERAL PUBLIC LICENSE</h3>
+<p style="text-align: center;">Version 3, 29 June 2007</p>
+
+<p>Copyright &copy; 2007 Free Software Foundation, Inc.
+ &lt;<a href="https://fsf.org/">https://fsf.org/</a>&gt;</p><p>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.</p>
+
+<p>This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.</p>
+
+<h4 id="section0">0. Additional Definitions.</h4>
+
+<p>As used herein, &ldquo;this License&rdquo; refers to version 3 of the GNU Lesser
+General Public License, and the &ldquo;GNU GPL&rdquo; refers to version 3 of the GNU
+General Public License.</p>
+
+<p>&ldquo;The Library&rdquo; refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.</p>
+
+<p>An &ldquo;Application&rdquo; is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.</p>
+
+<p>A &ldquo;Combined Work&rdquo; is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the &ldquo;Linked
+Version&rdquo;.</p>
+
+<p>The &ldquo;Minimal Corresponding Source&rdquo; for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.</p>
+
+<p>The &ldquo;Corresponding Application Code&rdquo; for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.</p>
+
+<h4 id="section1">1. Exception to Section 3 of the GNU GPL.</h4>
+
+<p>You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.</p>
+
+<h4 id="section2">2. Conveying Modified Versions.</h4>
+
+<p>If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:</p>
+
+<ul>
+<li>a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or</li>
+
+<li>b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.</li>
+</ul>
+
+<h4 id="section3">3. Object Code Incorporating Material from Library Header Files.</h4>
+
+<p>The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:</p>
+
+<ul>
+<li>a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.</li>
+
+<li>b) Accompany the object code with a copy of the GNU GPL and this license
+   document.</li>
+</ul>
+
+<h4 id="section4">4. Combined Works.</h4>
+
+<p>You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:</p>
+
+<ul>
+<li>a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.</li>
+
+<li>b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.</li>
+
+<li>c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.</li>
+
+<li>d) Do one of the following:
+
+<ul>
+<li>0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.</li>
+
+<li>1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.</li>
+</ul></li>
+
+<li>e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)</li>
+</ul>
+
+<h4 id="section5">5. Combined Libraries.</h4>
+
+<p>You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:</p>
+
+<ul>
+<li>a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.</li>
+
+<li>b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.</li>
+</ul>
+
+<h4 id="section6">6. Revised Versions of the GNU Lesser General Public License.</h4>
+
+<p>The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.</p>
+
+<p>Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License &ldquo;or any later version&rdquo;
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.</p>
+
+<p>If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.</p>
+
+</body></html>
diff --git a/VimbaX/doc/VimbaX_Documentation/_downloads/f57ddc1ca0abe4ab7b2b54bc303a4bfb/GenICam_License_20180629.pdf b/VimbaX/doc/VimbaX_Documentation/_downloads/f57ddc1ca0abe4ab7b2b54bc303a4bfb/GenICam_License_20180629.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..e65a5efcad93c3fc6c81dfb1ecc14ee9b3ae0d2b
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_downloads/f57ddc1ca0abe4ab7b2b54bc303a4bfb/GenICam_License_20180629.pdf differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_downloads/f5ac377a116438efb50c5455094dbc6f/LGPL.txt b/VimbaX/doc/VimbaX_Documentation/_downloads/f5ac377a116438efb50c5455094dbc6f/LGPL.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cfabc9bf831530b1c6ab11ca8237c7335df69dea
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_downloads/f5ac377a116438efb50c5455094dbc6f/LGPL.txt
@@ -0,0 +1,503 @@
+               GNU LESSER GENERAL PUBLIC LICENSE
+               Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+          GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+             END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library 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
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Acquisition.png b/VimbaX/doc/VimbaX_Documentation/_images/Acquisition.png
new file mode 100644
index 0000000000000000000000000000000000000000..140888fe9052f59bda96013dfbd14048327db2fd
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Acquisition.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Architecture.svg b/VimbaX/doc/VimbaX_Documentation/_images/Architecture.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d643b96c28d432caa79e5c7513d3176e8e4af056
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_images/Architecture.svg
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 593.6 374.2" style="enable-background:new 0 0 593.6 374.2;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:none;stroke:#696464;stroke-width:2.9984;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+	.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#696464;}
+	.st2{fill:#F2F2F2;}
+	.st3{font-family:'Calibri';}
+	.st4{font-size:12.0106px;}
+	.st5{fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;}
+	.st6{fill:none;stroke:#DA291C;stroke-width:1.4992;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+	.st7{font-size:15.9716px;}
+	.st8{fill:none;stroke:#DA291C;stroke-width:1.1989;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+	.st9{fill:none;stroke:#78BE20;stroke-width:1.4992;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+	.st10{fill:none;stroke:#78BE20;stroke-width:1.1989;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+	.st11{fill:none;stroke:#666666;stroke-width:1.4992;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+	.st12{font-size:10.9885px;}
+	.st13{fill:none;stroke:#797471;stroke-width:1.1989;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+	.st14{font-size:14px;}
+	.st15{fill:none;stroke:#777777;stroke-width:1.4992;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+	.st16{font-size:11px;}
+</style>
+<g>
+	<line class="st0" x1="86.4" y1="34.5" x2="86.4" y2="53.1"/>
+	<polyline class="st1" points="93.7,51.5 86.8,58.5 79.8,51.5 93.7,51.5 	"/>
+</g>
+<g>
+	<line class="st0" x1="294.8" y1="299.1" x2="294.8" y2="332.6"/>
+	<polyline class="st1" points="302.6,330.7 294.9,337.7 287.2,330.7 302.6,330.7 	"/>
+</g>
+<polyline class="st1" points="203.5,175 196.6,182 189.6,175 203.5,175 "/>
+<g>
+	<line class="st0" x1="132.4" y1="206.8" x2="132.4" y2="240.4"/>
+	<polyline class="st1" points="140,238 132.3,244.9 124.6,238 140,238 	"/>
+</g>
+<g>
+	<line class="st0" x1="294.6" y1="205.5" x2="294.6" y2="239.1"/>
+	<polyline class="st1" points="302.3,237.2 294.6,244.2 286.9,237.2 302.3,237.2 	"/>
+</g>
+<line class="st0" x1="464.5" y1="211.2" x2="464.5" y2="240.6"/>
+<polyline class="st1" points="472.3,238.2 464.7,245.1 457,238.2 472.3,238.2 "/>
+<line class="st0" x1="447.1" y1="148.5" x2="447.1" y2="175.5"/>
+<polyline class="st1" points="454,174.1 447.1,181.1 440.1,174.1 454,174.1 "/>
+<line class="st0" x1="445.7" y1="40.7" x2="445.7" y2="114.2"/>
+<polyline class="st1" points="452.7,112.8 445.7,119.8 438.8,112.8 452.7,112.8 "/>
+<rect x="318.2" y="72.7" class="st2" width="3.3" height="6.6"/>
+<text transform="matrix(1 0 0 1 345.1898 92.107)" class="st3 st4"> </text>
+<rect x="275" y="135.1" class="st2" width="4" height="6.6"/>
+<path class="st5" d="M324.8,165.1h263.5c2.3,0,4.2-1.9,4.2-4.2V124c0-2.4-1.9-4.2-4.2-4.2H324.8c-2.4,0-4.3,1.9-4.3,4.2v36.9
+	C320.5,163.1,322.4,165.1,324.8,165.1"/>
+<path class="st6" d="M324.8,165.1h263.5c2.3,0,4.2-1.9,4.2-4.2V124c0-2.4-1.9-4.2-4.2-4.2H324.8c-2.4,0-4.3,1.9-4.3,4.2v36.9
+	C320.5,163.1,322.4,165.1,324.8,165.1z"/>
+<text transform="matrix(1 0 0 1 450.6761 147.2413)" class="st3 st7"> </text>
+<text transform="matrix(1 0 0 1 428.2533 147.2413)" class="st3 st7">C++ API</text>
+<text transform="matrix(1 0 0 1 478.6586 147.241)" class="st3 st7"> </text>
+<rect x="66.7" y="197.4" class="st2" width="8.8" height="6.6"/>
+<rect x="66.7" y="197.4" class="st8" width="8.8" height="6.6"/>
+<path class="st5" d="M5,227.4H588c2.4,0,4.3-1.9,4.3-4.3v-36.8c0-2.4-1.9-4.3-4.3-4.3H5c-2.3,0-4.2,1.9-4.2,4.3v36.8
+	C0.8,225.5,2.7,227.4,5,227.4"/>
+<path class="st6" d="M5,227.4h583.4c2.4,0,4.3-1.9,4.3-4.3v-36.8c0-2.4-1.9-4.3-4.3-4.3H5c-2.3,0-4.2,1.9-4.2,4.3v36.8
+	C0.8,225.5,2.7,227.4,5,227.4z"/>
+<text transform="matrix(1 0 0 1 297.5658 209.53)" class="st3 st7"> </text>
+<text transform="matrix(1 0 0 1 309.7025 209.5307)" class="st3 st7"> </text>
+<text transform="matrix(1 0 0 1 271.2806 209.5302)" class="st3 st7">C API</text>
+<path class="st5" d="M406,289.7h115.7c2.1,0,3.7-1.9,3.7-4.2v-36.9c0-2.4-1.6-4.2-3.7-4.2H406c-2.1,0-3.7,1.9-3.7,4.2v36.9
+	C402.3,287.8,404,289.7,406,289.7"/>
+<path class="st9" d="M406,289.7h115.7c2.1,0,3.7-1.9,3.7-4.2v-36.9c0-2.4-1.6-4.2-3.7-4.2H406c-2.1,0-3.7,1.9-3.7,4.2v36.9
+	C402.3,287.8,404,289.7,406,289.7z"/>
+<text transform="matrix(0.8689 0 0 1 439.9501 277.8889)" class="st3 st4"> </text>
+<text transform="matrix(0.8689 0 0 1 483.6328 277.8889)" class="st3 st4"> </text>
+<path class="st5" d="M235.4,289.7h115.7c2,0,3.7-1.9,3.7-4.2v-36.9c0-2.4-1.7-4.2-3.7-4.2H235.4c-2,0-3.7,1.9-3.7,4.2v36.9
+	C231.8,287.8,233.4,289.7,235.4,289.7"/>
+<path class="st9" d="M235.4,289.7h115.7c2,0,3.7-1.9,3.7-4.2v-36.9c0-2.4-1.7-4.2-3.7-4.2H235.4c-2,0-3.7,1.9-3.7,4.2v36.9
+	C231.8,287.8,233.4,289.7,235.4,289.7z"/>
+<text transform="matrix(0.8689 0 0 1 249.0756 277.2502)" class="st3 st4"> </text>
+<text transform="matrix(0.8689 0 0 1 278.4291 277.2502)" class="st3 st4"> </text>
+<text transform="matrix(0.8689 0 0 1 322.1118 277.2502)" class="st3 st4"> </text>
+<rect x="133.1" y="349.5" class="st2" width="1.7" height="5.3"/>
+<rect x="133.1" y="349.5" class="st10" width="1.7" height="5.3"/>
+<path class="st5" d="M19.6,373.5h555.1c9.6,0,17.6-1.9,17.6-4.3v-27.7c0-2.4-8-4.3-17.6-4.3H19.6c-9.6,0-17.6,1.9-17.6,4.3v27.7
+	C2.1,371.5,10,373.5,19.6,373.5"/>
+<path class="st11" d="M18.7,373.5h555.9c9.6,0,17.6-1.9,17.6-4.3v-27.7c0-2.4-8-4.3-17.6-4.3H18.7c-9.6,0-17.6,1.9-17.6,4.3v27.7
+	C1.1,371.5,9.1,373.5,18.7,373.5z"/>
+<text transform="matrix(0.7979 0 0 1 155.9438 365.8605)" class="st3 st12"> </text>
+<text transform="matrix(0.7979 0 0 1 172.2075 365.8605)" class="st3 st12"> </text>
+<text transform="matrix(0.7979 0 0 1 195.5019 365.8605)" class="st3 st12"> </text>
+<text transform="matrix(0.7979 0 0 1 225.5312 365.8605)" class="st3 st12"> </text>
+<rect x="83.6" y="260.2" class="st2" width="1.8" height="6.6"/>
+<rect x="83.6" y="260.2" class="st13" width="1.8" height="6.6"/>
+<path class="st5" d="M73.5,290.1h115.7c2,0,3.7-1.9,3.7-4.2v-36.9c0-2.4-1.7-4.2-3.7-4.2H73.5c-2.1,0-3.7,1.9-3.7,4.2v36.9
+	C69.8,288.2,71.5,290.1,73.5,290.1"/>
+<path class="st9" d="M73.5,290.1h115.7c2,0,3.7-1.9,3.7-4.2v-36.9c0-2.4-1.7-4.2-3.7-4.2H73.5c-2.1,0-3.7,1.9-3.7,4.2v36.9
+	C69.8,288.2,71.5,290.1,73.5,290.1z"/>
+<text transform="matrix(0.8689 0 0 1 106.3891 278.3224)" class="st3 st4"> </text>
+<text transform="matrix(0.8689 0 0 1 81.6186 278.3224)"><tspan x="0" y="0" class="st3 st4">Vimba Transport L</tspan><tspan x="89.2" y="0" class="st3 st4">ayers</tspan></text>
+<g>
+	<defs>
+		<rect id="SVGID_1_" x="98.9" y="250.3" width="68.6" height="14.7"/>
+	</defs>
+	<clipPath id="SVGID_00000104693914106164224540000009881145297898333866_">
+		<use xlink:href="#SVGID_1_"  style="overflow:visible;"/>
+	</clipPath>
+	
+		<g transform="matrix(1 0 0 1 7.629395e-06 0)" style="clip-path:url(#SVGID_00000104693914106164224540000009881145297898333866_);">
+		
+			<image style="overflow:visible;" width="200" height="42" xlink:href="5C987269.jpg"  transform="matrix(0.3431 0 0 0.3499 98.8815 250.3401)">
+		</image>
+	</g>
+</g>
+<rect x="131.8" y="298.4" class="st2" width="1.7" height="4.2"/>
+<rect x="131.8" y="298.4" class="st13" width="1.7" height="4.2"/>
+<path class="st5" d="M19.9,319.2h554.4c9.6,0,17.6-1.9,17.6-4.3v-19.8c0-2.4-8-4.2-17.6-4.2H19.9c-9.8,0-17.8,1.9-17.8,4.2v19.8
+	C2.1,317.3,10,319.2,19.9,319.2"/>
+<path class="st9" d="M19,319.2h555.7c9.6,0,17.6-1.9,17.6-4.3v-19.8c0-2.4-8-4.2-17.6-4.2H19c-9.9,0-17.9,1.9-17.9,4.2v19.8
+	C1.1,317.3,9.1,319.2,19,319.2z"/>
+<text transform="matrix(0.7979 0 0 1 160.933 300.1076)" class="st3 st4"> </text>
+<text transform="matrix(0.7979 0 0 1 183.2153 300.1076)" class="st3 st4"> </text>
+<text transform="matrix(0.8834 0 0 1 107.538 308.1076)" class="st3 st4"> Optional or mandatory drivers depending on camera interface, vendor, platform, and OS </text>
+<text transform="matrix(0.7979 0 0 1 209.2045 300.1076)" class="st3 st4"> </text>
+<g>
+	<polyline class="st1" points="287.6,68 275.6,67.5 276.1,56.1 287.6,68 	"/>
+	<line class="st0" x1="340.4" y1="22.4" x2="279.2" y2="63.9"/>
+</g>
+<line class="st0" x1="84.5" y1="103.2" x2="84.5" y2="177.2"/>
+<line class="st0" x1="196.2" y1="35.4" x2="196.2" y2="175.5"/>
+<line class="st0" x1="255.7" y1="34" x2="255.7" y2="52.9"/>
+<polyline class="st1" points="262.6,51.5 255.7,58.5 248.7,51.5 262.6,51.5 "/>
+<rect x="26.4" y="14.8" class="st2" width="3.1" height="5"/>
+<path class="st5" d="M166.7,40.3h118.5c1.4,0,2.5-1.9,2.5-4.2V10.6c0-2.4-1.1-4.3-2.5-4.3H166.7c-1.4,0-2.5,1.9-2.5,4.3v25.5
+	C164.1,38.4,165.3,40.3,166.7,40.3"/>
+<path class="st11" d="M166.6,40.3h117.6c1.4,0,2.5-1.9,2.5-4.2V10.6c0-2.4-1.1-4.3-2.5-4.3H166.6c-1.4,0-2.5,1.9-2.5,4.3v25.5
+	C164.1,38.4,165.3,40.3,166.6,40.3z"/>
+<text transform="matrix(1 0 0 1 187.813 28.1565)" class="st3 st14">C</text>
+<text transform="matrix(1 0 0 1 196.3091 28.1563)" class="st3 st7"> </text>
+<text transform="matrix(1 0 0 1 199.9498 28.1562)"><tspan x="0" y="0" class="st3 st14">A</tspan><tspan x="8.1" y="0" class="st3 st14">ppli</tspan><tspan x="29.3" y="0" class="st3 st14">c</tspan><tspan x="35.2" y="0" class="st3 st14">a</tspan><tspan x="41.9" y="0" class="st3 st14">tion</tspan></text>
+<rect x="292.2" y="17.8" class="st2" width="3.2" height="5"/>
+<path class="st5" d="M328.3,40.3h257.9c2.9,0,5.4-1.9,5.4-4.2V10.6c0-2.4-2.4-4.3-5.4-4.3H328.3c-2.9,0-5.4,1.9-5.4,4.3v25.5
+	C322.9,38.4,325.3,40.3,328.3,40.3"/>
+<path class="st11" d="M328.3,40.3h258.9c2.9,0,5.4-1.9,5.4-4.2V10.6c0-2.4-2.5-4.3-5.4-4.3H328.3c-2.9,0-5.4,1.9-5.4,4.3v25.5
+	C322.9,38.4,325.3,40.3,328.3,40.3z"/>
+<text transform="matrix(1 0 0 1 361.6968 28.1563)" class="st3 st7"> </text>
+<text transform="matrix(1 0 0 1 401.3384 28.1562)"><tspan x="0" y="0" class="st3 st14">C++ A</tspan><tspan x="32.7" y="0" class="st3 st14">ppli</tspan><tspan x="53.9" y="0" class="st3 st14">c</tspan><tspan x="59.8" y="0" class="st3 st14">a</tspan><tspan x="66.5" y="0" class="st3 st14">tion</tspan></text>
+<text transform="matrix(1 0 0 1 362.2535 85.9732)" class="st3 st7"> </text>
+<text transform="matrix(1 0 0 1 390.2994 85.9734)" class="st3 st7"> </text>
+<path class="st5" d="M179,103.8h91c2.4,0,4.2-1.9,4.2-4.2V62.7c0-2.3-1.9-4.2-4.2-4.2h-91c-2.3,0-4.2,1.9-4.2,4.2v36.9
+	C174.8,101.9,176.7,103.8,179,103.8"/>
+<path class="st6" d="M179,103.8h91c2.4,0,4.2-1.9,4.2-4.2V62.7c0-2.3-1.9-4.2-4.2-4.2h-91c-2.3,0-4.2,1.9-4.2,4.2v36.9
+	C174.8,101.9,176.7,103.8,179,103.8z"/>
+<text transform="matrix(1 0 0 1 212.8629 76.199)" class="st3 st4"> </text>
+<text transform="matrix(1 0 0 1 207.5416 76.1987)" class="st3 st4"> Image</text>
+<text transform="matrix(1 0 0 1 181.6871 91.1524)"><tspan x="0" y="0" class="st3 st4">Transform Lib</tspan><tspan x="67.3" y="0" class="st3 st4">rary</tspan></text>
+<path class="st5" d="M14.7,40.3H139c1.4,0,2.6-1.9,2.6-4.2V10.6c0-2.4-1.2-4.3-2.6-4.3H14.7c-1.4,0-2.6,1.9-2.6,4.3v25.5
+	C12.1,38.4,13.3,40.3,14.7,40.3"/>
+<path class="st15" d="M14.7,40.3H139c1.4,0,2.6-1.9,2.6-4.2V10.6c0-2.4-1.2-4.3-2.6-4.3H14.7c-1.4,0-2.6,1.9-2.6,4.3v25.5
+	C12.1,38.4,13.3,40.3,14.7,40.3z"/>
+<text transform="matrix(1 0 0 1 20.4781 28.2056)" class="st3 st14">Python Application</text>
+<text transform="matrix(1 0 0 1 196.9468 37.2058)" class="st3 st7"> </text>
+<path class="st5" d="M5.8,103.7h140.7c2.3,0,4.2-1.9,4.2-4.2V62.6c0-2.3-1.9-4.2-4.2-4.2H5.8c-2.4,0-4.2,1.9-4.2,4.2v36.9
+	C1.6,101.9,3.4,103.7,5.8,103.7"/>
+<path class="st6" d="M5.8,103.7h140.7c2.3,0,4.2-1.9,4.2-4.2V62.6c0-2.3-1.9-4.2-4.2-4.2H5.8c-2.4,0-4.2,1.9-4.2,4.2v36.9
+	C1.6,101.9,3.4,103.7,5.8,103.7z"/>
+<text transform="matrix(1 0 0 1 49.7184 76.8902)" class="st3 st14">Python API</text>
+<text transform="matrix(1 0 0 1 70.3082 85.89)" class="st3 st7"> </text>
+<text transform="matrix(1 0 0 1 98.3541 85.8902)" class="st3 st7"> </text>
+<text transform="matrix(1 0 0 1 11.1962 93.5235)" class="st3 st16">(Wrapper around VMB C API)</text>
+<text transform="matrix(1 0 0 1 492.3922 28.9536)" class="st3 st7"> </text>
+<text transform="matrix(1 0 0 1 493.0299 38.0031)" class="st3 st7"> </text>
+<polyline class="st1" points="91.5,174.9 84.5,181.8 77.6,174.9 91.5,174.9 "/>
+<text transform="matrix(0.8689 0 0 1 242.145 278.051)"><tspan x="0" y="0" class="st3 st4">SynViewTransport L</tspan><tspan x="96.6" y="0" class="st3 st4">ayers</tspan></text>
+<text transform="matrix(0.8689 0 0 1 406.5663 278.6887)"><tspan x="0" y="0" class="st3 st4">3rd-Party Transport L</tspan><tspan x="103.7" y="0" class="st3 st4">ayers</tspan></text>
+<text transform="matrix(0.879 0 0 1 146.9719 361.0391)" class="st3 st4">Network interface card, USB interface card, etc.</text>
+<g>
+	<defs>
+		<rect id="SVGID_00000109716945612027810330000000137675270492656550_" x="261.5" y="249.7" width="68.6" height="14.7"/>
+	</defs>
+	<clipPath id="SVGID_00000114768155881533273220000001640316984555330447_">
+		<use xlink:href="#SVGID_00000109716945612027810330000000137675270492656550_"  style="overflow:visible;"/>
+	</clipPath>
+	
+		<g transform="matrix(1 0 0 1 0 1.525879e-05)" style="clip-path:url(#SVGID_00000114768155881533273220000001640316984555330447_);">
+		
+			<image style="overflow:visible;" width="200" height="42" xlink:href="5C98726B.jpg"  transform="matrix(0.3431 0 0 0.3499 261.524 249.7448)">
+		</image>
+	</g>
+</g>
+<g>
+	<defs>
+		<rect id="SVGID_00000180345835276189697440000004994284856864906409_" x="431.6" y="250.5" width="68.6" height="14.7"/>
+	</defs>
+	<clipPath id="SVGID_00000049936212552144839710000008569432521233767070_">
+		<use xlink:href="#SVGID_00000180345835276189697440000004994284856864906409_"  style="overflow:visible;"/>
+	</clipPath>
+	<g style="clip-path:url(#SVGID_00000049936212552144839710000008569432521233767070_);">
+		
+			<image style="overflow:visible;" width="200" height="42" xlink:href="5C98726E.jpg"  transform="matrix(0.3431 0 0 0.3499 431.6132 250.4964)">
+		</image>
+	</g>
+</g>
+<polyline class="st1" points="167.4,76.7 174.4,83.7 167.4,90.7 167.4,76.7 "/>
+<line class="st0" x1="152" y1="84.1" x2="170.5" y2="84.1"/>
+</svg>
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Auto-ROI.png b/VimbaX/doc/VimbaX_Documentation/_images/Auto-ROI.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b26dd38a39cb1aa611bfa29e5a3439753ba343c
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Auto-ROI.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Brightness.png b/VimbaX/doc/VimbaX_Documentation/_images/Brightness.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e4d8afa215c30780b6037819bd5cf34c13c0e16
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Brightness.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/CPP-UML.svg b/VimbaX/doc/VimbaX_Documentation/_images/CPP-UML.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9c943d418611068aeedeef48e46c7da1a2c92d6c
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_images/CPP-UML.svg
@@ -0,0 +1,121 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1254" height="747" viewBox="0 0 1254 747">
+  <defs>
+    <clipPath id="clip-CPP-UML">
+      <rect width="1254" height="747"/>
+    </clipPath>
+  </defs>
+  <g id="CPP-UML" clip-path="url(#clip-CPP-UML)">
+    <rect width="1254" height="747" fill="#fff"/>
+    <line id="Line_16" data-name="Line 16" x2="50" transform="translate(995 162.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <line id="Line_13" data-name="Line 13" x2="50" transform="translate(295.5 162.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <line id="Line_14" data-name="Line 14" x2="50" transform="translate(527 162.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <line id="Line_15" data-name="Line 15" x2="50" transform="translate(746 162.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <g id="Group_2" data-name="Group 2" transform="translate(-91 -19)">
+      <rect id="Rectangle_1" data-name="Rectangle 1" width="289" height="386" transform="translate(100 40)" fill="#f2f2f2"/>
+      <text id="VmbSystem_Startup_Shutdown_GetInterfacesByTL_GetCamerasByTL_GetCamerasByInterface_GetTransportLayers_GetTransportLayersByID_GetCameras_GetCameraByID_OpenCameraByID_RegisterCameraListObserver_UnregisterCameraListObserver_" data-name="VmbSystem
+
+
+Startup()
+Shutdown()
+GetInterfacesByTL()
+GetCamerasByTL()
+GetCamerasByInterface()
+GetTransportLayers()
+GetTransportLayersByID()
+GetCameras()
+GetCameraByID()
+OpenCameraByID()
+RegisterCameraListObserver()
+UnregisterCameraListObserver()" transform="translate(113 70)" font-size="20" font-family="Calibri-Bold, Calibri" font-weight="700"><tspan x="0" y="0">VmbSystem</tspan><tspan x="0" y="24"></tspan><tspan x="0" y="48"></tspan><tspan font-family="Calibri" font-weight="400"><tspan x="0" y="72">Startup()</tspan><tspan x="0" y="96">Shutdown()</tspan><tspan x="0" y="120">GetInterfacesByTL()</tspan><tspan x="0" y="144">GetCamerasByTL()</tspan><tspan x="0" y="168">GetCamerasByInterface()</tspan><tspan x="0" y="192">GetTransportLayers()</tspan><tspan x="0" y="216">GetTransportLayersByID()</tspan><tspan x="0" y="240">GetCameras()</tspan><tspan x="0" y="264">GetCameraByID()</tspan><tspan x="0" y="288">OpenCameraByID()</tspan><tspan x="0" y="312">RegisterCameraListObserver()</tspan><tspan x="0" y="336">UnregisterCameraListObserver()</tspan></tspan></text>
+      <line id="Line_1" data-name="Line 1" x2="289" y2="1" transform="translate(100.5 83.5)" fill="none" stroke="#000" stroke-width="1"/>
+      <line id="Line_2" data-name="Line 2" x2="289" y2="1" transform="translate(100.5 110.5)" fill="none" stroke="#000" stroke-width="1"/>
+    </g>
+    <g id="Group_3" data-name="Group 3" transform="translate(-172 -17)">
+      <rect id="Rectangle_2" data-name="Rectangle 2" width="184" height="242" transform="translate(515 38)" fill="#f2f2f2"/>
+      <text id="Interface_GetID_GetName_GetPath_GetType_GetCameras_GetTransportLayer_" data-name="Interface*
+
+
+GetID()
+GetName()
+GetPath()
+GetType()
+GetCameras()
+GetTransportLayer()
+
+" transform="translate(526 70)" font-size="20" font-family="Calibri-Bold, Calibri" font-weight="700"><tspan x="0" y="0">Interface*</tspan><tspan x="0" y="24"></tspan><tspan x="0" y="48"></tspan><tspan font-family="Calibri" font-weight="400"><tspan x="0" y="72">GetID()</tspan><tspan x="0" y="96">GetName()</tspan><tspan x="0" y="120">GetPath()</tspan><tspan x="0" y="144">GetType()</tspan><tspan x="0" y="168">GetCameras()</tspan><tspan x="0" y="192">GetTransportLayer()</tspan><tspan x="0" y="216"></tspan><tspan x="0" y="240"></tspan></tspan></text>
+      <line id="Line_3" data-name="Line 3" x2="184" transform="translate(515.5 85.5)" fill="none" stroke="#000" stroke-width="1"/>
+      <line id="Line_4" data-name="Line 4" x2="184" transform="translate(515.5 111.5)" fill="none" stroke="#000" stroke-width="1"/>
+    </g>
+    <g id="Group_4" data-name="Group 4" transform="translate(-256 -17)">
+      <rect id="Rectangle_3" data-name="Rectangle 3" width="177" height="242" transform="translate(827 40)" fill="#f2f2f2"/>
+      <text id="TransportLayer_GetID_GetName_GetPath_GetType_GetInterfaces_GetCameras_" data-name="TransportLayer*
+
+
+GetID()
+GetName()
+GetPath()
+GetType()
+GetInterfaces()
+GetCameras()
+" transform="translate(840 70)" font-size="20" font-family="Calibri-Bold, Calibri" font-weight="700"><tspan x="0" y="0">TransportLayer*</tspan><tspan x="0" y="24"></tspan><tspan x="0" y="48"></tspan><tspan font-family="Calibri" font-weight="400"><tspan x="0" y="72">GetID()</tspan><tspan x="0" y="96">GetName()</tspan><tspan x="0" y="120">GetPath()</tspan><tspan x="0" y="144">GetType()</tspan><tspan x="0" y="168">GetInterfaces()</tspan><tspan x="0" y="192">GetCameras()</tspan><tspan x="0" y="216"></tspan></tspan></text>
+      <line id="Line_5" data-name="Line 5" x2="177" transform="translate(827.5 85.5)" fill="none" stroke="#000" stroke-width="1"/>
+      <line id="Line_6" data-name="Line 6" x2="177" transform="translate(827.5 111.5)" fill="none" stroke="#000" stroke-width="1"/>
+    </g>
+    <g id="Group_5" data-name="Group 5" transform="translate(-310 -17)">
+      <rect id="Rectangle_4" data-name="Rectangle 4" width="208" height="333" transform="translate(1103 38)" fill="#f2f2f2"/>
+      <text id="Camera_Open_Close_GetInterface_GetTransportLayer_GetLocalDevice_GetFeatures_GetFeaturesByName_AnnounceFrame_CueFrame_FlushFrame_" data-name="Camera
+
+
+Open()
+Close()
+GetInterface()
+GetTransportLayer()
+GetLocalDevice()
+GetFeatures()
+GetFeaturesByName()
+AnnounceFrame()
+CueFrame()
+FlushFrame()" transform="translate(1116 70)" font-size="20" font-family="Calibri-Bold, Calibri" font-weight="700"><tspan x="0" y="0">Camera</tspan><tspan x="0" y="24"></tspan><tspan x="0" y="48"></tspan><tspan font-family="Calibri" font-weight="400"><tspan x="0" y="72">Open()</tspan><tspan x="0" y="96">Close()</tspan><tspan x="0" y="120">GetInterface()</tspan><tspan x="0" y="144">GetTransportLayer()</tspan><tspan x="0" y="168">GetLocalDevice()</tspan><tspan x="0" y="192">GetFeatures()</tspan><tspan x="0" y="216">GetFeaturesByName()</tspan><tspan x="0" y="240">AnnounceFrame()</tspan><tspan x="0" y="264">CueFrame()</tspan><tspan x="0" y="288">FlushFrame()</tspan></tspan></text>
+      <line id="Line_7" data-name="Line 7" x2="208" transform="translate(1103.5 85.5)" fill="none" stroke="#000" stroke-width="1"/>
+      <line id="Line_8" data-name="Line 8" x2="208" transform="translate(1103.5 111.5)" fill="none" stroke="#000" stroke-width="1"/>
+    </g>
+    <g id="Group_6" data-name="Group 6" transform="translate(-385 -17)">
+      <rect id="Rectangle_5" data-name="Rectangle 5" width="191" height="191" transform="translate(1430 40)" fill="#f2f2f2"/>
+      <text id="Frame_GetImage_RegisterObserver_UnregisterOberver_AccessChunkData_" data-name="Frame
+
+
+GetImage()
+RegisterObserver()
+UnregisterOberver()
+AccessChunkData()" transform="translate(1447 70)" font-size="20" font-family="Calibri-Bold, Calibri" font-weight="700"><tspan x="0" y="0">Frame</tspan><tspan x="0" y="24"></tspan><tspan x="0" y="48"></tspan><tspan font-family="Calibri" font-weight="400"><tspan x="0" y="72">GetImage()</tspan><tspan x="0" y="96">RegisterObserver()</tspan><tspan x="0" y="120">UnregisterOberver()</tspan><tspan x="0" y="144">AccessChunkData()</tspan></tspan></text>
+      <line id="Line_9" data-name="Line 9" x2="191" transform="translate(1430.5 85.5)" fill="none" stroke="#000" stroke-width="1"/>
+      <line id="Line_10" data-name="Line 10" x2="191" transform="translate(1430.5 111.5)" fill="none" stroke="#000" stroke-width="1"/>
+    </g>
+    <g id="Group_1" data-name="Group 1" transform="translate(-352 -62)">
+      <rect id="Rectangle_6" data-name="Rectangle 6" width="211" height="259" transform="translate(919 520)" fill="#f2f2f2"/>
+      <text id="FeatureContainer_GetHandle_SetHandle_GetFeatures_GetFeatureByName_GetValue_SetValue_RunCommand_" data-name="FeatureContainer
+
+
+GetHandle()
+SetHandle()
+GetFeatures()
+GetFeatureByName()               
+GetValue()
+SetValue()
+RunCommand()
+" transform="translate(932 549)" font-size="20" font-family="Calibri-Bold, Calibri" font-weight="700"><tspan x="0" y="0">FeatureContainer</tspan><tspan x="0" y="24"></tspan><tspan x="0" y="48"></tspan><tspan font-family="Calibri" font-weight="400"><tspan x="0" y="72">GetHandle()</tspan><tspan x="0" y="96">SetHandle()</tspan><tspan x="0" y="120">GetFeatures()</tspan><tspan x="0" y="144" xml:space="preserve">GetFeatureByName()               </tspan><tspan x="0" y="168">GetValue()</tspan><tspan x="0" y="192">SetValue()</tspan><tspan x="0" y="216">RunCommand()</tspan><tspan x="0" y="240"></tspan></tspan></text>
+      <line id="Line_11" data-name="Line 11" x2="211" transform="translate(919.5 563.5)" fill="none" stroke="#000" stroke-width="1"/>
+      <line id="Line_12" data-name="Line 12" x2="211" transform="translate(919.5 589.5)" fill="none" stroke="#000" stroke-width="1"/>
+    </g>
+    <line id="Line_17" data-name="Line 17" y2="18" transform="translate(659.5 428.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <line id="Line_18" data-name="Line 18" x2="525" transform="translate(134.5 428.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <line id="Line_19" data-name="Line 19" y1="21" transform="translate(134.5 407.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <line id="Line_20" data-name="Line 20" y1="167" transform="translate(432.5 261.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <line id="Line_21" data-name="Line 21" x2="481" transform="translate(659.5 428.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <line id="Line_22" data-name="Line 22" y2="214" transform="translate(1140.5 214.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <line id="Line_23" data-name="Line 23" y2="74" transform="translate(891.5 354.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <line id="Line_24" data-name="Line 24" y2="167" transform="translate(659.5 261.5)" fill="none" stroke="#707070" stroke-width="1"/>
+    <text id="_Required_for_advanced_configuration_only" data-name="* Required for advanced configuration only" transform="translate(888 711)" font-size="20" font-family="Calibri"><tspan x="0" y="0">* Required for advanced configuration only</tspan></text>
+    <path id="Polygon_1" data-name="Polygon 1" d="M9.2,3.773a2,2,0,0,1,3.609,0l7.827,16.365A2,2,0,0,1,18.827,23H3.173a2,2,0,0,1-1.8-2.863Z" transform="translate(670 461) rotate(180)"/>
+  </g>
+</svg>
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Color.png b/VimbaX/doc/VimbaX_Documentation/_images/Color.png
new file mode 100644
index 0000000000000000000000000000000000000000..44e1d97e15468b8b57b22fc1031214d1ae1a040f
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Color.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/ConfigureIP.png b/VimbaX/doc/VimbaX_Documentation/_images/ConfigureIP.png
new file mode 100644
index 0000000000000000000000000000000000000000..1def4fe95efa61feeae55c090460d4c260d6fe77
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/ConfigureIP.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Convolution.PNG b/VimbaX/doc/VimbaX_Documentation/_images/Convolution.PNG
new file mode 100644
index 0000000000000000000000000000000000000000..8b302141b3becd770b9490ab8cb84848a98eab81
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Convolution.PNG differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/FW-Update.png b/VimbaX/doc/VimbaX_Documentation/_images/FW-Update.png
new file mode 100644
index 0000000000000000000000000000000000000000..04cb644aee2b824c4d17d704ae66057b479ace1f
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/FW-Update.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/FW-Updater.png b/VimbaX/doc/VimbaX_Documentation/_images/FW-Updater.png
new file mode 100644
index 0000000000000000000000000000000000000000..f465290954703cf7bd39fb85851d79547fd42e6d
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/FW-Updater.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/File.png b/VimbaX/doc/VimbaX_Documentation/_images/File.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3749433dcb224225318e3ac7864122e4fd8aa88
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/File.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Freerun.png b/VimbaX/doc/VimbaX_Documentation/_images/Freerun.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c223619291b950b4ae03408a42345053d331025
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Freerun.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/GenTL-modules.png b/VimbaX/doc/VimbaX_Documentation/_images/GenTL-modules.png
new file mode 100644
index 0000000000000000000000000000000000000000..1067f47cf29cbe1f8c788b135cb5ac8498547fde
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/GenTL-modules.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Image-series-button.png b/VimbaX/doc/VimbaX_Documentation/_images/Image-series-button.png
new file mode 100644
index 0000000000000000000000000000000000000000..da802708980e1b56fb0080377a321f684e1c44f3
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Image-series-button.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/LoadSave.png b/VimbaX/doc/VimbaX_Documentation/_images/LoadSave.png
new file mode 100644
index 0000000000000000000000000000000000000000..581b5863f613ae6d0a480809155a6bab07bdbe5b
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/LoadSave.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Processing.PNG b/VimbaX/doc/VimbaX_Documentation/_images/Processing.PNG
new file mode 100644
index 0000000000000000000000000000000000000000..63c0cef8134bba19016edd23aaf8741160e72e2e
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Processing.PNG differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Properties.png b/VimbaX/doc/VimbaX_Documentation/_images/Properties.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c2d746295419c6e425e0f68c72aaf4cb3f30fa0
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Properties.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/ROI.png b/VimbaX/doc/VimbaX_Documentation/_images/ROI.png
new file mode 100644
index 0000000000000000000000000000000000000000..5b1f7de11471e37dcece0d982267df2e90cfb021
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/ROI.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Supported-transformations.svg b/VimbaX/doc/VimbaX_Documentation/_images/Supported-transformations.svg
new file mode 100644
index 0000000000000000000000000000000000000000..de362933619699262d637c9fbd2ea29c0a818883
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_images/Supported-transformations.svg
@@ -0,0 +1,986 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 1920 1080" style="enable-background:new 0 0 1920 1080;" xml:space="preserve">
+<style type="text/css">
+	
+		.st0{clip-path:url(#SVGID_00000163054067779916468340000009930811868385642906_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;}
+	
+		.st1{clip-path:url(#SVGID_00000163054067779916468340000009930811868385642906_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+	.st2{clip-path:url(#SVGID_00000163054067779916468340000009930811868385642906_);}
+	.st3{font-family:'ArialMT';}
+	.st4{font-size:11.9265px;}
+	.st5{fill:#3F3F3F;}
+	.st6{font-family:'Calibri-Bold';}
+	.st7{fill:#3F3F76;}
+	.st8{clip-path:url(#SVGID_00000161608505715032835620000010383292600380761507_);}
+	.st9{clip-path:url(#SVGID_00000183210813609594301050000007431976551333122448_);}
+	
+		.st10{clip-path:url(#SVGID_00000080177886583976807170000000409659331657951882_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;}
+	
+		.st11{clip-path:url(#SVGID_00000080177886583976807170000000409659331657951882_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;}
+	.st12{clip-path:url(#SVGID_00000080177886583976807170000000409659331657951882_);fill-rule:evenodd;clip-rule:evenodd;}
+	
+		.st13{clip-path:url(#SVGID_00000080177886583976807170000000409659331657951882_);fill:none;stroke:#D4D4D4;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;}
+</style>
+<g>
+	<g>
+		<defs>
+			<polygon id="SVGID_1_" points="318,96.9 1513.3,96.9 1513.3,983.1 318,983.1 318,96.9 			"/>
+		</defs>
+		<clipPath id="SVGID_00000016784423041618352700000006900120821042221706_">
+			<use xlink:href="#SVGID_1_"  style="overflow:visible;"/>
+		</clipPath>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			528.9,96.1 528.9,118.5 1513.3,118.5 1513.3,96.1 528.9,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,117.7 317.3,140.1 1513.3,140.1 1513.3,117.7 317.3,117.7 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,139.3 317.3,161.7 529.6,161.7 529.6,139.3 317.3,139.3 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,161 317.3,183.3 1602.7,183.3 1602.7,161 317.3,161 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,182.6 317.3,204.9 529.6,204.9 529.6,182.6 317.3,182.6 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,204.2 317.3,226.6 1602.7,226.6 1602.7,204.2 317.3,204.2 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,225.8 317.3,248.2 529.6,248.2 529.6,225.8 317.3,225.8 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,247.4 317.3,269.8 1602.7,269.8 1602.7,247.4 317.3,247.4 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,269 317.3,291.4 529.6,291.4 529.6,269 317.3,269 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,290.7 317.3,313 1602.7,313 1602.7,290.7 317.3,290.7 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,312.3 317.3,334.6 529.6,334.6 529.6,312.3 317.3,312.3 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,333.9 317.3,356.3 1602.7,356.3 1602.7,333.9 317.3,333.9 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,355.5 317.3,377.9 529.6,377.9 529.6,355.5 317.3,355.5 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,377.1 317.3,399.5 1602.7,399.5 1602.7,377.1 317.3,377.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,398.7 317.3,421.1 529.6,421.1 529.6,398.7 317.3,398.7 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,420.4 317.3,442.7 1602.7,442.7 1602.7,420.4 317.3,420.4 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,442 317.3,464.3 529.6,464.3 529.6,442 317.3,442 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,463.6 317.3,486 1602.7,486 1602.7,463.6 317.3,463.6 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,485.2 317.3,507.6 529.6,507.6 529.6,485.2 317.3,485.2 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,506.8 317.3,529.2 1602.7,529.2 1602.7,506.8 317.3,506.8 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,528.4 317.3,550.8 529.6,550.8 529.6,528.4 317.3,528.4 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,550.1 317.3,572.4 1602.7,572.4 1602.7,550.1 317.3,550.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,571.7 317.3,594 529.6,594 529.6,571.7 317.3,571.7 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,593.3 317.3,615.7 1602.7,615.7 1602.7,593.3 317.3,593.3 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,614.9 317.3,637.3 529.6,637.3 529.6,614.9 317.3,614.9 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,636.5 317.3,658.9 1602.7,658.9 1602.7,636.5 317.3,636.5 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,658.1 317.3,680.5 529.6,680.5 529.6,658.1 317.3,658.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,679.8 317.3,702.1 1602.7,702.1 1602.7,679.8 317.3,679.8 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,701.4 317.3,723.7 529.6,723.7 529.6,701.4 317.3,701.4 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,723 317.3,745.4 1602.7,745.4 1602.7,723 317.3,723 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,744.6 317.3,767 529.6,767 529.6,744.6 317.3,744.6 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,766.2 317.3,788.6 1602.7,788.6 1602.7,766.2 317.3,766.2 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,787.8 317.3,810.2 529.6,810.2 529.6,787.8 317.3,787.8 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,809.5 317.3,831.8 1602.7,831.8 1602.7,809.5 317.3,809.5 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,831.1 317.3,853.4 529.6,853.4 529.6,831.1 317.3,831.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,852.7 317.3,875.1 1602.7,875.1 1602.7,852.7 317.3,852.7 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" points="
+			317.3,874.3 317.3,896.7 529.6,896.7 529.6,874.3 317.3,874.3 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);fill-rule:evenodd;clip-rule:evenodd;fill:#F2F2F2;" points="
+			317.3,895.9 317.3,918.3 1602.7,918.3 1602.7,895.9 317.3,895.9 		"/>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 113.258)"><tspan x="0" y="0" class="st3 st4">Source</tspan><tspan x="37.8" y="0" class="st3 st4"> </tspan><tspan x="41.4" y="0" class="st3 st4">↓</tspan><tspan x="47" y="0" class="st3 st4">   </tspan><tspan x="57.7" y="0" class="st3 st4">|</tspan><tspan x="61.1" y="0" class="st3 st4">  </tspan><tspan x="68.3" y="0" class="st3 st4">Destination</tspan><tspan x="128" y="0" class="st3 st4"> </tspan><tspan x="131.6" y="0" class="st3 st4">→</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 531.1403 113.258)"><tspan x="0" y="0" class="st5 st6 st4">M</tspan><tspan x="10.4" y="0" class="st5 st6 st4">o</tspan><tspan x="17.1" y="0" class="st5 st6 st4">n</tspan><tspan x="23.8" y="0" class="st5 st6 st4">o</tspan><tspan x="30.5" y="0" class="st5 st6 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 620.5621 113.258)"><tspan x="0" y="0" class="st5 st6 st4">C</tspan><tspan x="6" y="0" class="st5 st6 st4">o</tspan><tspan x="12.7" y="0" class="st5 st6 st4">l</tspan><tspan x="15.6" y="0" class="st5 st6 st4">o</tspan><tspan x="22.3" y="0" class="st5 st6 st4">r</tspan><tspan x="26.8" y="0" class="st5 st6 st4">**</tspan><tspan x="38.7" y="0" class="st5 st6 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 709.984 113.258)"><tspan x="0" y="0" class="st5 st6 st4">M</tspan><tspan x="10.4" y="0" class="st5 st6 st4">o</tspan><tspan x="17.1" y="0" class="st5 st6 st4">n</tspan><tspan x="23.8" y="0" class="st5 st6 st4">o</tspan><tspan x="30.5" y="0" class="st5 st6 st4">1</tspan><tspan x="36.5" y="0" class="st5 st6 st4">0</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 799.4137 113.258)"><tspan x="0" y="0" class="st5 st6 st4">C</tspan><tspan x="6" y="0" class="st5 st6 st4">o</tspan><tspan x="12.7" y="0" class="st5 st6 st4">l</tspan><tspan x="15.6" y="0" class="st5 st6 st4">o</tspan><tspan x="22.3" y="0" class="st5 st6 st4">r</tspan><tspan x="26.8" y="0" class="st5 st6 st4">**</tspan><tspan x="38.7" y="0" class="st5 st6 st4">1</tspan><tspan x="44.7" y="0" class="st5 st6 st4">0</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 888.8356 113.258)"><tspan x="0" y="0" class="st5 st6 st4">M</tspan><tspan x="10.4" y="0" class="st5 st6 st4">o</tspan><tspan x="17.1" y="0" class="st5 st6 st4">n</tspan><tspan x="23.8" y="0" class="st5 st6 st4">o</tspan><tspan x="30.5" y="0" class="st5 st6 st4">1</tspan><tspan x="36.5" y="0" class="st5 st6 st4">2</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 978.2574 113.258)"><tspan x="0" y="0" class="st5 st6 st4">C</tspan><tspan x="6" y="0" class="st5 st6 st4">o</tspan><tspan x="12.7" y="0" class="st5 st6 st4">l</tspan><tspan x="15.6" y="0" class="st5 st6 st4">o</tspan><tspan x="22.3" y="0" class="st5 st6 st4">r</tspan><tspan x="26.8" y="0" class="st5 st6 st4">**</tspan><tspan x="38.7" y="0" class="st5 st6 st4">1</tspan><tspan x="44.7" y="0" class="st5 st6 st4">2</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1067.6793 113.258)"><tspan x="0" y="0" class="st5 st6 st4">M</tspan><tspan x="10.4" y="0" class="st5 st6 st4">o</tspan><tspan x="17.1" y="0" class="st5 st6 st4">n</tspan><tspan x="23.8" y="0" class="st5 st6 st4">o</tspan><tspan x="30.5" y="0" class="st5 st6 st4">1</tspan><tspan x="36.5" y="0" class="st5 st6 st4">4</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1157.1012 113.258)"><tspan x="0" y="0" class="st5 st6 st4">C</tspan><tspan x="6" y="0" class="st5 st6 st4">o</tspan><tspan x="12.7" y="0" class="st5 st6 st4">l</tspan><tspan x="15.6" y="0" class="st5 st6 st4">o</tspan><tspan x="22.3" y="0" class="st5 st6 st4">r</tspan><tspan x="26.8" y="0" class="st5 st6 st4">**</tspan><tspan x="38.7" y="0" class="st5 st6 st4">1</tspan><tspan x="44.7" y="0" class="st5 st6 st4">4</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1246.5309 113.258)"><tspan x="0" y="0" class="st5 st6 st4">M</tspan><tspan x="10.4" y="0" class="st5 st6 st4">o</tspan><tspan x="17.1" y="0" class="st5 st6 st4">n</tspan><tspan x="23.8" y="0" class="st5 st6 st4">o</tspan><tspan x="30.5" y="0" class="st5 st6 st4">1</tspan><tspan x="36.5" y="0" class="st5 st6 st4">6</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1335.9606 113.258)"><tspan x="0" y="0" class="st5 st6 st4">C</tspan><tspan x="6" y="0" class="st5 st6 st4">o</tspan><tspan x="12.7" y="0" class="st5 st6 st4">l</tspan><tspan x="15.6" y="0" class="st5 st6 st4">o</tspan><tspan x="22.3" y="0" class="st5 st6 st4">r</tspan><tspan x="26.8" y="0" class="st5 st6 st4">**</tspan><tspan x="38.7" y="0" class="st5 st6 st4">1</tspan><tspan x="44.7" y="0" class="st5 st6 st4">6</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1425.3824 113.258)"><tspan x="0" y="0" class="st5 st6 st4">Y</tspan><tspan x="6" y="0" class="st5 st6 st4">u</tspan><tspan x="12.7" y="0" class="st5 st6 st4">v</tspan><tspan x="18.6" y="0" class="st5 st6 st4">422</tspan><tspan x="36.5" y="0" class="st5 st6 st4">_</tspan><tspan x="42.5" y="0" class="st5 st6 st4">8</tspan><tspan x="48.5" y="0" class="st5 st6 st4">**</tspan><tspan x="60.4" y="0" class="st5 st6 st4">*</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 134.8674)"><tspan x="0" y="0" class="st7 st3 st4">M</tspan><tspan x="9.4" y="0" class="st7 st3 st4">o</tspan><tspan x="15.7" y="0" class="st7 st3 st4">n</tspan><tspan x="22.1" y="0" class="st7 st3 st4">o</tspan><tspan x="28.4" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 134.8674)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 134.8674)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1465.6168 134.8674)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 156.4924)"><tspan x="0" y="0" class="st7 st3 st4">M</tspan><tspan x="9.4" y="0" class="st7 st3 st4">o</tspan><tspan x="15.7" y="0" class="st7 st3 st4">n</tspan><tspan x="22.1" y="0" class="st7 st3 st4">o</tspan><tspan x="28.4" y="0" class="st7 st3 st4">1</tspan><tspan x="35" y="0" class="st7 st3 st4">0</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 156.4924)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 156.4924)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 750.2262 156.4924)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 839.6559 156.4924)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 178.1096)"><tspan x="0" y="0" class="st7 st3 st4">M</tspan><tspan x="9.4" y="0" class="st7 st3 st4">o</tspan><tspan x="15.7" y="0" class="st7 st3 st4">n</tspan><tspan x="22.1" y="0" class="st7 st3 st4">o</tspan><tspan x="28.4" y="0" class="st7 st3 st4">10</tspan><tspan x="41.5" y="0" class="st7 st3 st4">p</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 178.1096)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 178.1096)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 750.2262 178.1096)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 839.6559 178.1096)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 199.719)"><tspan x="0" y="0" class="st7 st3 st4">M</tspan><tspan x="9.4" y="0" class="st7 st3 st4">o</tspan><tspan x="15.7" y="0" class="st7 st3 st4">n</tspan><tspan x="22.1" y="0" class="st7 st3 st4">o</tspan><tspan x="28.4" y="0" class="st7 st3 st4">1</tspan><tspan x="35" y="0" class="st7 st3 st4">2</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 199.719)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 199.719)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 929.0778 199.719)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1018.4996 199.719)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 221.344)"><tspan x="0" y="0" class="st7 st3 st4">M</tspan><tspan x="9.4" y="0" class="st7 st3 st4">o</tspan><tspan x="15.7" y="0" class="st7 st3 st4">n</tspan><tspan x="22.1" y="0" class="st7 st3 st4">o</tspan><tspan x="28.4" y="0" class="st7 st3 st4">12</tspan><tspan x="41.5" y="0" class="st7 st3 st4">p</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 221.344)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 221.344)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 929.0778 221.344)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1018.4996 221.344)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 242.9533)"><tspan x="0" y="0" class="st7 st3 st4">M</tspan><tspan x="9.4" y="0" class="st7 st3 st4">o</tspan><tspan x="15.7" y="0" class="st7 st3 st4">n</tspan><tspan x="22.1" y="0" class="st7 st3 st4">o</tspan><tspan x="28.4" y="0" class="st7 st3 st4">12</tspan><tspan x="41.5" y="0" class="st7 st3 st4">P</tspan><tspan x="49.3" y="0" class="st7 st3 st4">a</tspan><tspan x="56.1" y="0" class="st7 st3 st4">c</tspan><tspan x="62.3" y="0" class="st7 st3 st4">k</tspan><tspan x="68" y="0" class="st7 st3 st4">e</tspan><tspan x="74.7" y="0" class="st7 st3 st4">d</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 242.9533)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 242.9533)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 929.0778 242.9533)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1018.4996 242.9533)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 264.5705)"><tspan x="0" y="0" class="st7 st3 st4">M</tspan><tspan x="9.4" y="0" class="st7 st3 st4">o</tspan><tspan x="15.7" y="0" class="st7 st3 st4">n</tspan><tspan x="22.1" y="0" class="st7 st3 st4">o</tspan><tspan x="28.4" y="0" class="st7 st3 st4">1</tspan><tspan x="35" y="0" class="st7 st3 st4">4</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 264.5705)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 264.5705)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1107.9293 264.5705)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1197.3512 264.5705)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 286.1877)"><tspan x="0" y="0" class="st7 st3 st4">M</tspan><tspan x="9.4" y="0" class="st7 st3 st4">o</tspan><tspan x="15.7" y="0" class="st7 st3 st4">n</tspan><tspan x="22.1" y="0" class="st7 st3 st4">o</tspan><tspan x="28.4" y="0" class="st7 st3 st4">1</tspan><tspan x="35" y="0" class="st7 st3 st4">6</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 286.1877)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 286.1877)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1286.7731 286.1877)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1376.1949 286.1877)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 307.8049)"><tspan x="0" y="0" class="st7 st3 st4">B</tspan><tspan x="8.2" y="0" class="st7 st3 st4">a</tspan><tspan x="15" y="0" class="st7 st3 st4">y</tspan><tspan x="20.8" y="0" class="st7 st3 st4">e</tspan><tspan x="27.5" y="0" class="st7 st3 st4">r</tspan><tspan x="31" y="0" class="st7 st3 st4">X</tspan><tspan x="38.8" y="0" class="st7 st3 st4">Y</tspan><tspan x="46.9" y="0" class="st7 st3 st4">*</tspan><tspan x="51.5" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 307.8049)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 307.8049)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1286.7731 307.8049)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1465.6168 307.8049)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 329.4143)"><tspan x="0" y="0" class="st7 st3 st4">B</tspan><tspan x="8.2" y="0" class="st7 st3 st4">a</tspan><tspan x="15" y="0" class="st7 st3 st4">y</tspan><tspan x="20.8" y="0" class="st7 st3 st4">e</tspan><tspan x="27.5" y="0" class="st7 st3 st4">r</tspan><tspan x="31" y="0" class="st7 st3 st4">X</tspan><tspan x="38.8" y="0" class="st7 st3 st4">Y</tspan><tspan x="46.9" y="0" class="st7 st3 st4">*</tspan><tspan x="51.5" y="0" class="st7 st3 st4">1</tspan><tspan x="58.1" y="0" class="st7 st3 st4">0</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 329.4143)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 329.4143)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 750.2262 329.4143)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 839.6559 329.4143)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 351.0393)"><tspan x="0" y="0" class="st7 st3 st4">B</tspan><tspan x="8.2" y="0" class="st7 st3 st4">a</tspan><tspan x="15" y="0" class="st7 st3 st4">y</tspan><tspan x="20.8" y="0" class="st7 st3 st4">e</tspan><tspan x="27.5" y="0" class="st7 st3 st4">r</tspan><tspan x="31" y="0" class="st7 st3 st4">X</tspan><tspan x="38.8" y="0" class="st7 st3 st4">Y</tspan><tspan x="46.9" y="0" class="st7 st3 st4">*</tspan><tspan x="51.5" y="0" class="st7 st3 st4">10</tspan><tspan x="64.6" y="0" class="st7 st3 st4">p</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 351.0393)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 351.0393)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 750.2262 351.0393)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 839.6559 351.0393)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 372.6643)"><tspan x="0" y="0" class="st7 st3 st4">B</tspan><tspan x="8.2" y="0" class="st7 st3 st4">a</tspan><tspan x="15" y="0" class="st7 st3 st4">y</tspan><tspan x="20.8" y="0" class="st7 st3 st4">e</tspan><tspan x="27.5" y="0" class="st7 st3 st4">r</tspan><tspan x="31" y="0" class="st7 st3 st4">X</tspan><tspan x="38.8" y="0" class="st7 st3 st4">Y</tspan><tspan x="46.9" y="0" class="st7 st3 st4">*</tspan><tspan x="51.5" y="0" class="st7 st3 st4">1</tspan><tspan x="58.1" y="0" class="st7 st3 st4">2</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 372.6643)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 372.6643)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 929.0778 372.6643)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1018.4996 372.6643)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 394.2737)"><tspan x="0" y="0" class="st7 st3 st4">B</tspan><tspan x="8.2" y="0" class="st7 st3 st4">a</tspan><tspan x="15" y="0" class="st7 st3 st4">y</tspan><tspan x="20.8" y="0" class="st7 st3 st4">e</tspan><tspan x="27.5" y="0" class="st7 st3 st4">r</tspan><tspan x="31" y="0" class="st7 st3 st4">X</tspan><tspan x="38.8" y="0" class="st7 st3 st4">Y</tspan><tspan x="46.9" y="0" class="st7 st3 st4">*</tspan><tspan x="51.5" y="0" class="st7 st3 st4">12</tspan><tspan x="64.6" y="0" class="st7 st3 st4">p</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 394.2737)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 394.2737)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 929.0778 394.2737)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1018.4996 394.2737)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 415.8908)"><tspan x="0" y="0" class="st7 st3 st4">B</tspan><tspan x="8.2" y="0" class="st7 st3 st4">a</tspan><tspan x="15" y="0" class="st7 st3 st4">y</tspan><tspan x="20.8" y="0" class="st7 st3 st4">e</tspan><tspan x="27.5" y="0" class="st7 st3 st4">r</tspan><tspan x="31" y="0" class="st7 st3 st4">X</tspan><tspan x="38.8" y="0" class="st7 st3 st4">Y</tspan><tspan x="46.9" y="0" class="st7 st3 st4">*</tspan><tspan x="51.5" y="0" class="st7 st3 st4">12</tspan><tspan x="64.6" y="0" class="st7 st3 st4">P</tspan><tspan x="72.4" y="0" class="st7 st3 st4">a</tspan><tspan x="79.3" y="0" class="st7 st3 st4">c</tspan><tspan x="85.4" y="0" class="st7 st3 st4">k</tspan><tspan x="91.2" y="0" class="st7 st3 st4">e</tspan><tspan x="97.8" y="0" class="st7 st3 st4">d</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 415.8908)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 415.8908)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 929.0778 415.8908)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1018.4996 415.8908)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 437.508)"><tspan x="0" y="0" class="st7 st3 st4">B</tspan><tspan x="8.2" y="0" class="st7 st3 st4">a</tspan><tspan x="15" y="0" class="st7 st3 st4">y</tspan><tspan x="20.8" y="0" class="st7 st3 st4">e</tspan><tspan x="27.5" y="0" class="st7 st3 st4">r</tspan><tspan x="31" y="0" class="st7 st3 st4">X</tspan><tspan x="38.8" y="0" class="st7 st3 st4">Y</tspan><tspan x="46.9" y="0" class="st7 st3 st4">*</tspan><tspan x="51.5" y="0" class="st7 st3 st4">1</tspan><tspan x="58.1" y="0" class="st7 st3 st4">6</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 437.508)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 437.508)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1286.7731 437.508)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 1376.1949 437.508)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 459.1252)"><tspan x="0" y="0" class="st7 st3 st4">R</tspan><tspan x="8.8" y="0" class="st7 st3 st4">g</tspan><tspan x="15.8" y="0" class="st7 st3 st4">b</tspan><tspan x="22.2" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 459.1252)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 459.1252)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 480.7424)"><tspan x="0" y="0" class="st7 st3 st4">B</tspan><tspan x="8.2" y="0" class="st7 st3 st4">g</tspan><tspan x="15.1" y="0" class="st7 st3 st4">r</tspan><tspan x="18.7" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 480.7424)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 480.7424)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 502.3596)"><tspan x="0" y="0" class="st7 st3 st4">R</tspan><tspan x="8.8" y="0" class="st7 st3 st4">g</tspan><tspan x="15.8" y="0" class="st7 st3 st4">b</tspan><tspan x="22.2" y="0" class="st7 st3 st4">a</tspan><tspan x="29" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 502.3596)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 502.3596)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 523.9768)"><tspan x="0" y="0" class="st7 st3 st4">B</tspan><tspan x="8.2" y="0" class="st7 st3 st4">g</tspan><tspan x="15.1" y="0" class="st7 st3 st4">r</tspan><tspan x="18.7" y="0" class="st7 st3 st4">a</tspan><tspan x="25.6" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 523.9768)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 523.9768)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 545.5862)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">u</tspan><tspan x="14.4" y="0" class="st7 st3 st4">v</tspan><tspan x="20.2" y="0" class="st7 st3 st4">411</tspan><tspan x="39.9" y="0" class="st7 st3 st4"> </tspan><tspan x="43.5" y="0" class="st7 st3 st4">/</tspan><tspan x="46.7" y="0" class="st7 st3 st4"> </tspan><tspan x="50.3" y="0" class="st7 st3 st4">Y</tspan><tspan x="58.4" y="0" class="st7 st3 st4">U</tspan><tspan x="66.8" y="0" class="st7 st3 st4">V</tspan><tspan x="74.7" y="0" class="st7 st3 st4">411</tspan><tspan x="94.4" y="0" class="st7 st3 st4">_</tspan><tspan x="101" y="0" class="st7 st3 st4">8</tspan><tspan x="107.6" y="0" class="st7 st3 st4">_</tspan><tspan x="114.2" y="0" class="st7 st3 st4">U</tspan><tspan x="122.7" y="0" class="st7 st3 st4">YY</tspan><tspan x="138.9" y="0" class="st7 st3 st4">V</tspan><tspan x="146.8" y="0" class="st7 st3 st4">Y</tspan><tspan x="154.9" y="0" class="st7 st3 st4">Y</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 545.5862)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 545.5862)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 567.2112)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">u</tspan><tspan x="14.4" y="0" class="st7 st3 st4">v</tspan><tspan x="20.2" y="0" class="st7 st3 st4">422</tspan><tspan x="39.9" y="0" class="st7 st3 st4"> </tspan><tspan x="43.5" y="0" class="st7 st3 st4">/</tspan><tspan x="46.7" y="0" class="st7 st3 st4"> </tspan><tspan x="50.3" y="0" class="st7 st3 st4">Y</tspan><tspan x="58.4" y="0" class="st7 st3 st4">U</tspan><tspan x="66.8" y="0" class="st7 st3 st4">V</tspan><tspan x="74.7" y="0" class="st7 st3 st4">422</tspan><tspan x="94.4" y="0" class="st7 st3 st4">_</tspan><tspan x="101" y="0" class="st7 st3 st4">8</tspan><tspan x="107.6" y="0" class="st7 st3 st4">_</tspan><tspan x="114.2" y="0" class="st7 st3 st4">U</tspan><tspan x="122.7" y="0" class="st7 st3 st4">Y</tspan><tspan x="130.8" y="0" class="st7 st3 st4">V</tspan><tspan x="138.7" y="0" class="st7 st3 st4">Y</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 567.2112)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 567.2112)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 588.8206)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">u</tspan><tspan x="14.4" y="0" class="st7 st3 st4">v</tspan><tspan x="20.2" y="0" class="st7 st3 st4">422</tspan><tspan x="39.9" y="0" class="st7 st3 st4">_</tspan><tspan x="46.6" y="0" class="st7 st3 st4">8</tspan><tspan x="53.1" y="0" class="st7 st3 st4"> </tspan><tspan x="56.7" y="0" class="st7 st3 st4">/</tspan><tspan x="59.9" y="0" class="st7 st3 st4"> </tspan><tspan x="63.5" y="0" class="st7 st3 st4">Y</tspan><tspan x="71.6" y="0" class="st7 st3 st4">U</tspan><tspan x="80" y="0" class="st7 st3 st4">V</tspan><tspan x="87.9" y="0" class="st7 st3 st4">422</tspan><tspan x="107.6" y="0" class="st7 st3 st4">_</tspan><tspan x="114.2" y="0" class="st7 st3 st4">8</tspan><tspan x="120.8" y="0" class="st7 st3 st4">_</tspan><tspan x="127.4" y="0" class="st7 st3 st4">Y</tspan><tspan x="135.5" y="0" class="st7 st3 st4">U</tspan><tspan x="144" y="0" class="st7 st3 st4">Y</tspan><tspan x="152.1" y="0" class="st7 st3 st4">V</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 588.8206)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 588.8206)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 610.4456)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">u</tspan><tspan x="14.4" y="0" class="st7 st3 st4">v</tspan><tspan x="20.2" y="0" class="st7 st3 st4">444</tspan><tspan x="39.9" y="0" class="st7 st3 st4"> </tspan><tspan x="43.5" y="0" class="st7 st3 st4">/</tspan><tspan x="46.7" y="0" class="st7 st3 st4"> </tspan><tspan x="50.3" y="0" class="st7 st3 st4">Y</tspan><tspan x="58.4" y="0" class="st7 st3 st4">U</tspan><tspan x="66.8" y="0" class="st7 st3 st4">V</tspan><tspan x="74.7" y="0" class="st7 st3 st4">8</tspan><tspan x="81.3" y="0" class="st7 st3 st4">_</tspan><tspan x="87.9" y="0" class="st7 st3 st4">U</tspan><tspan x="96.3" y="0" class="st7 st3 st4">Y</tspan><tspan x="104.4" y="0" class="st7 st3 st4">V</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 610.4456)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 610.4456)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 632.0549)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">411</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 632.0549)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 632.0549)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 653.6799)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">411</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">8</tspan><tspan x="68.8" y="0" class="st7 st3 st4">_</tspan><tspan x="75.4" y="0" class="st7 st3 st4">C</tspan><tspan x="84.4" y="0" class="st7 st3 st4">b</tspan><tspan x="90.7" y="0" class="st7 st3 st4">YY</tspan><tspan x="106.9" y="0" class="st7 st3 st4">C</tspan><tspan x="115.9" y="0" class="st7 st3 st4">r</tspan><tspan x="119.4" y="0" class="st7 st3 st4">Y</tspan><tspan x="127.5" y="0" class="st7 st3 st4">Y</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 653.6799)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 653.6799)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 675.2971)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">422</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">8</tspan><tspan x="68.8" y="0" class="st7 st3 st4">_</tspan><tspan x="75.4" y="0" class="st7 st3 st4">C</tspan><tspan x="84.4" y="0" class="st7 st3 st4">b</tspan><tspan x="90.7" y="0" class="st7 st3 st4">Y</tspan><tspan x="98.8" y="0" class="st7 st3 st4">C</tspan><tspan x="107.8" y="0" class="st7 st3 st4">r</tspan><tspan x="111.3" y="0" class="st7 st3 st4">Y</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 675.2971)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 675.2971)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 696.9065)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">422</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">8</tspan><tspan x="68.8" y="0" class="st7 st3 st4">_</tspan><tspan x="75.4" y="0" class="st7 st3 st4">Y</tspan><tspan x="83.5" y="0" class="st7 st3 st4">C</tspan><tspan x="92.5" y="0" class="st7 st3 st4">b</tspan><tspan x="98.8" y="0" class="st7 st3 st4">Y</tspan><tspan x="106.9" y="0" class="st7 st3 st4">C</tspan><tspan x="115.9" y="0" class="st7 st3 st4">r</tspan><tspan x="119.4" y="0" class="st7 st3 st4"> </tspan><tspan x="123" y="0" class="st7 st3 st4">/</tspan><tspan x="126.2" y="0" class="st7 st3 st4"> </tspan><tspan x="129.8" y="0" class="st7 st3 st4">Y</tspan><tspan x="137.9" y="0" class="st7 st3 st4">C</tspan><tspan x="146.8" y="0" class="st7 st3 st4">b</tspan><tspan x="153.2" y="0" class="st7 st3 st4">C</tspan><tspan x="162.1" y="0" class="st7 st3 st4">r</tspan><tspan x="165.7" y="0" class="st7 st3 st4">422</tspan><tspan x="185.4" y="0" class="st7 st3 st4">_</tspan><tspan x="192" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 696.9065)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 696.9065)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 718.5315)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">8</tspan><tspan x="42.5" y="0" class="st7 st3 st4">_</tspan><tspan x="49.1" y="0" class="st7 st3 st4">C</tspan><tspan x="58.1" y="0" class="st7 st3 st4">b</tspan><tspan x="64.4" y="0" class="st7 st3 st4">Y</tspan><tspan x="72.5" y="0" class="st7 st3 st4">C</tspan><tspan x="81.4" y="0" class="st7 st3 st4">r</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 718.5315)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 718.5315)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 740.1409)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 740.1409)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 740.1409)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 761.7581)"><tspan x="0" y="0" class="st7 st3 st4">601</tspan><tspan x="19.7" y="0" class="st7 st3 st4">_</tspan><tspan x="26.3" y="0" class="st7 st3 st4">411</tspan><tspan x="46" y="0" class="st7 st3 st4">_</tspan><tspan x="52.7" y="0" class="st7 st3 st4">8</tspan><tspan x="59.2" y="0" class="st7 st3 st4">_</tspan><tspan x="65.9" y="0" class="st7 st3 st4">C</tspan><tspan x="74.8" y="0" class="st7 st3 st4">b</tspan><tspan x="81.2" y="0" class="st7 st3 st4">YY</tspan><tspan x="97.4" y="0" class="st7 st3 st4">C</tspan><tspan x="106.3" y="0" class="st7 st3 st4">r</tspan><tspan x="109.9" y="0" class="st7 st3 st4">Y</tspan><tspan x="118" y="0" class="st7 st3 st4">Y</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 761.7581)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 761.7581)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 783.3752)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">601</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">422</tspan><tspan x="81.9" y="0" class="st7 st3 st4">_</tspan><tspan x="88.6" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 783.3752)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 783.3752)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 804.9924)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">601</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">422</tspan><tspan x="81.9" y="0" class="st7 st3 st4">_</tspan><tspan x="88.6" y="0" class="st7 st3 st4">8</tspan><tspan x="95.1" y="0" class="st7 st3 st4">_</tspan><tspan x="101.8" y="0" class="st7 st3 st4">C</tspan><tspan x="110.7" y="0" class="st7 st3 st4">b</tspan><tspan x="117.1" y="0" class="st7 st3 st4">Y</tspan><tspan x="125.1" y="0" class="st7 st3 st4">C</tspan><tspan x="134.1" y="0" class="st7 st3 st4">r</tspan><tspan x="137.6" y="0" class="st7 st3 st4">Y</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 804.9924)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 804.9924)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 826.6018)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">601</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">8</tspan><tspan x="68.8" y="0" class="st7 st3 st4">_</tspan><tspan x="75.4" y="0" class="st7 st3 st4">C</tspan><tspan x="84.4" y="0" class="st7 st3 st4">b</tspan><tspan x="90.7" y="0" class="st7 st3 st4">Y</tspan><tspan x="98.8" y="0" class="st7 st3 st4">C</tspan><tspan x="107.8" y="0" class="st7 st3 st4">r</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 826.6018)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 826.6018)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 848.2268)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">709</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">411</tspan><tspan x="81.9" y="0" class="st7 st3 st4">_</tspan><tspan x="88.6" y="0" class="st7 st3 st4">8</tspan><tspan x="95.1" y="0" class="st7 st3 st4">_</tspan><tspan x="101.8" y="0" class="st7 st3 st4">C</tspan><tspan x="110.7" y="0" class="st7 st3 st4">b</tspan><tspan x="117.1" y="0" class="st7 st3 st4">YY</tspan><tspan x="133.2" y="0" class="st7 st3 st4">C</tspan><tspan x="142.2" y="0" class="st7 st3 st4">r</tspan><tspan x="145.7" y="0" class="st7 st3 st4">Y</tspan><tspan x="153.8" y="0" class="st7 st3 st4">Y</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 848.2268)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 848.2268)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 869.8518)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">709</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">422</tspan><tspan x="81.9" y="0" class="st7 st3 st4">_</tspan><tspan x="88.6" y="0" class="st7 st3 st4">8</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 869.8518)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 869.8518)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 891.4612)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">709</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">422</tspan><tspan x="81.9" y="0" class="st7 st3 st4">_</tspan><tspan x="88.6" y="0" class="st7 st3 st4">8</tspan><tspan x="95.1" y="0" class="st7 st3 st4">_</tspan><tspan x="101.8" y="0" class="st7 st3 st4">C</tspan><tspan x="110.7" y="0" class="st7 st3 st4">b</tspan><tspan x="117.1" y="0" class="st7 st3 st4">Y</tspan><tspan x="125.1" y="0" class="st7 st3 st4">C</tspan><tspan x="134.1" y="0" class="st7 st3 st4">r</tspan><tspan x="137.6" y="0" class="st7 st3 st4">Y</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 891.4612)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 891.4612)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 913.0784)"><tspan x="0" y="0" class="st7 st3 st4">Y</tspan><tspan x="8.1" y="0" class="st7 st3 st4">C</tspan><tspan x="17.1" y="0" class="st7 st3 st4">b</tspan><tspan x="23.4" y="0" class="st7 st3 st4">C</tspan><tspan x="32.4" y="0" class="st7 st3 st4">r</tspan><tspan x="35.9" y="0" class="st7 st3 st4">709</tspan><tspan x="55.6" y="0" class="st7 st3 st4">_</tspan><tspan x="62.2" y="0" class="st7 st3 st4">8</tspan><tspan x="68.8" y="0" class="st7 st3 st4">_</tspan><tspan x="75.4" y="0" class="st7 st3 st4">C</tspan><tspan x="84.4" y="0" class="st7 st3 st4">b</tspan><tspan x="90.7" y="0" class="st7 st3 st4">Y</tspan><tspan x="98.8" y="0" class="st7 st3 st4">C</tspan><tspan x="107.8" y="0" class="st7 st3 st4">r</tspan></text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 571.3824 913.0784)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 660.8043 913.0784)" class="st6 st4">x</text>
+		</g>
+		<g style="clip-path:url(#SVGID_00000016784423041618352700000006900120821042221706_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 977.9221)"><tspan x="0" y="0" class="st3 st4">***</tspan><tspan x="14" y="0" class="st3 st4"> </tspan><tspan x="17.5" y="0" class="st3 st4">A</tspan><tspan x="25.3" y="0" class="st3 st4">n</tspan><tspan x="31.6" y="0" class="st3 st4">y</tspan><tspan x="37.4" y="0" class="st3 st4"> </tspan><tspan x="41" y="0" class="st3 st4">o</tspan><tspan x="47.3" y="0" class="st3 st4">f</tspan><tspan x="50.7" y="0" class="st3 st4"> </tspan><tspan x="54.3" y="0" class="st3 st4">Y</tspan><tspan x="62.4" y="0" class="st3 st4">C</tspan><tspan x="71.4" y="0" class="st3 st4">b</tspan><tspan x="77.7" y="0" class="st3 st4">C</tspan><tspan x="86.7" y="0" class="st3 st4">r</tspan><tspan x="90.2" y="0" class="st3 st4">422</tspan><tspan x="109.9" y="0" class="st3 st4">_</tspan><tspan x="116.5" y="0" class="st3 st4">8</tspan><tspan x="123.1" y="0" class="st3 st4">_</tspan><tspan x="129.7" y="0" class="st3 st4">C</tspan><tspan x="138.7" y="0" class="st3 st4">b</tspan><tspan x="145" y="0" class="st3 st4">Y</tspan><tspan x="153.1" y="0" class="st3 st4">C</tspan><tspan x="162.1" y="0" class="st3 st4">r</tspan><tspan x="165.6" y="0" class="st3 st4">Y</tspan><tspan x="173.7" y="0" class="st3 st4">,</tspan><tspan x="177" y="0" class="st3 st4"> </tspan><tspan x="180.6" y="0" class="st3 st4">Y</tspan><tspan x="188.7" y="0" class="st3 st4">C</tspan><tspan x="197.7" y="0" class="st3 st4">b</tspan><tspan x="204" y="0" class="st3 st4">C</tspan><tspan x="213" y="0" class="st3 st4">r</tspan><tspan x="216.5" y="0" class="st3 st4">601</tspan><tspan x="236.2" y="0" class="st3 st4">_</tspan><tspan x="242.9" y="0" class="st3 st4">422</tspan><tspan x="262.5" y="0" class="st3 st4">_</tspan><tspan x="269.2" y="0" class="st3 st4">8</tspan><tspan x="275.7" y="0" class="st3 st4">_</tspan><tspan x="282.4" y="0" class="st3 st4">C</tspan><tspan x="291.4" y="0" class="st3 st4">b</tspan><tspan x="297.7" y="0" class="st3 st4">Y</tspan><tspan x="305.8" y="0" class="st3 st4">C</tspan><tspan x="314.7" y="0" class="st3 st4">r</tspan><tspan x="318.3" y="0" class="st3 st4">Y</tspan><tspan x="326.4" y="0" class="st3 st4">,</tspan><tspan x="329.7" y="0" class="st3 st4"> </tspan><tspan x="333.3" y="0" class="st3 st4">Y</tspan><tspan x="341.4" y="0" class="st3 st4">C</tspan><tspan x="350.3" y="0" class="st3 st4">b</tspan><tspan x="356.7" y="0" class="st3 st4">C</tspan><tspan x="365.6" y="0" class="st3 st4">r</tspan><tspan x="369.2" y="0" class="st3 st4">709</tspan><tspan x="388.9" y="0" class="st3 st4">_</tspan><tspan x="395.5" y="0" class="st3 st4">422</tspan><tspan x="415.2" y="0" class="st3 st4">_</tspan><tspan x="421.8" y="0" class="st3 st4">8</tspan><tspan x="428.4" y="0" class="st3 st4">_</tspan><tspan x="435" y="0" class="st3 st4">C</tspan><tspan x="444" y="0" class="st3 st4">b</tspan><tspan x="450.3" y="0" class="st3 st4">Y</tspan><tspan x="458.4" y="0" class="st3 st4">C</tspan><tspan x="467.4" y="0" class="st3 st4">r</tspan><tspan x="470.9" y="0" class="st3 st4">Y</tspan><tspan x="479" y="0" class="st3 st4"> </tspan><tspan x="482.6" y="0" class="st3 st4">o</tspan><tspan x="488.9" y="0" class="st3 st4">r</tspan><tspan x="492.5" y="0" class="st3 st4"> </tspan><tspan x="496.1" y="0" class="st3 st4">Y</tspan><tspan x="504.2" y="0" class="st3 st4">U</tspan><tspan x="512.6" y="0" class="st3 st4">V</tspan><tspan x="520.5" y="0" class="st3 st4">422</tspan><tspan x="540.2" y="0" class="st3 st4">_</tspan><tspan x="546.8" y="0" class="st3 st4">8</tspan><tspan x="553.4" y="0" class="st3 st4">_</tspan><tspan x="560" y="0" class="st3 st4">U</tspan><tspan x="568.4" y="0" class="st3 st4">Y</tspan><tspan x="576.5" y="0" class="st3 st4">V</tspan><tspan x="584.5" y="0" class="st3 st4">Y</tspan></text>
+		</g>
+	</g>
+	<g>
+		<defs>
+			<polygon id="SVGID_00000147187395106381122080000017407893058760395394_" points="318,918.3 707.7,918.3 707.7,939.2 318,939.2 
+				318,918.3 			"/>
+		</defs>
+		<clipPath id="SVGID_00000090296804041909169060000002702784361508128153_">
+			<use xlink:href="#SVGID_00000147187395106381122080000017407893058760395394_"  style="overflow:visible;"/>
+		</clipPath>
+		<g style="clip-path:url(#SVGID_00000090296804041909169060000002702784361508128153_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 932.4534)"><tspan x="0" y="0" class="st3 st4">*</tspan><tspan x="4.7" y="0" class="st3 st4"> </tspan><tspan x="8.2" y="0" class="st3 st4">A</tspan><tspan x="16" y="0" class="st3 st4">n</tspan><tspan x="22.3" y="0" class="st3 st4">y</tspan><tspan x="28.1" y="0" class="st3 st4"> </tspan><tspan x="31.7" y="0" class="st3 st4">o</tspan><tspan x="38" y="0" class="st3 st4">f</tspan><tspan x="41.4" y="0" class="st3 st4"> </tspan><tspan x="45" y="0" class="st3 st4">B</tspan><tspan x="53.2" y="0" class="st3 st4">a</tspan><tspan x="60" y="0" class="st3 st4">y</tspan><tspan x="65.8" y="0" class="st3 st4">e</tspan><tspan x="72.5" y="0" class="st3 st4">r</tspan><tspan x="76" y="0" class="st3 st4">G</tspan><tspan x="85.2" y="0" class="st3 st4">R</tspan><tspan x="94.1" y="0" class="st3 st4">,</tspan><tspan x="97.4" y="0" class="st3 st4"> </tspan><tspan x="101" y="0" class="st3 st4">B</tspan><tspan x="109.2" y="0" class="st3 st4">a</tspan><tspan x="116" y="0" class="st3 st4">y</tspan><tspan x="121.8" y="0" class="st3 st4">e</tspan><tspan x="128.5" y="0" class="st3 st4">r</tspan><tspan x="132" y="0" class="st3 st4">G</tspan><tspan x="141.2" y="0" class="st3 st4">B</tspan><tspan x="149.4" y="0" class="st3 st4">,</tspan><tspan x="152.7" y="0" class="st3 st4"> </tspan><tspan x="156.3" y="0" class="st3 st4">B</tspan><tspan x="164.5" y="0" class="st3 st4">a</tspan><tspan x="171.3" y="0" class="st3 st4">y</tspan><tspan x="177.1" y="0" class="st3 st4">e</tspan><tspan x="183.8" y="0" class="st3 st4">r</tspan><tspan x="187.3" y="0" class="st3 st4">B</tspan><tspan x="195.5" y="0" class="st3 st4">G</tspan><tspan x="204.7" y="0" class="st3 st4"> </tspan><tspan x="208.3" y="0" class="st3 st4">o</tspan><tspan x="214.6" y="0" class="st3 st4">r</tspan><tspan x="218.2" y="0" class="st3 st4"> </tspan><tspan x="221.7" y="0" class="st3 st4">B</tspan><tspan x="229.9" y="0" class="st3 st4">a</tspan><tspan x="236.8" y="0" class="st3 st4">y</tspan><tspan x="242.6" y="0" class="st3 st4">e</tspan><tspan x="249.2" y="0" class="st3 st4">r</tspan><tspan x="252.8" y="0" class="st3 st4">R</tspan><tspan x="261.6" y="0" class="st3 st4">G</tspan></text>
+		</g>
+	</g>
+	<g>
+		<defs>
+			<polygon id="SVGID_00000060023536127216794950000003622416012196742296_" points="318,939.9 707.7,939.9 707.7,960.8 318,960.8 
+				318,939.9 			"/>
+		</defs>
+		<clipPath id="SVGID_00000075843759306430590120000012193921149968451721_">
+			<use xlink:href="#SVGID_00000060023536127216794950000003622416012196742296_"  style="overflow:visible;"/>
+		</clipPath>
+		<g style="clip-path:url(#SVGID_00000075843759306430590120000012193921149968451721_);">
+			<text transform="matrix(0.9997 0 0 1 319.4996 956.3127)"><tspan x="0" y="0" class="st3 st4">**</tspan><tspan x="9.3" y="0" class="st3 st4"> </tspan><tspan x="12.9" y="0" class="st3 st4">A</tspan><tspan x="20.7" y="0" class="st3 st4">n</tspan><tspan x="27" y="0" class="st3 st4">y</tspan><tspan x="32.8" y="0" class="st3 st4"> </tspan><tspan x="36.4" y="0" class="st3 st4">o</tspan><tspan x="42.7" y="0" class="st3 st4">f</tspan><tspan x="46.1" y="0" class="st3 st4"> </tspan><tspan x="49.7" y="0" class="st3 st4">R</tspan><tspan x="58.5" y="0" class="st3 st4">g</tspan><tspan x="65.5" y="0" class="st3 st4">b</tspan><tspan x="71.8" y="0" class="st3 st4">,</tspan><tspan x="75.1" y="0" class="st3 st4">R</tspan><tspan x="84" y="0" class="st3 st4">g</tspan><tspan x="90.9" y="0" class="st3 st4">b</tspan><tspan x="97.3" y="0" class="st3 st4">a</tspan><tspan x="104.2" y="0" class="st3 st4">,</tspan><tspan x="107.5" y="0" class="st3 st4">B</tspan><tspan x="115.6" y="0" class="st3 st4">g</tspan><tspan x="122.6" y="0" class="st3 st4">r</tspan><tspan x="126.2" y="0" class="st3 st4"> </tspan><tspan x="129.7" y="0" class="st3 st4">o</tspan><tspan x="136.1" y="0" class="st3 st4">r</tspan><tspan x="139.6" y="0" class="st3 st4"> </tspan><tspan x="143.2" y="0" class="st3 st4">B</tspan><tspan x="151.4" y="0" class="st3 st4">g</tspan><tspan x="158.3" y="0" class="st3 st4">r</tspan><tspan x="161.9" y="0" class="st3 st4">a</tspan></text>
+		</g>
+	</g>
+	<g>
+		<defs>
+			<polygon id="SVGID_00000115477127244230622880000011190550819185796790_" points="317.3,96.1 1513.3,96.1 1513.3,983.1 
+				317.3,983.1 317.3,96.1 			"/>
+		</defs>
+		<clipPath id="SVGID_00000047772126854341306430000017691210399061788056_">
+			<use xlink:href="#SVGID_00000115477127244230622880000011190550819185796790_"  style="overflow:visible;"/>
+		</clipPath>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			317.3,96.1 317.3,96.1 318,96.1 318,96.1 317.3,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			528.9,96.1 528.9,96.1 529.6,96.1 529.6,96.1 528.9,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			618.3,96.1 618.3,96.1 619.1,96.1 619.1,96.1 618.3,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			707.7,96.1 707.7,96.1 708.5,96.1 708.5,96.1 707.7,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			797.2,96.1 797.2,96.1 797.9,96.1 797.9,96.1 797.2,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			886.6,96.1 886.6,96.1 887.3,96.1 887.3,96.1 886.6,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			976,96.1 976,96.1 976.8,96.1 976.8,96.1 976,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			1065.4,96.1 1065.4,96.1 1066.2,96.1 1066.2,96.1 1065.4,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			1154.9,96.1 1154.9,96.1 1155.6,96.1 1155.6,96.1 1154.9,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			1244.3,96.1 1244.3,96.1 1245,96.1 1245,96.1 1244.3,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			1333.7,96.1 1333.7,96.1 1334.5,96.1 1334.5,96.1 1333.7,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			1423.1,96.1 1423.1,96.1 1423.9,96.1 1423.9,96.1 1423.1,96.1 		"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			1512.6,96.1 1512.6,96.1 1513.3,96.1 1513.3,96.1 1512.6,96.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="317.3" y1="96.1" x2="317.3" y2="918.3"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			317.3,96.1 317.3,918.3 318,918.3 318,96.1 317.3,96.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#D4D4D4;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="317.3" y1="918.3" x2="317.3" y2="939.2"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;fill:#D4D4D4;" points="
+			317.3,918.3 317.3,939.2 318,939.2 318,918.3 317.3,918.3 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="528.9" y1="96.9" x2="528.9" y2="918.3"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			528.9,96.9 528.9,918.3 529.6,918.3 529.6,96.9 528.9,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="618.3" y1="96.9" x2="618.3" y2="918.3"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			618.3,96.9 618.3,918.3 619.1,918.3 619.1,96.9 618.3,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="707.7" y1="96.9" x2="707.7" y2="961.5"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			707.7,96.9 707.7,961.5 708.5,961.5 708.5,96.9 707.7,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="797.2" y1="96.9" x2="797.2" y2="961.5"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			797.2,96.9 797.2,961.5 797.9,961.5 797.9,96.9 797.2,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="317.3" y1="939.2" x2="317.3" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			317.3,939.2 317.3,983.9 318,983.9 318,939.2 317.3,939.2 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="528.9" y1="983.1" x2="528.9" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			528.9,983.1 528.9,983.9 529.6,983.9 529.6,983.1 528.9,983.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="618.3" y1="983.1" x2="618.3" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			618.3,983.1 618.3,983.9 619.1,983.9 619.1,983.1 618.3,983.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="707.7" y1="983.1" x2="707.7" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			707.7,983.1 707.7,983.9 708.5,983.9 708.5,983.1 707.7,983.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="797.2" y1="983.1" x2="797.2" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			797.2,983.1 797.2,983.9 797.9,983.9 797.9,983.1 797.2,983.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="886.6" y1="96.9" x2="886.6" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			886.6,96.9 886.6,983.9 887.3,983.9 887.3,96.9 886.6,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="976" y1="96.9" x2="976" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			976,96.9 976,983.9 976.8,983.9 976.8,96.9 976,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="1065.4" y1="96.9" x2="1065.4" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			1065.4,96.9 1065.4,983.9 1066.2,983.9 1066.2,96.9 1065.4,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="1154.9" y1="96.9" x2="1154.9" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			1154.9,96.9 1154.9,983.9 1155.6,983.9 1155.6,96.9 1154.9,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="1244.3" y1="96.9" x2="1244.3" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			1244.3,96.9 1244.3,983.9 1245,983.9 1245,96.9 1244.3,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="1333.7" y1="96.9" x2="1333.7" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			1333.7,96.9 1333.7,983.9 1334.5,983.9 1334.5,96.9 1333.7,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="1423.1" y1="96.9" x2="1423.1" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			1423.1,96.9 1423.1,983.9 1423.9,983.9 1423.9,96.9 1423.1,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="1512.6" y1="96.9" x2="1512.6" y2="983.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			1512.6,96.9 1512.6,983.9 1513.3,983.9 1513.3,96.9 1512.6,96.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="96.1" x2="1514.1" y2="96.1"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,96.1 318,96.9 1514.1,96.9 1514.1,96.1 318,96.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="117.7" x2="1514.1" y2="117.7"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,117.7 318,118.5 1514.1,118.5 1514.1,117.7 318,117.7 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="139.3" x2="1514.1" y2="139.3"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,139.3 318,140.1 1514.1,140.1 1514.1,139.3 318,139.3 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="161" x2="1514.1" y2="161"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,161 318,161.7 1514.1,161.7 1514.1,161 318,161 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="182.6" x2="1514.1" y2="182.6"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,182.6 318,183.3 1514.1,183.3 1514.1,182.6 318,182.6 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="204.2" x2="1514.1" y2="204.2"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,204.2 318,204.9 1514.1,204.9 1514.1,204.2 318,204.2 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="225.8" x2="1514.1" y2="225.8"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,225.8 318,226.6 1514.1,226.6 1514.1,225.8 318,225.8 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="247.4" x2="1514.1" y2="247.4"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,247.4 318,248.2 1514.1,248.2 1514.1,247.4 318,247.4 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="269" x2="1514.1" y2="269"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,269 318,269.8 1514.1,269.8 1514.1,269 318,269 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="290.7" x2="1514.1" y2="290.7"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,290.7 318,291.4 1514.1,291.4 1514.1,290.7 318,290.7 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="312.3" x2="1514.1" y2="312.3"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,312.3 318,313 1514.1,313 1514.1,312.3 318,312.3 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="333.9" x2="1514.1" y2="333.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,333.9 318,334.6 1514.1,334.6 1514.1,333.9 318,333.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="355.5" x2="1514.1" y2="355.5"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,355.5 318,356.3 1514.1,356.3 1514.1,355.5 318,355.5 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="377.1" x2="1514.1" y2="377.1"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,377.1 318,377.9 1514.1,377.9 1514.1,377.1 318,377.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="398.7" x2="1514.1" y2="398.7"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,398.7 318,399.5 1514.1,399.5 1514.1,398.7 318,398.7 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="420.4" x2="1514.1" y2="420.4"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,420.4 318,421.1 1514.1,421.1 1514.1,420.4 318,420.4 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="442" x2="1514.1" y2="442"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,442 318,442.7 1514.1,442.7 1514.1,442 318,442 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="463.6" x2="1514.1" y2="463.6"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,463.6 318,464.3 1514.1,464.3 1514.1,463.6 318,463.6 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="485.2" x2="1514.1" y2="485.2"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,485.2 318,486 1514.1,486 1514.1,485.2 318,485.2 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="506.8" x2="1514.1" y2="506.8"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,506.8 318,507.6 1514.1,507.6 1514.1,506.8 318,506.8 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="528.4" x2="1514.1" y2="528.4"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,528.4 318,529.2 1514.1,529.2 1514.1,528.4 318,528.4 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="550.1" x2="1514.1" y2="550.1"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,550.1 318,550.8 1514.1,550.8 1514.1,550.1 318,550.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="571.7" x2="1514.1" y2="571.7"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,571.7 318,572.4 1514.1,572.4 1514.1,571.7 318,571.7 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="593.3" x2="1514.1" y2="593.3"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,593.3 318,594 1514.1,594 1514.1,593.3 318,593.3 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="614.9" x2="1514.1" y2="614.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,614.9 318,615.7 1514.1,615.7 1514.1,614.9 318,614.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="636.5" x2="1514.1" y2="636.5"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,636.5 318,637.3 1514.1,637.3 1514.1,636.5 318,636.5 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="658.1" x2="1514.1" y2="658.1"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,658.1 318,658.9 1514.1,658.9 1514.1,658.1 318,658.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="679.8" x2="1514.1" y2="679.8"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,679.8 318,680.5 1514.1,680.5 1514.1,679.8 318,679.8 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="701.4" x2="1514.1" y2="701.4"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,701.4 318,702.1 1514.1,702.1 1514.1,701.4 318,701.4 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="723" x2="1514.1" y2="723"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,723 318,723.7 1514.1,723.7 1514.1,723 318,723 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="744.6" x2="1514.1" y2="744.6"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,744.6 318,745.4 1514.1,745.4 1514.1,744.6 318,744.6 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="766.2" x2="1514.1" y2="766.2"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,766.2 318,767 1514.1,767 1514.1,766.2 318,766.2 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="787.8" x2="1514.1" y2="787.8"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,787.8 318,788.6 1514.1,788.6 1514.1,787.8 318,787.8 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="809.5" x2="1514.1" y2="809.5"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,809.5 318,810.2 1514.1,810.2 1514.1,809.5 318,809.5 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="831.1" x2="1514.1" y2="831.1"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,831.1 318,831.8 1514.1,831.8 1514.1,831.1 318,831.1 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="852.7" x2="1514.1" y2="852.7"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,852.7 318,853.4 1514.1,853.4 1514.1,852.7 318,852.7 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="874.3" x2="1514.1" y2="874.3"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,874.3 318,875.1 1514.1,875.1 1514.1,874.3 318,874.3 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="895.9" x2="1514.1" y2="895.9"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,895.9 318,896.7 1514.1,896.7 1514.1,895.9 318,895.9 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="917.5" x2="1514.1" y2="917.5"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,917.5 318,918.3 1514.1,918.3 1514.1,917.5 318,917.5 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="939.2" x2="1514.1" y2="939.2"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,939.2 318,939.9 1514.1,939.9 1514.1,939.2 318,939.2 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="960.8" x2="1514.1" y2="960.8"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,960.8 318,961.5 1514.1,961.5 1514.1,960.8 318,960.8 		"/>
+		
+			<line style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill:none;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-miterlimit:10;" x1="318" y1="982.4" x2="1514.1" y2="982.4"/>
+		
+			<polyline style="clip-path:url(#SVGID_00000047772126854341306430000017691210399061788056_);fill-rule:evenodd;clip-rule:evenodd;" points="
+			318,982.4 318,983.1 1514.1,983.1 1514.1,982.4 318,982.4 		"/>
+	</g>
+</g>
+</svg>
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Tabs.png b/VimbaX/doc/VimbaX_Documentation/_images/Tabs.png
new file mode 100644
index 0000000000000000000000000000000000000000..6edcdf2b38343f16d1c9d68270ff40f46a5cfad9
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Tabs.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Tooltip.png b/VimbaX/doc/VimbaX_Documentation/_images/Tooltip.png
new file mode 100644
index 0000000000000000000000000000000000000000..d30559e93d6e962f800ceb91df9643b36a578728
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Tooltip.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/Trigger_advanced.png b/VimbaX/doc/VimbaX_Documentation/_images/Trigger_advanced.png
new file mode 100644
index 0000000000000000000000000000000000000000..9bf10631e98709ca977affbeae01a51b75ec2bd8
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/Trigger_advanced.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/VmbCPP_asynchronous.png b/VimbaX/doc/VimbaX_Documentation/_images/VmbCPP_asynchronous.png
new file mode 100644
index 0000000000000000000000000000000000000000..671de16aa57b096d1633848ea64945ecaf1cf8d6
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/VmbCPP_asynchronous.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/VmbC_asynchronous.png b/VimbaX/doc/VimbaX_Documentation/_images/VmbC_asynchronous.png
new file mode 100644
index 0000000000000000000000000000000000000000..7d60cb17647f5d6227fd511d262ae76c14cc7600
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/VmbC_asynchronous.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/action-advanced.png b/VimbaX/doc/VimbaX_Documentation/_images/action-advanced.png
new file mode 100644
index 0000000000000000000000000000000000000000..4be3be6def29bb28d6f25f309c8c58057a86ab32
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/action-advanced.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/action-button.png b/VimbaX/doc/VimbaX_Documentation/_images/action-button.png
new file mode 100644
index 0000000000000000000000000000000000000000..bfdfc58febac3c84c6ccdfabe2e5f6725965c4ae
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/action-button.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/action-commands.png b/VimbaX/doc/VimbaX_Documentation/_images/action-commands.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9ad671be44e3b8e9765ca8b67540784901b14c9
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/action-commands.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/driverInst_1.PNG b/VimbaX/doc/VimbaX_Documentation/_images/driverInst_1.PNG
new file mode 100644
index 0000000000000000000000000000000000000000..74203198da3f1a80475c4e2eda27d278553e79c8
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/driverInst_1.PNG differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/main-window_1.png b/VimbaX/doc/VimbaX_Documentation/_images/main-window_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..8863dd1b4093105f8f2411bba770af4bad91089a
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/main-window_1.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_images/open-force.png b/VimbaX/doc/VimbaX_Documentation/_images/open-force.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a3b4f78bdc6e63970293726e58cbfbc09f7b920
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_images/open-force.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/basic.css b/VimbaX/doc/VimbaX_Documentation/_static/basic.css
new file mode 100644
index 0000000000000000000000000000000000000000..bf18350b65c61f31b2f9f717c03e02f17c0ab4f1
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/basic.css
@@ -0,0 +1,906 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+div.section::after {
+    display: block;
+    content: '';
+    clear: left;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+    overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    float: left;
+    width: 80%;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    float: left;
+    width: 20%;
+    border-left: none;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li p.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable ul {
+    margin-top: 0;
+    margin-bottom: 0;
+    list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+    padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+    padding: 2px;
+    border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+    min-width: 450px;
+    max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
+a.headerlink {
+    visibility: hidden;
+}
+
+a.brackets:before,
+span.brackets > a:before{
+    content: "[";
+}
+
+a.brackets:after,
+span.brackets > a:after {
+    content: "]";
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-default {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar,
+aside.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+    clear: right;
+    overflow-x: auto;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+div.admonition, div.topic, blockquote {
+    clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+aside.sidebar > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+    margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+    display: block;
+    content: '';
+    clear: both;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.align-center {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.align-default {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+th > :first-child,
+td > :first-child {
+    margin-top: 0px;
+}
+
+th > :last-child,
+td > :last-child {
+    margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure, figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption, figcaption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist {
+    margin: 1em 0;
+}
+
+table.hlist td {
+    vertical-align: top;
+}
+
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+	font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+.sig-name {
+	font-size: 1.1em;
+}
+
+code.descname {
+    font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+    background-color: transparent;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.sig-param.n {
+	font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+	font-family: unset;
+}
+
+.sig.c   .k, .sig.c   .kt,
+.sig.cpp .k, .sig.cpp .kt {
+	color: #0033B3;
+}
+
+.sig.c   .m,
+.sig.cpp .m {
+	color: #1750EB;
+}
+
+.sig.c   .s, .sig.c   .sc,
+.sig.cpp .s, .sig.cpp .sc {
+	color: #067D17;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
+    margin-top: 0px;
+}
+
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
+    margin-bottom: 0px;
+}
+
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+    margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+    margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+    margin-bottom: 0;
+}
+
+dl.footnote > dt,
+dl.citation > dt {
+    float: left;
+    margin-right: 0.5em;
+}
+
+dl.footnote > dd,
+dl.citation > dd {
+    margin-bottom: 0em;
+}
+
+dl.footnote > dd:after,
+dl.citation > dd:after {
+    content: "";
+    clear: both;
+}
+
+dl.field-list {
+    display: grid;
+    grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+    font-weight: bold;
+    word-break: break-word;
+    padding-left: 0.5em;
+    padding-right: 5px;
+}
+
+dl.field-list > dt:after {
+    content: ":";
+}
+
+dl.field-list > dd {
+    padding-left: 0.5em;
+    margin-top: 0em;
+    margin-left: 0em;
+    margin-bottom: 0em;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd > :first-child {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+    margin-bottom: 0;
+}
+
+dt:target, span.highlighted {
+    background-color: #fbe54e;
+}
+
+rect.highlighted {
+    fill: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+.classifier:before {
+    font-style: normal;
+    margin: 0 0.5em;
+    content: ":";
+    display: inline-block;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+pre, div[class*="highlight-"] {
+    clear: both;
+}
+
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+    white-space: nowrap;
+}
+
+div[class*="highlight-"] {
+    margin: 1em 0;
+}
+
+td.linenos pre {
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    display: block;
+}
+
+table.highlighttable tbody {
+    display: block;
+}
+
+table.highlighttable tr {
+    display: flex;
+}
+
+table.highlighttable td {
+    margin: 0;
+    padding: 0;
+}
+
+table.highlighttable td.linenos {
+    padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+    flex: 1;
+    overflow: hidden;
+}
+
+.highlight .hll {
+    display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+    margin: 0;
+}
+
+div.code-block-caption + div {
+    margin-top: 0;
+}
+
+div.code-block-caption {
+    margin-top: 1em;
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+table.highlighttable td.linenos,
+span.linenos,
+div.highlight span.gp {  /* gp: Generic.Prompt */
+  user-select: none;
+  -webkit-user-select: text; /* Safari fallback only */
+  -webkit-user-select: none; /* Chrome/Safari */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* IE10+ */
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    margin: 1em 0;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+span.eqno a.headerlink {
+    position: absolute;
+    z-index: 1;
+}
+
+div.math:hover a.headerlink {
+    visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/badge_only.css b/VimbaX/doc/VimbaX_Documentation/_static/css/badge_only.css
new file mode 100644
index 0000000000000000000000000000000000000000..e380325bc6e273d9142c2369883d2a4b2a069cf1
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/css/badge_only.css
@@ -0,0 +1 @@
+.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Bold.woff b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..6cb60000181dbd348963953ac8ac54afb46c63d5
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Bold.woff differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Bold.woff2 b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..7059e23142aae3d8bad6067fc734a6cffec779c9
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Bold.woff2 differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Regular.woff b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..f815f63f99da80ad2be69e4021023ec2981eaea0
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Regular.woff differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Regular.woff2 b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..f2c76e5bda18a9842e24cd60d8787257da215ca7
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/Roboto-Slab-Regular.woff2 differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.eot b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.eot differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.svg b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000000000000000000000000000000000000..855c845e538b65548118279537a04eab2ec6ef0d
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+<?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>
+<metadata>
+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
+ By ,,,
+Copyright Dave Gandy 2016. All rights reserved.
+</metadata>
+<defs>
+<font id="FontAwesome" horiz-adv-x="1536" >
+  <font-face 
+    font-family="FontAwesome"
+    font-weight="400"
+    font-stretch="normal"
+    units-per-em="1792"
+    panose-1="0 0 0 0 0 0 0 0 0 0"
+    ascent="1536"
+    descent="-256"
+    bbox="-1.02083 -256.962 2304.6 1537.02"
+    underline-thickness="0"
+    underline-position="0"
+    unicode-range="U+0020-F500"
+  />
+<missing-glyph horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".notdef" horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".null" horiz-adv-x="0" 
+ />
+    <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597" 
+ />
+    <glyph glyph-name="space" unicode=" " horiz-adv-x="448" 
+ />
+    <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1792" 
+d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+    <glyph glyph-name="music" unicode="&#xf001;" 
+d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
+t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664" 
+d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
+t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="envelope" unicode="&#xf003;" horiz-adv-x="1792" 
+d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
+t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
+M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792" 
+d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
+q-18 -18 -44 -18z" />
+    <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664" 
+d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
+l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="star_empty" unicode="&#xf006;" horiz-adv-x="1664" 
+d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
+l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280" 
+d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
+t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920" 
+d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
+q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
+t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
+q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
+t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="th_large" unicode="&#xf009;" horiz-adv-x="1664" 
+d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
+h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="th_list" unicode="&#xf00b;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ok" unicode="&#xf00c;" horiz-adv-x="1792" 
+d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+    <glyph glyph-name="remove" unicode="&#xf00d;" horiz-adv-x="1408" 
+d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
+t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+    <glyph glyph-name="zoom_in" unicode="&#xf00e;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
+q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
+t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="zoom_out" unicode="&#xf010;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
+M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
+" />
+    <glyph glyph-name="off" unicode="&#xf011;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
+t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+    <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792" 
+d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="cog" unicode="&#xf013;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
+q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
+l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
+q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+    <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408" 
+d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
+q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664" 
+d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
+l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+    <glyph glyph-name="file_alt" unicode="&#xf016;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+" />
+    <glyph glyph-name="time" unicode="&#xf017;" 
+d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920" 
+d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
+q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+    <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664" 
+d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
+q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+    <glyph glyph-name="download" unicode="&#xf01a;" 
+d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
+t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="upload" unicode="&#xf01b;" 
+d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
+t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="inbox" unicode="&#xf01c;" 
+d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
+q25 -61 25 -123z" />
+    <glyph glyph-name="play_circle" unicode="&#xf01d;" 
+d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="repeat" unicode="&#xf01e;" 
+d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
+l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+    <glyph glyph-name="refresh" unicode="&#xf021;" 
+d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
+q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
+q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792" 
+d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
+M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
+t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152" 
+d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792" 
+d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
+t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664" 
+d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
+t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
+t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+    <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+    <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
+t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
+t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+    <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408" 
+d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
+M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+    <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792" 
+d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
+M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+    <glyph glyph-name="tag" unicode="&#xf02b;" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664" 
+d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
+q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
+q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
+t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+    <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280" 
+d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664" 
+d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
+v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+    <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920" 
+d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
+q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664" 
+d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
+q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
+q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+    <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408" 
+d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
+q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
+t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
+t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+    <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024" 
+d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
+q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+    <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792" 
+d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
+t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
+q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+    <glyph glyph-name="text_width" unicode="&#xf035;" 
+d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
+t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
+t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
+t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+    <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
+h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792" 
+d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
+t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
+q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
+q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792" 
+d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792" 
+d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792" 
+d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
+q39 -17 39 -59z" />
+    <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920" 
+d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
+q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="pencil" unicode="&#xf040;" 
+d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
+q53 0 91 -38l235 -234q37 -39 37 -91z" />
+    <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024" 
+d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+    <glyph glyph-name="adjust" unicode="&#xf042;" 
+d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024" 
+d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
+q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+    <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792" 
+d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
+l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+    <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664" 
+d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
+q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
+t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664" 
+d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
+q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
+q24 -24 24 -57t-24 -57z" />
+    <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
+t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024" 
+d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
+    <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792" 
+d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
+q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664" 
+d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408" 
+d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+    <glyph glyph-name="pause" unicode="&#xf04c;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="stop" unicode="&#xf04d;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
+q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
+    <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538" 
+d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+    <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280" 
+d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280" 
+d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="plus_sign" unicode="&#xf055;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
+t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="minus_sign" unicode="&#xf056;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="remove_sign" unicode="&#xf057;" 
+d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
+q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_sign" unicode="&#xf058;" 
+d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="question_sign" unicode="&#xf059;" 
+d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
+q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="info_sign" unicode="&#xf05a;" 
+d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
+t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="screenshot" unicode="&#xf05b;" 
+d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
+q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
+q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="remove_circle" unicode="&#xf05c;" 
+d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
+t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_circle" unicode="&#xf05d;" 
+d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
+t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ban_circle" unicode="&#xf05e;" 
+d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
+t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+    <glyph glyph-name="arrow_left" unicode="&#xf060;" 
+d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
+t32.5 -90.5z" />
+    <glyph glyph-name="arrow_right" unicode="&#xf061;" 
+d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+    <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664" 
+d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
+q37 -39 37 -91z" />
+    <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664" 
+d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+    <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792" 
+d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
+t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+    <glyph glyph-name="resize_full" unicode="&#xf065;" 
+d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
+q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="resize_small" unicode="&#xf066;" 
+d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
+t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+    <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664" 
+d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
+q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+    <glyph glyph-name="exclamation_sign" unicode="&#xf06a;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
+q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+    <glyph glyph-name="gift" unicode="&#xf06b;" 
+d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
+q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
+t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792" 
+d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
+q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
+t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+    <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408" 
+d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
+q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+    <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792" 
+d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
+t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+    <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792" 
+d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
+q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
+q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
+" />
+    <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792" 
+d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
+q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+    <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408" 
+d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
+q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+    <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664" 
+d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
+M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
+q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
+h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792" 
+d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
+t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
+v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
+t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792" 
+d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
+q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="magnet" unicode="&#xf076;" 
+d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
+q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792" 
+d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792" 
+d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920" 
+d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
+zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
+" />
+    <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664" 
+d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
+t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664" 
+d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920" 
+d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
+t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768" 
+d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048" 
+d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+    <glyph glyph-name="twitter_sign" unicode="&#xf081;" 
+d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
+q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
+t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="facebook_sign" unicode="&#xf082;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792" 
+d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
+t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
+q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792" 
+d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
+l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
+t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+    <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920" 
+d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
+l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
+l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
+q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
+t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
+q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
+q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+    <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792" 
+d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
+q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
+q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+    <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
+t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
+q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
+q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;" 
+d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
+t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
+M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
+h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
+    <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896" 
+d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+    <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792" 
+d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
+q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
+q224 0 351 -124t127 -344z" />
+    <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664" 
+d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
+q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+    <glyph glyph-name="linkedin_sign" unicode="&#xf08c;" 
+d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
+q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152" 
+d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
+t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+    <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792" 
+d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="signin" unicode="&#xf090;" 
+d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
+q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664" 
+d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
+t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
+q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="github_sign" unicode="&#xf092;" 
+d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
+q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
+t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
+q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664" 
+d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
+t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+    <glyph glyph-name="lemon" unicode="&#xf094;" 
+d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
+q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
+q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
+q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
+    <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408" 
+d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
+q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
+t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+    <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408" 
+d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280" 
+d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
+q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="phone_sign" unicode="&#xf098;" 
+d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
+t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
+t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
+" />
+    <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664" 
+d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
+q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+    <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024" 
+d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+    <glyph glyph-name="github" unicode="&#xf09b;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
+q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
+t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
+q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
+M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
+    <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664" 
+d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
+t316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920" 
+d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
+q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+    <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408" 
+d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
+t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
+q187 -186 294 -425.5t120 -501.5z" />
+    <glyph glyph-name="hdd" unicode="&#xf0a0;" 
+d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
+h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
+l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+    <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792" 
+d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
+t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+    <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
+M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
+t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="certificate" unicode="&#xf0a3;" 
+d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
+l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
+l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+    <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
+q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
+q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
+t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792" 
+d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
+t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
+M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
+q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="hand_up" unicode="&#xf0a6;" 
+d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
+q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
+t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
+q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+    <glyph glyph-name="hand_down" unicode="&#xf0a7;" 
+d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
+t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
+q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
+q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+    <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_right" unicode="&#xf0a9;" 
+d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_up" unicode="&#xf0aa;" 
+d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_down" unicode="&#xf0ab;" 
+d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="globe" unicode="&#xf0ac;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
+q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
+q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
+q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
+t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
+q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
+q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
+t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
+t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
+q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
+q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
+q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
+t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
+q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
+q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+    <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1664" 
+d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
+t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+    <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792" 
+d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
+t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408" 
+d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+    <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792" 
+d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
+t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="fullscreen" unicode="&#xf0b2;" 
+d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
+l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
+" />
+    <glyph glyph-name="group" unicode="&#xf0c0;" horiz-adv-x="1920" 
+d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
+t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
+t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+    <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1664" 
+d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
+l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
+t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
+q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+    <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920" 
+d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
+" />
+    <glyph glyph-name="beaker" unicode="&#xf0c3;" horiz-adv-x="1664" 
+d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+    <glyph glyph-name="cut" unicode="&#xf0c4;" horiz-adv-x="1792" 
+d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
+q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
+q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
+q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
+q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+    <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="1792" 
+d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
+h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+    <glyph glyph-name="paper_clip" unicode="&#xf0c6;" horiz-adv-x="1408" 
+d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
+l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
+z" />
+    <glyph glyph-name="save" unicode="&#xf0c7;" 
+d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
+h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="sign_blank" unicode="&#xf0c8;" 
+d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="reorder" unicode="&#xf0c9;" 
+d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
+t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ul" unicode="&#xf0ca;" horiz-adv-x="1792" 
+d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
+M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="ol" unicode="&#xf0cb;" horiz-adv-x="1792" 
+d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
+q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
+t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
+q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792" 
+d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
+l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
+l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+    <glyph glyph-name="underline" unicode="&#xf0cd;" 
+d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
+q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
+q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
+q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+    <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664" 
+d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
+v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
+q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
+q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
+z" />
+    <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1664" 
+d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
+l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+    <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1792" 
+d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
+t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
+t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="pinterest" unicode="&#xf0d2;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
+q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
+q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="pinterest_sign" unicode="&#xf0d3;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
+t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
+t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="google_plus_sign" unicode="&#xf0d4;" 
+d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
+h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="google_plus" unicode="&#xf0d5;" horiz-adv-x="2304" 
+d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
+q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
+    <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920" 
+d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
+v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_down" unicode="&#xf0d7;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_up" unicode="&#xf0d8;" horiz-adv-x="1024" 
+d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="caret_left" unicode="&#xf0d9;" horiz-adv-x="640" 
+d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="caret_right" unicode="&#xf0da;" horiz-adv-x="640" 
+d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664" 
+d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="sort_down" unicode="&#xf0dd;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="sort_up" unicode="&#xf0de;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="envelope_alt" unicode="&#xf0e0;" horiz-adv-x="1792" 
+d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
+q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+    <glyph glyph-name="linkedin" unicode="&#xf0e1;" 
+d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
+q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+    <glyph glyph-name="undo" unicode="&#xf0e2;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+    <glyph glyph-name="legal" unicode="&#xf0e3;" horiz-adv-x="1792" 
+d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
+t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
+q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
+q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+    <glyph glyph-name="dashboard" unicode="&#xf0e4;" horiz-adv-x="1792" 
+d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
+t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
+t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
+q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="comment_alt" unicode="&#xf0e5;" horiz-adv-x="1792" 
+d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
+q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
+t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="comments_alt" unicode="&#xf0e6;" horiz-adv-x="1792" 
+d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
+t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
+t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
+q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+    <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896" 
+d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+    <glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792" 
+d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664" 
+d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
+q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
+q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+    <glyph glyph-name="paste" unicode="&#xf0ea;" horiz-adv-x="1792" 
+d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
+h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="light_bulb" unicode="&#xf0eb;" horiz-adv-x="1024" 
+d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
+q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
+q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
+t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+    <glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792" 
+d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
+q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="cloud_download" unicode="&#xf0ed;" horiz-adv-x="1920" 
+d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="cloud_upload" unicode="&#xf0ee;" horiz-adv-x="1920" 
+d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="user_md" unicode="&#xf0f0;" horiz-adv-x="1408" 
+d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
+t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
+t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
+t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
+t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792" 
+d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
+t66 -158z" />
+    <glyph glyph-name="bell_alt" unicode="&#xf0f3;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
+t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1920" 
+d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
+t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="food" unicode="&#xf0f5;" horiz-adv-x="1408" 
+d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
+t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="file_text_alt" unicode="&#xf0f6;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
+q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+    <glyph glyph-name="building" unicode="&#xf0f7;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5
+t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320
+v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1920" 
+d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152
+q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792" 
+d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32
+q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="fighter_jet" unicode="&#xf0fb;" horiz-adv-x="1920" 
+d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96
+q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" />
+    <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1664" 
+d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+    <glyph glyph-name="h_sign" unicode="&#xf0fd;" 
+d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="f0fe" unicode="&#xf0fe;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="double_angle_left" unicode="&#xf100;" horiz-adv-x="1024" 
+d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_right" unicode="&#xf101;" horiz-adv-x="1024" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23
+l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_up" unicode="&#xf102;" horiz-adv-x="1152" 
+d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393
+q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_down" unicode="&#xf103;" horiz-adv-x="1152" 
+d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_left" unicode="&#xf104;" horiz-adv-x="640" 
+d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_right" unicode="&#xf105;" horiz-adv-x="640" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_up" unicode="&#xf106;" horiz-adv-x="1152" 
+d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_down" unicode="&#xf107;" horiz-adv-x="1152" 
+d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920" 
+d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19
+t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920" 
+d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z
+M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+    <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152" 
+d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832
+q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="mobile_phone" unicode="&#xf10b;" horiz-adv-x="768" 
+d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136
+q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="circle_blank" unicode="&#xf10c;" 
+d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103
+t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="quote_left" unicode="&#xf10d;" horiz-adv-x="1664" 
+d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z
+M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="quote_right" unicode="&#xf10e;" horiz-adv-x="1664" 
+d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216
+v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1792" 
+d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z
+M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5
+q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="circle" unicode="&#xf111;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792" 
+d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19
+l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+    <glyph glyph-name="github_alt" unicode="&#xf113;" horiz-adv-x="1664" 
+d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320
+q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86
+t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218
+q0 -87 -27 -168q136 -160 136 -398z" />
+    <glyph glyph-name="folder_close_alt" unicode="&#xf114;" horiz-adv-x="1664" 
+d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320
+q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open_alt" unicode="&#xf115;" horiz-adv-x="1920" 
+d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68
+v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z
+" />
+    <glyph glyph-name="expand_alt" unicode="&#xf116;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="collapse_alt" unicode="&#xf117;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="smile" unicode="&#xf118;" 
+d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5
+t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="frown" unicode="&#xf119;" 
+d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204
+t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="meh" unicode="&#xf11a;" 
+d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="gamepad" unicode="&#xf11b;" horiz-adv-x="1920" 
+d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150
+t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+    <glyph glyph-name="keyboard" unicode="&#xf11c;" horiz-adv-x="1920" 
+d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16
+h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16
+h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96
+q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896
+h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="flag_alt" unicode="&#xf11d;" horiz-adv-x="1792" 
+d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9
+h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102
+q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="flag_checkered" unicode="&#xf11e;" horiz-adv-x="1792" 
+d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2
+q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266
+q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8
+q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1664" 
+d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1920" 
+d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5
+l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+    <glyph glyph-name="reply_all" unicode="&#xf122;" horiz-adv-x="1792" 
+d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1
+q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+    <glyph glyph-name="star_half_empty" unicode="&#xf123;" horiz-adv-x="1664" 
+d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5
+l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+    <glyph glyph-name="location_arrow" unicode="&#xf124;" horiz-adv-x="1408" 
+d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+    <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664" 
+d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="code_fork" unicode="&#xf126;" horiz-adv-x="1024" 
+d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5
+q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497
+q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="unlink" unicode="&#xf127;" horiz-adv-x="1664" 
+d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320
+q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18
+l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9
+t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="1024" 
+d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5
+t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+    <glyph glyph-name="_279" unicode="&#xf129;" horiz-adv-x="640" 
+d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192
+q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="640" 
+d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+    <glyph glyph-name="superscript" unicode="&#xf12b;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5
+t-65.5 -51.5t-30.5 -63h232v80h126z" />
+    <glyph glyph-name="subscript" unicode="&#xf12c;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73
+h232v80h126z" />
+    <glyph glyph-name="_283" unicode="&#xf12d;" horiz-adv-x="1920" 
+d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+    <glyph glyph-name="puzzle_piece" unicode="&#xf12e;" horiz-adv-x="1664" 
+d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5
+t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89
+q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117
+q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+    <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152" 
+d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5
+t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+    <glyph glyph-name="microphone_off" unicode="&#xf131;" horiz-adv-x="1408" 
+d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128
+q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23
+t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+    <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280" 
+d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150
+t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="calendar_empty" unicode="&#xf133;" horiz-adv-x="1664" 
+d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="fire_extinguisher" unicode="&#xf134;" horiz-adv-x="1408" 
+d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800
+q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113
+q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+    <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1664" 
+d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1
+q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+    <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1792" 
+d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+    <glyph glyph-name="chevron_sign_left" unicode="&#xf137;" 
+d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_right" unicode="&#xf138;" 
+d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_up" unicode="&#xf139;" 
+d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_down" unicode="&#xf13a;" 
+d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408" 
+d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+    <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1792" 
+d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+    <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792" 
+d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352
+q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19
+t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="unlock_alt" unicode="&#xf13e;" horiz-adv-x="1152" 
+d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181
+v-320h736z" />
+    <glyph glyph-name="bullseye" unicode="&#xf140;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150
+t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ellipsis_horizontal" unicode="&#xf141;" horiz-adv-x="1408" 
+d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ellipsis_vertical" unicode="&#xf142;" horiz-adv-x="384" 
+d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="_303" unicode="&#xf143;" 
+d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128
+q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="play_sign" unicode="&#xf144;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56
+q16 -8 32 -8q17 0 32 9z" />
+    <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1792" 
+d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136
+t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+    <glyph glyph-name="minus_sign_alt" unicode="&#xf146;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="check_minus" unicode="&#xf147;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5
+t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="level_up" unicode="&#xf148;" horiz-adv-x="1024" 
+d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+    <glyph glyph-name="level_down" unicode="&#xf149;" horiz-adv-x="1024" 
+d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+    <glyph glyph-name="check_sign" unicode="&#xf14a;" 
+d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5
+t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="edit_sign" unicode="&#xf14b;" 
+d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_312" unicode="&#xf14c;" 
+d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960
+q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="share_sign" unicode="&#xf14d;" 
+d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5
+t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="compass" unicode="&#xf14e;" 
+d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="collapse" unicode="&#xf150;" 
+d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="collapse_top" unicode="&#xf151;" 
+d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_317" unicode="&#xf152;" 
+d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1024" 
+d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9
+t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26
+l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+    <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1024" 
+d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7
+q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+    <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="1024" 
+d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43
+t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5
+t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50
+t53 -63.5t31.5 -76.5t13 -94z" />
+    <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898" 
+d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102
+q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1027" 
+d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61
+l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+    <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280" 
+d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128
+q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+    <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792" 
+d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23
+t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28
+q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1280" 
+d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164
+l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30
+t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+    <glyph glyph-name="file" unicode="&#xf15b;" 
+d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+    <glyph glyph-name="file_text" unicode="&#xf15c;" 
+d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+    <glyph glyph-name="sort_by_alphabet" unicode="&#xf15d;" horiz-adv-x="1664" 
+d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23
+v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162
+l230 -662h70z" />
+    <glyph glyph-name="_329" unicode="&#xf15e;" horiz-adv-x="1664" 
+d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150
+v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248
+v119h121z" />
+    <glyph glyph-name="sort_by_attributes" unicode="&#xf160;" horiz-adv-x="1792" 
+d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832
+q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_attributes_alt" unicode="&#xf161;" horiz-adv-x="1792" 
+d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192
+q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_order" unicode="&#xf162;" 
+d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23
+zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5
+t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+    <glyph glyph-name="sort_by_order_alt" unicode="&#xf163;" 
+d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9
+t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13
+q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+    <glyph glyph-name="_334" unicode="&#xf164;" horiz-adv-x="1664" 
+d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76
+q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5
+t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+    <glyph glyph-name="_335" unicode="&#xf165;" horiz-adv-x="1664" 
+d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135
+t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121
+t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+    <glyph glyph-name="youtube_sign" unicode="&#xf166;" 
+d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15
+q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38
+q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5
+q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38
+q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5
+h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube" unicode="&#xf167;" 
+d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73
+q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51
+q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99
+q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51
+q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+    <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408" 
+d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942
+q25 45 64 45h241q22 0 31 -15z" />
+    <glyph glyph-name="xing_sign" unicode="&#xf169;" 
+d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1
+l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube_play" unicode="&#xf16a;" horiz-adv-x="1792" 
+d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5
+l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136
+q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" />
+    <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1792" 
+d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+    <glyph glyph-name="stackexchange" unicode="&#xf16c;" 
+d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
+    <glyph glyph-name="instagram" unicode="&#xf16d;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270
+q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5
+t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317
+q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
+    <glyph glyph-name="flickr" unicode="&#xf16e;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150
+t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+    <glyph glyph-name="adn" unicode="&#xf170;" 
+d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f171" unicode="&#xf171;" horiz-adv-x="1408" 
+d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22
+t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18
+t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5
+t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+    <glyph glyph-name="bitbucket_sign" unicode="&#xf172;" 
+d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5
+t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z
+M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="1024" 
+d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14
+q78 2 134 29z" />
+    <glyph glyph-name="tumblr_sign" unicode="&#xf174;" 
+d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="long_arrow_down" unicode="&#xf175;" horiz-adv-x="768" 
+d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+    <glyph glyph-name="long_arrow_up" unicode="&#xf176;" horiz-adv-x="768" 
+d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+    <glyph glyph-name="long_arrow_left" unicode="&#xf177;" horiz-adv-x="1792" 
+d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="long_arrow_right" unicode="&#xf178;" horiz-adv-x="1792" 
+d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+    <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1408" 
+d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65
+q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+    <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664" 
+d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+    <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408" 
+d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30
+t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5
+h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+    <glyph glyph-name="linux" unicode="&#xf17c;" 
+d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z
+M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7
+q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15
+q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5
+t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19
+q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63
+q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92
+q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152
+q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4
+t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5
+t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43
+q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49
+t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54
+q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5
+t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5
+t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+    <glyph glyph-name="dribble" unicode="&#xf17d;" 
+d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81
+t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19
+q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6
+t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="skype" unicode="&#xf17e;" 
+d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5
+t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5
+q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80
+q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+    <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1280" 
+d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z
+M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324
+l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+    <glyph glyph-name="trello" unicode="&#xf181;" 
+d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408
+q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280" 
+d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43
+q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024" 
+d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z
+M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="gittip" unicode="&#xf184;" 
+d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="sun" unicode="&#xf185;" horiz-adv-x="1792" 
+d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4
+l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94
+q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+    <glyph glyph-name="_366" unicode="&#xf186;" 
+d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61
+t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+    <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1792" 
+d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536
+q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1664" 
+d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207
+q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19
+t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+    <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1920" 
+d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58
+t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6
+q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24
+q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2
+q39 5 64 -2.5t31 -16.5z" />
+    <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792" 
+d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12
+q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422
+q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178
+q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z
+M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+    <glyph glyph-name="renren" unicode="&#xf18b;" 
+d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495
+q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+    <glyph glyph-name="_372" unicode="&#xf18c;" horiz-adv-x="1408" 
+d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5
+t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56
+t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5
+t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+    <glyph glyph-name="stack_exchange" unicode="&#xf18d;" horiz-adv-x="1280" 
+d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z
+" />
+    <glyph glyph-name="_374" unicode="&#xf18e;" 
+d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="arrow_circle_alt_left" unicode="&#xf190;" 
+d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_376" unicode="&#xf191;" 
+d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="dot_circle_alt" unicode="&#xf192;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5
+t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_378" unicode="&#xf193;" horiz-adv-x="1664" 
+d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128
+q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+    <glyph glyph-name="vimeo_square" unicode="&#xf194;" 
+d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179
+q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_380" unicode="&#xf195;" horiz-adv-x="1152" 
+d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160
+q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="plus_square_o" unicode="&#xf196;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832
+q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_382" unicode="&#xf197;" horiz-adv-x="2176" 
+d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40
+t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29
+q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+    <glyph glyph-name="_383" unicode="&#xf198;" horiz-adv-x="1664" 
+d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9
+q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102
+t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+    <glyph glyph-name="_384" unicode="&#xf199;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69
+q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13
+t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+    <glyph glyph-name="_385" unicode="&#xf19a;" horiz-adv-x="1792" 
+d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5
+t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21
+t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286
+t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273
+t273 -182.5t331.5 -68z" />
+    <glyph glyph-name="_386" unicode="&#xf19b;" horiz-adv-x="1792" 
+d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+    <glyph glyph-name="_387" unicode="&#xf19c;" horiz-adv-x="2048" 
+d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64
+q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+    <glyph glyph-name="_388" unicode="&#xf19d;" horiz-adv-x="2304" 
+d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433
+q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+    <glyph glyph-name="_389" unicode="&#xf19e;" 
+d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0
+q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+    <glyph glyph-name="uniF1A0" unicode="&#xf1a0;" 
+d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5
+t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
+    <glyph glyph-name="f1a1" unicode="&#xf1a1;" horiz-adv-x="1792" 
+d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26
+t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37
+q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191
+t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_392" unicode="&#xf1a2;" 
+d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54
+q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83
+q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_393" unicode="&#xf1a3;" 
+d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150
+v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103
+t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f1a4" unicode="&#xf1a4;" horiz-adv-x="1920" 
+d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328
+v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+    <glyph glyph-name="_395" unicode="&#xf1a5;" 
+d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="_396" unicode="&#xf1a6;" horiz-adv-x="2048" 
+d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
+v-369h123z" />
+    <glyph glyph-name="_397" unicode="&#xf1a7;" 
+d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101
+v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_398" unicode="&#xf1a8;" horiz-adv-x="2038" 
+d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14
+q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24
+q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33
+q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5
+t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43
+q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5
+t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13
+t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+    <glyph glyph-name="_399" unicode="&#xf1a9;" 
+d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10
+q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14
+q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14
+t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44
+q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+    <glyph glyph-name="_400" unicode="&#xf1aa;" 
+d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z
+M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5
+t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5
+q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126
+t135.5 51q85 0 145 -60.5t60 -145.5z" />
+    <glyph glyph-name="f1ab" unicode="&#xf1ab;" 
+d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5
+q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28
+q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z
+M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11
+q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5
+q20 0 20 -21v-418z" />
+    <glyph glyph-name="_402" unicode="&#xf1ac;" horiz-adv-x="1792" 
+d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48
+l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23
+t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128
+q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128
+q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+    <glyph glyph-name="_403" unicode="&#xf1ad;" 
+d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9
+t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9
+t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9
+t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+    <glyph glyph-name="_404" unicode="&#xf1ae;" horiz-adv-x="1280" 
+d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152
+q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="uniF1B1" unicode="&#xf1b0;" horiz-adv-x="1664" 
+d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5
+q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819
+q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5
+t100.5 134t141.5 55.5z" />
+    <glyph glyph-name="_406" unicode="&#xf1b1;" horiz-adv-x="768" 
+d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+    <glyph glyph-name="_407" unicode="&#xf1b2;" horiz-adv-x="1792" 
+d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z
+" />
+    <glyph glyph-name="_408" unicode="&#xf1b3;" horiz-adv-x="2304" 
+d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67
+t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70
+v-400l434 -186q36 -16 57 -48t21 -70z" />
+    <glyph glyph-name="_409" unicode="&#xf1b4;" horiz-adv-x="2048" 
+d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658
+q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204
+q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+    <glyph glyph-name="_410" unicode="&#xf1b5;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5
+t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217
+t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+    <glyph glyph-name="_411" unicode="&#xf1b6;" horiz-adv-x="1792" 
+d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5
+q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89
+q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+    <glyph glyph-name="_412" unicode="&#xf1b7;" 
+d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5
+q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5
+q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z
+" />
+    <glyph glyph-name="_413" unicode="&#xf1b8;" horiz-adv-x="1792" 
+d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188
+l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5
+t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1
+q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+    <glyph glyph-name="_414" unicode="&#xf1b9;" horiz-adv-x="2048" 
+d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384
+q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5
+l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_415" unicode="&#xf1ba;" horiz-adv-x="2048" 
+d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5
+t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z
+M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+    <glyph glyph-name="_416" unicode="&#xf1bb;" 
+d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384
+q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+    <glyph glyph-name="_417" unicode="&#xf1bc;" 
+d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64
+q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37
+q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_418" unicode="&#xf1bd;" horiz-adv-x="1024" 
+d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+    <glyph glyph-name="_419" unicode="&#xf1be;" horiz-adv-x="2304" 
+d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11
+q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245
+q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785
+l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242
+q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236
+q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786
+q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+    <glyph glyph-name="uniF1C0" unicode="&#xf1c0;" 
+d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127
+t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5
+t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+    <glyph glyph-name="uniF1C1" unicode="&#xf1c1;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197
+q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8
+q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+    <glyph glyph-name="_422" unicode="&#xf1c2;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5
+t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" />
+    <glyph glyph-name="_423" unicode="&#xf1c3;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107
+h-290v-107h68l189 -272l-194 -283h-68z" />
+    <glyph glyph-name="_424" unicode="&#xf1c4;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+    <glyph glyph-name="_425" unicode="&#xf1c5;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+    <glyph glyph-name="_426" unicode="&#xf1c6;" 
+d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400
+v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79
+q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+    <glyph glyph-name="_427" unicode="&#xf1c7;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5
+q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+    <glyph glyph-name="_428" unicode="&#xf1c8;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+    <glyph glyph-name="_429" unicode="&#xf1c9;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243
+l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+    <glyph glyph-name="_430" unicode="&#xf1ca;" 
+d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406
+q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+    <glyph glyph-name="_431" unicode="&#xf1cb;" horiz-adv-x="1792" 
+d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
+q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+    <glyph glyph-name="_432" unicode="&#xf1cc;" horiz-adv-x="2048" 
+d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94
+q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55
+t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" />
+    <glyph glyph-name="_433" unicode="&#xf1cd;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194
+q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5
+t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+    <glyph glyph-name="_434" unicode="&#xf1ce;" horiz-adv-x="1792" 
+d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5
+t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
+    <glyph glyph-name="uniF1D0" unicode="&#xf1d0;" horiz-adv-x="1792" 
+d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41
+t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170
+t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136
+q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+    <glyph glyph-name="uniF1D1" unicode="&#xf1d1;" horiz-adv-x="1792" 
+d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251
+l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162
+q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33
+q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5
+t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF1D2" unicode="&#xf1d2;" 
+d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85
+q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392
+q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072
+q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_438" unicode="&#xf1d3;" horiz-adv-x="1792" 
+d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58
+q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47
+q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171
+v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+    <glyph glyph-name="_439" unicode="&#xf1d4;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF1D5" unicode="&#xf1d5;" horiz-adv-x="1280" 
+d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5
+t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153
+t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+    <glyph glyph-name="uniF1D6" unicode="&#xf1d6;" horiz-adv-x="1792" 
+d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5
+q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20
+t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5
+t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+    <glyph glyph-name="uniF1D7" unicode="&#xf1d7;" horiz-adv-x="2048" 
+d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25
+q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5
+q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109
+q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+    <glyph glyph-name="_443" unicode="&#xf1d8;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+    <glyph glyph-name="_444" unicode="&#xf1d9;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137
+l863 639l-478 -797z" />
+    <glyph glyph-name="_445" unicode="&#xf1da;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23
+t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_446" unicode="&#xf1db;" 
+d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_447" unicode="&#xf1dc;" horiz-adv-x="1792" 
+d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15
+t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2
+t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160
+q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5
+q0 -26 -12 -48t-36 -22z" />
+    <glyph glyph-name="_448" unicode="&#xf1dd;" horiz-adv-x="1280" 
+d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179
+q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+    <glyph glyph-name="_449" unicode="&#xf1de;" 
+d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256
+q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+    <glyph glyph-name="uniF1E0" unicode="&#xf1e0;" 
+d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5
+t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+    <glyph glyph-name="_451" unicode="&#xf1e1;" 
+d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5
+t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_452" unicode="&#xf1e2;" horiz-adv-x="1792" 
+d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5
+t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91
+q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9
+t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="_453" unicode="&#xf1e3;" horiz-adv-x="1792" 
+d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323
+l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+    <glyph glyph-name="_454" unicode="&#xf1e4;" horiz-adv-x="1792" 
+d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5
+t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+    <glyph glyph-name="_455" unicode="&#xf1e5;" horiz-adv-x="1792" 
+d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z
+M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_456" unicode="&#xf1e6;" horiz-adv-x="1792" 
+d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234
+l401 400q38 37 91 37t90 -37z" />
+    <glyph glyph-name="_457" unicode="&#xf1e7;" horiz-adv-x="1792" 
+d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5
+t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z
+M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7
+t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+    <glyph glyph-name="_458" unicode="&#xf1e8;" horiz-adv-x="1792" 
+d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+    <glyph glyph-name="_459" unicode="&#xf1e9;" 
+d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36
+q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5
+t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87
+q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+    <glyph glyph-name="_460" unicode="&#xf1ea;" horiz-adv-x="2048" 
+d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19
+t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+    <glyph glyph-name="_461" unicode="&#xf1eb;" horiz-adv-x="2048" 
+d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121
+q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z
+M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+    <glyph glyph-name="_462" unicode="&#xf1ec;" horiz-adv-x="1792" 
+d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5
+t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38
+h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_463" unicode="&#xf1ed;" 
+d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246
+q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598
+q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
+    <glyph glyph-name="_464" unicode="&#xf1ee;" horiz-adv-x="1792" 
+d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640
+q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
+    <glyph glyph-name="uniF1F0" unicode="&#xf1f0;" horiz-adv-x="2304" 
+d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27
+q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128
+q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_466" unicode="&#xf1f1;" horiz-adv-x="2304" 
+d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249
+q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z
+M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32
+h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4
+q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75
+q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14
+q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22
+q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12
+q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122
+h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5
+t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_467" unicode="&#xf1f2;" horiz-adv-x="2304" 
+d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42
+q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604
+v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569
+q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73
+t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+    <glyph glyph-name="f1f3" unicode="&#xf1f3;" horiz-adv-x="2304" 
+d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z
+M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260
+l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279
+v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040
+q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168
+q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5
+t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21
+h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5
+t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+    <glyph glyph-name="_469" unicode="&#xf1f4;" horiz-adv-x="2304" 
+d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16
+t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76
+q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59
+t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489
+l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66
+q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_470" unicode="&#xf1f5;" horiz-adv-x="2304" 
+d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109
+q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118
+q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151
+q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31
+q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_471" unicode="&#xf1f6;" horiz-adv-x="2048" 
+d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5
+l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5
+l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_472" unicode="&#xf1f7;" horiz-adv-x="2048" 
+d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128
+q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161
+q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_473" unicode="&#xf1f8;" horiz-adv-x="1408" 
+d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167
+q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_474" unicode="&#xf1f9;" 
+d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5
+t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5
+t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_475" unicode="&#xf1fa;" 
+d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53
+q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24
+t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61
+t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+    <glyph glyph-name="_476" unicode="&#xf1fb;" horiz-adv-x="1792" 
+d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10
+t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+    <glyph glyph-name="f1fc" unicode="&#xf1fc;" horiz-adv-x="1792" 
+d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5
+t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+    <glyph glyph-name="_478" unicode="&#xf1fd;" horiz-adv-x="1792" 
+d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5
+t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38
+t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448
+h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5
+q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+    <glyph glyph-name="_479" unicode="&#xf1fe;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+    <glyph glyph-name="_480" unicode="&#xf200;" horiz-adv-x="1792" 
+d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_481" unicode="&#xf201;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="_482" unicode="&#xf202;" horiz-adv-x="1792" 
+d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20
+q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50
+t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1
+q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+    <glyph glyph-name="_483" unicode="&#xf203;" 
+d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73
+q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110
+q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_484" unicode="&#xf204;" horiz-adv-x="2048" 
+d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5
+t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5
+t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+    <glyph glyph-name="_485" unicode="&#xf205;" horiz-adv-x="2048" 
+d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5
+t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+    <glyph glyph-name="_486" unicode="&#xf206;" horiz-adv-x="2304" 
+d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94
+q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469
+q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400
+q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="_487" unicode="&#xf207;" 
+d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5
+h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+    <glyph glyph-name="_488" unicode="&#xf208;" horiz-adv-x="2048" 
+d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327
+q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5
+q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+    <glyph glyph-name="_489" unicode="&#xf209;" horiz-adv-x="1280" 
+d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119
+t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5
+t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14
+q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88
+q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5
+t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+    <glyph glyph-name="_490" unicode="&#xf20a;" horiz-adv-x="2048" 
+d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206
+q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307
+t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14
+t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+    <glyph glyph-name="_491" unicode="&#xf20b;" 
+d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5
+t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_492" unicode="&#xf20c;" 
+d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55
+q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410
+q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+    <glyph glyph-name="_493" unicode="&#xf20d;" 
+d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+    <glyph glyph-name="_494" unicode="&#xf20e;" horiz-adv-x="2048" 
+d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335
+q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5
+q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438
+h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66
+l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946
+l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82
+zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+    <glyph glyph-name="f210" unicode="&#xf210;" 
+d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+    <glyph glyph-name="_496" unicode="&#xf211;" 
+d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384
+q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+    <glyph glyph-name="f212" unicode="&#xf212;" horiz-adv-x="2048" 
+d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021
+q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25
+q209 0 374 -102q172 107 374 102z" />
+    <glyph glyph-name="_498" unicode="&#xf213;" horiz-adv-x="2048" 
+d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101
+q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284
+q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+    <glyph glyph-name="_499" unicode="&#xf214;" 
+d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
+l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
+v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
+M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
+v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51
+h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5
+t-43 -34t-16.5 -53.5z" />
+    <glyph glyph-name="_500" unicode="&#xf215;" horiz-adv-x="2048" 
+d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832
+q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+    <glyph glyph-name="_501" unicode="&#xf216;" horiz-adv-x="2048" 
+d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5
+t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113
+t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5
+q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+    <glyph glyph-name="_502" unicode="&#xf217;" horiz-adv-x="1664" 
+d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_503" unicode="&#xf218;" horiz-adv-x="1664" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_504" unicode="&#xf219;" horiz-adv-x="2048" 
+d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20
+l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+    <glyph glyph-name="_505" unicode="&#xf21a;" horiz-adv-x="2048" 
+d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83
+q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314
+v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+    <glyph glyph-name="_506" unicode="&#xf21b;" 
+d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14
+t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5
+q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31
+t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+    <glyph glyph-name="_507" unicode="&#xf21c;" horiz-adv-x="2304" 
+d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5
+t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105
+l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226
+t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+    <glyph glyph-name="_508" unicode="&#xf21d;" 
+d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12
+q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384
+q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5
+t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_509" unicode="&#xf21e;" horiz-adv-x="1792" 
+d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221
+q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124
+t127 -344z" />
+    <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292
+q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+    <glyph glyph-name="_511" unicode="&#xf222;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5
+q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_512" unicode="&#xf223;" horiz-adv-x="1280" 
+d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5
+t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_513" unicode="&#xf224;" 
+d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_514" unicode="&#xf225;" horiz-adv-x="1792" 
+d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9
+t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_515" unicode="&#xf226;" horiz-adv-x="1792" 
+d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23
+t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391
+q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391
+q0 -226 -154 -391q103 -57 218 -57z" />
+    <glyph glyph-name="_516" unicode="&#xf227;" horiz-adv-x="1920" 
+d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230
+q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9
+t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128
+q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+    <glyph glyph-name="_517" unicode="&#xf228;" horiz-adv-x="2048" 
+d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23
+t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9
+t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5
+t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+    <glyph glyph-name="_518" unicode="&#xf229;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5
+t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_519" unicode="&#xf22a;" horiz-adv-x="1280" 
+d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22
+t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5
+t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_520" unicode="&#xf22b;" horiz-adv-x="2048" 
+d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5
+t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5
+t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_521" unicode="&#xf22c;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_522" unicode="&#xf22d;" horiz-adv-x="1280" 
+d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123
+t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
+    <glyph glyph-name="_523" unicode="&#xf22e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_524" unicode="&#xf22f;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_525" unicode="&#xf230;" 
+d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+    <glyph glyph-name="_526" unicode="&#xf231;" horiz-adv-x="1280" 
+d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5
+l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5
+q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+    <glyph glyph-name="_527" unicode="&#xf232;" 
+d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5
+t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233
+l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+    <glyph glyph-name="_528" unicode="&#xf233;" horiz-adv-x="1792" 
+d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216
+q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+    <glyph glyph-name="_529" unicode="&#xf234;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5
+t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+    <glyph glyph-name="_530" unicode="&#xf235;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136
+q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69
+t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+    <glyph glyph-name="_531" unicode="&#xf236;" horiz-adv-x="2048" 
+d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704
+q-26 0 -45 -19t-19 -45v-384h1152z" />
+    <glyph glyph-name="_532" unicode="&#xf237;" 
+d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+    <glyph glyph-name="_533" unicode="&#xf238;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56
+t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+    <glyph glyph-name="_534" unicode="&#xf239;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47
+t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+    <glyph glyph-name="_535" unicode="&#xf23a;" horiz-adv-x="1792" 
+d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116
+q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
+    <glyph glyph-name="_536" unicode="&#xf23b;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
+    <glyph glyph-name="_537" unicode="&#xf23c;" horiz-adv-x="2296" 
+d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5
+q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5
+q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42
+q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37
+q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5
+q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139
+q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8
+t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132
+q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132
+q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z
+M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86
+t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103
+q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4
+l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130
+t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150
+q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12
+q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
+    <glyph glyph-name="_538" unicode="&#xf23d;" horiz-adv-x="2304" 
+d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5
+t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5
+t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
+    <glyph glyph-name="_539" unicode="&#xf23e;" horiz-adv-x="1792" 
+d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348
+t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23
+t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512
+q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
+    <glyph glyph-name="_540" unicode="&#xf240;" horiz-adv-x="2304" 
+d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113
+v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="_541" unicode="&#xf241;" horiz-adv-x="2304" 
+d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_542" unicode="&#xf242;" horiz-adv-x="2304" 
+d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_543" unicode="&#xf243;" horiz-adv-x="2304" 
+d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_544" unicode="&#xf244;" horiz-adv-x="2304" 
+d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23
+v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_545" unicode="&#xf245;" horiz-adv-x="1280" 
+d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
+    <glyph glyph-name="_546" unicode="&#xf246;" horiz-adv-x="1024" 
+d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
+    <glyph glyph-name="_547" unicode="&#xf247;" horiz-adv-x="2048" 
+d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
+h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
+    <glyph glyph-name="_548" unicode="&#xf248;" horiz-adv-x="2304" 
+d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
+v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
+    <glyph glyph-name="_549" unicode="&#xf249;" 
+d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
+    <glyph glyph-name="_550" unicode="&#xf24a;" 
+d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="_551" unicode="&#xf24b;" horiz-adv-x="2304" 
+d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5
+t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88
+t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90
+t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_552" unicode="&#xf24c;" horiz-adv-x="2304" 
+d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294
+t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z
+M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_553" unicode="&#xf24d;" horiz-adv-x="1792" 
+d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113
+zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_554" unicode="&#xf24e;" horiz-adv-x="2304" 
+d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91
+t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5
+t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
+    <glyph glyph-name="_555" unicode="&#xf250;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5
+t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_556" unicode="&#xf251;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
+    <glyph glyph-name="_557" unicode="&#xf252;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
+    <glyph glyph-name="_558" unicode="&#xf253;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196
+h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_559" unicode="&#xf254;" 
+d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87
+t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9
+h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
+    <glyph glyph-name="_560" unicode="&#xf255;" 
+d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25
+q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27
+t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21
+q72 69 174 69z" />
+    <glyph glyph-name="_561" unicode="&#xf256;" horiz-adv-x="1792" 
+d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33
+t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52
+h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
+    <glyph glyph-name="_562" unicode="&#xf257;" horiz-adv-x="1792" 
+d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668
+q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17
+t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5
+t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5
+q0 -42 -23 -78t-61 -53l-310 -141h91z" />
+    <glyph glyph-name="_563" unicode="&#xf258;" horiz-adv-x="2048" 
+d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32
+q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68
+q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
+    <glyph glyph-name="_564" unicode="&#xf259;" horiz-adv-x="2048" 
+d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79
+t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24
+q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26
+l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" />
+    <glyph glyph-name="_565" unicode="&#xf25a;" horiz-adv-x="1792" 
+d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5
+q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5
+v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32
+v-384h32z" />
+    <glyph glyph-name="_566" unicode="&#xf25b;" 
+d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181
+v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46
+q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5
+q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308
+q0 -53 37.5 -90.5t90.5 -37.5h668z" />
+    <glyph glyph-name="_567" unicode="&#xf25c;" horiz-adv-x="1973" 
+d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5
+t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141
+q13 0 22 -8.5t10 -20.5z" />
+    <glyph glyph-name="_568" unicode="&#xf25d;" horiz-adv-x="1792" 
+d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109
+t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640
+q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_569" unicode="&#xf25e;" horiz-adv-x="1792" 
+d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78
+q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5
+t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376
+q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
+    <glyph glyph-name="f260" unicode="&#xf260;" horiz-adv-x="2048" 
+d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
+    <glyph glyph-name="f261" unicode="&#xf261;" horiz-adv-x="1792" 
+d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_572" unicode="&#xf262;" horiz-adv-x="2304" 
+d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57
+t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197
+t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5
+t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5
+t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5
+q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
+    <glyph glyph-name="f263" unicode="&#xf263;" horiz-adv-x="1280" 
+d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5
+t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94
+q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
+    <glyph glyph-name="_574" unicode="&#xf264;" 
+d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32
+q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5
+zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_575" unicode="&#xf265;" horiz-adv-x="1720" 
+d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33
+l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
+    <glyph glyph-name="_576" unicode="&#xf266;" horiz-adv-x="2304" 
+d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540
+q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81
+l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
+    <glyph glyph-name="_577" unicode="&#xf267;" horiz-adv-x="1792" 
+d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640
+q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5
+t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5
+t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5
+t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191
+t191 -286t71 -348z" />
+    <glyph glyph-name="_578" unicode="&#xf268;" horiz-adv-x="1792" 
+d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962
+q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
+    <glyph glyph-name="_579" unicode="&#xf269;" horiz-adv-x="1792" 
+d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5
+q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5
+q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
+    <glyph glyph-name="_580" unicode="&#xf26a;" horiz-adv-x="1792" 
+d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339
+q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z
+" />
+    <glyph glyph-name="_581" unicode="&#xf26b;" horiz-adv-x="1792" 
+d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606
+q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z
+M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
+    <glyph glyph-name="_582" unicode="&#xf26c;" horiz-adv-x="2048" 
+d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23
+v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_583" unicode="&#xf26d;" horiz-adv-x="1792" 
+d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34
+h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100
+q-68 175 -180 287z" />
+    <glyph glyph-name="_584" unicode="&#xf26e;" 
+d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6
+q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13
+q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249
+q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183
+q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46
+t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
+    <glyph glyph-name="_585" unicode="&#xf270;" horiz-adv-x="1792" 
+d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z
+M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30
+q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57
+t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133
+q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
+    <glyph glyph-name="_586" unicode="&#xf271;" horiz-adv-x="1792" 
+d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9
+h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224
+v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
+    <glyph glyph-name="_587" unicode="&#xf272;" horiz-adv-x="1792" 
+d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23
+t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_588" unicode="&#xf273;" horiz-adv-x="1792" 
+d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z
+M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_589" unicode="&#xf274;" horiz-adv-x="1792" 
+d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23
+t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_590" unicode="&#xf275;" horiz-adv-x="1792" 
+d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
+    <glyph glyph-name="_591" unicode="&#xf276;" horiz-adv-x="1024" 
+d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249
+q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
+    <glyph glyph-name="_592" unicode="&#xf277;" horiz-adv-x="1792" 
+d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768
+q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
+    <glyph glyph-name="_593" unicode="&#xf278;" horiz-adv-x="2048" 
+d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
+v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
+    <glyph glyph-name="_594" unicode="&#xf279;" horiz-adv-x="1792" 
+d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
+q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
+    <glyph glyph-name="_595" unicode="&#xf27a;" horiz-adv-x="1792" 
+d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37
+t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="_596" unicode="&#xf27b;" horiz-adv-x="1792" 
+d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5
+t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51
+t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
+    <glyph glyph-name="_597" unicode="&#xf27c;" horiz-adv-x="1024" 
+d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
+    <glyph glyph-name="_598" unicode="&#xf27d;" horiz-adv-x="1792" 
+d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246
+q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
+    <glyph glyph-name="f27e" unicode="&#xf27e;" 
+d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
+    <glyph glyph-name="uniF280" unicode="&#xf280;" 
+d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72
+h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275
+l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
+    <glyph glyph-name="uniF281" unicode="&#xf281;" horiz-adv-x="1792" 
+d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5
+l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44
+t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106
+q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
+    <glyph glyph-name="_602" unicode="&#xf282;" horiz-adv-x="1792" 
+d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53
+q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
+    <glyph glyph-name="_603" unicode="&#xf283;" horiz-adv-x="2304" 
+d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
+    <glyph glyph-name="_604" unicode="&#xf284;" horiz-adv-x="1792" 
+d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308
+t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20
+t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" />
+    <glyph glyph-name="uniF285" unicode="&#xf285;" horiz-adv-x="1792" 
+d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
+    <glyph glyph-name="uniF286" unicode="&#xf286;" horiz-adv-x="1792" 
+d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96
+q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5
+q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96
+q16 0 16 -16z" />
+    <glyph glyph-name="_607" unicode="&#xf287;" horiz-adv-x="2304" 
+d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96
+q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5
+t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
+    <glyph glyph-name="_608" unicode="&#xf288;" horiz-adv-x="1792" 
+d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348
+t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_609" unicode="&#xf289;" horiz-adv-x="2304" 
+d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22
+q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5
+q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13
+q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
+    <glyph glyph-name="_610" unicode="&#xf28a;" 
+d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83
+t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20
+q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5
+t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
+    <glyph glyph-name="_611" unicode="&#xf28b;" 
+d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103
+t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_612" unicode="&#xf28c;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
+    <glyph glyph-name="_613" unicode="&#xf28d;" 
+d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="_614" unicode="&#xf28e;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
+    <glyph glyph-name="_615" unicode="&#xf290;" horiz-adv-x="1792" 
+d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_616" unicode="&#xf291;" horiz-adv-x="2048" 
+d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5
+t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416
+q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441
+h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
+    <glyph glyph-name="_617" unicode="&#xf292;" horiz-adv-x="1792" 
+d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12
+q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311
+q15 0 25 -12q9 -12 6 -28z" />
+    <glyph glyph-name="_618" unicode="&#xf293;" 
+d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5
+t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
+    <glyph glyph-name="_619" unicode="&#xf294;" horiz-adv-x="1024" 
+d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
+    <glyph glyph-name="_620" unicode="&#xf295;" 
+d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5
+t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_621" unicode="&#xf296;" horiz-adv-x="1792" 
+d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
+    <glyph glyph-name="_622" unicode="&#xf297;" horiz-adv-x="1792" 
+d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111
+q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
+    <glyph glyph-name="_623" unicode="&#xf298;" 
+d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14
+t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
+    <glyph glyph-name="_624" unicode="&#xf299;" horiz-adv-x="1792" 
+d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57
+q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285
+q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
+    <glyph glyph-name="_625" unicode="&#xf29a;" horiz-adv-x="1792" 
+d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42
+q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298
+t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_626" unicode="&#xf29b;" 
+d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300
+l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z
+M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
+    <glyph glyph-name="_627" unicode="&#xf29c;" 
+d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5
+t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5
+t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5
+t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_628" unicode="&#xf29d;" horiz-adv-x="1408" 
+d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457
+q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521
+q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661
+q3 -1 7 1t7 4l3 2q11 9 11 17z" />
+    <glyph glyph-name="_629" unicode="&#xf29e;" horiz-adv-x="2304" 
+d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10
+t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5
+t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5
+h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96
+t9.5 -70.5z" />
+    <glyph glyph-name="uniF2A0" unicode="&#xf2a0;" horiz-adv-x="1408" 
+d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5
+q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127
+l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272
+t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249
+q-18 -19 -45 -19z" />
+    <glyph glyph-name="uniF2A1" unicode="&#xf2a1;" horiz-adv-x="2176" 
+d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136
+t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56
+t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56
+t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136
+t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="uniF2A2" unicode="&#xf2a2;" horiz-adv-x="1792" 
+d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z
+M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72
+t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45
+t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4
+q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
+    <glyph glyph-name="uniF2A3" unicode="&#xf2a3;" horiz-adv-x="2304" 
+d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55
+q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5
+q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101
+q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35
+q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5
+q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
+    <glyph glyph-name="uniF2A4" unicode="&#xf2a4;" horiz-adv-x="1792" 
+d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19
+t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74
+t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233
+l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
+    <glyph glyph-name="uniF2A5" unicode="&#xf2a5;" 
+d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2
+q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10
+q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2A6" unicode="&#xf2a6;" horiz-adv-x="1535" 
+d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5
+l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5
+q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9
+q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
+    <glyph glyph-name="uniF2A7" unicode="&#xf2a7;" horiz-adv-x="1664" 
+d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37
+t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
+l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148
+q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26
+l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
+    <glyph glyph-name="uniF2A8" unicode="&#xf2a8;" horiz-adv-x="1792" 
+d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5
+q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841
+q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5
+q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
+    <glyph glyph-name="uniF2A9" unicode="&#xf2a9;" horiz-adv-x="1280" 
+d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5
+q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z
+M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
+    <glyph glyph-name="uniF2AA" unicode="&#xf2aa;" 
+d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z
+M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5
+q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AB" unicode="&#xf2ab;" 
+d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114
+q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5
+t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="uniF2AC" unicode="&#xf2ac;" horiz-adv-x="1664" 
+d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35
+q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5
+t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
+    <glyph glyph-name="uniF2AD" unicode="&#xf2ad;" 
+d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115
+q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15
+t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AE" unicode="&#xf2ae;" horiz-adv-x="2304" 
+d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7
+q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158
+q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
+    <glyph glyph-name="uniF2B0" unicode="&#xf2b0;" 
+d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104
+q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108
+l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z
+M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
+    <glyph glyph-name="uniF2B1" unicode="&#xf2b1;" horiz-adv-x="1664" 
+d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5
+t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
+    <glyph glyph-name="uniF2B2" unicode="&#xf2b2;" horiz-adv-x="1792" 
+d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5
+t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114
+q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50
+q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5
+t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46
+q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5
+q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177
+t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
+    <glyph glyph-name="uniF2B3" unicode="&#xf2b3;" 
+d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110
+h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="uniF2B4" unicode="&#xf2b4;" 
+d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5
+q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B5" unicode="&#xf2b5;" horiz-adv-x="2304" 
+d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66
+l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180
+q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z
+M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421
+q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B6" unicode="&#xf2b6;" horiz-adv-x="1792" 
+d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107
+t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39
+q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" />
+    <glyph glyph-name="uniF2B7" unicode="&#xf2b7;" horiz-adv-x="1792" 
+d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5
+l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5
+h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94
+q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" />
+    <glyph glyph-name="uniF2B8" unicode="&#xf2b8;" 
+d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465
+l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161
+q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74
+q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" />
+    <glyph glyph-name="uniF2B9" unicode="&#xf2b9;" horiz-adv-x="1664" 
+d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576
+q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216
+q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="uniF2BA" unicode="&#xf2ba;" horiz-adv-x="1664" 
+d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5
+t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96
+q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216
+q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" />
+    <glyph glyph-name="uniF2BB" unicode="&#xf2bb;" horiz-adv-x="2048" 
+d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z
+M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568
+q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9
+h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BC" unicode="&#xf2bc;" horiz-adv-x="2048" 
+d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925
+q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568
+q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5
+t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113
+t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BD" unicode="&#xf2bd;" horiz-adv-x="1792" 
+d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5
+t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2BE" unicode="&#xf2be;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61
+t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z" />
+    <glyph glyph-name="uniF2C0" unicode="&#xf2c0;" 
+d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5
+t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145
+q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" />
+    <glyph glyph-name="uniF2C1" unicode="&#xf2c1;" horiz-adv-x="1280" 
+d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5
+t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352
+q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C2" unicode="&#xf2c2;" horiz-adv-x="2048" 
+d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56
+t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23
+v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728
+q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C3" unicode="&#xf2c3;" horiz-adv-x="2048" 
+d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z
+M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47
+h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C4" unicode="&#xf2c4;" horiz-adv-x="1792" 
+d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117
+q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5
+t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" />
+    <glyph glyph-name="uniF2C5" unicode="&#xf2c5;" horiz-adv-x="2304" 
+d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21
+t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46
+t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54
+t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29
+q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5
+t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314
+q2 -42 2 -64z" />
+    <glyph glyph-name="uniF2C6" unicode="&#xf2c6;" horiz-adv-x="1792" 
+d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2C7" unicode="&#xf2c7;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C8" unicode="&#xf2c8;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C9" unicode="&#xf2c9;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CA" unicode="&#xf2ca;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CB" unicode="&#xf2cb;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z
+M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
+    <glyph glyph-name="uniF2CC" unicode="&#xf2cc;" horiz-adv-x="1920" 
+d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41
+t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19
+t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19
+t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" />
+    <glyph glyph-name="uniF2CD" unicode="&#xf2cd;" horiz-adv-x="1792" 
+d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42
+q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9
+t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23
+t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" />
+    <glyph glyph-name="uniF2CE" unicode="&#xf2ce;" 
+d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5
+t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70
+q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20
+q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5
+t72.5 -263.5z" />
+    <glyph glyph-name="uniF2D0" unicode="&#xf2d0;" horiz-adv-x="1792" 
+d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D1" unicode="&#xf2d1;" horiz-adv-x="1792" 
+d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D2" unicode="&#xf2d2;" horiz-adv-x="2048" 
+d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="uniF2D3" unicode="&#xf2d3;" horiz-adv-x="1792" 
+d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10
+l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D4" unicode="&#xf2d4;" horiz-adv-x="1792" 
+d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D5" unicode="&#xf2d5;" horiz-adv-x="1792" 
+d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D6" unicode="&#xf2d6;" horiz-adv-x="1794" 
+d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12
+t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5
+t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5
+q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5
+q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34
+q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5
+t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D7" unicode="&#xf2d7;" 
+d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89
+q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5
+t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" />
+    <glyph glyph-name="uniF2D8" unicode="&#xf2d8;" 
+d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7
+t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5
+h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113
+v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D9" unicode="&#xf2d9;" horiz-adv-x="2176" 
+d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584
+q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5
+q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15
+q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82
+q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104
+t302 11t306.5 -97q220 -115 333 -336t87 -474z" />
+    <glyph glyph-name="uniF2DA" unicode="&#xf2da;" horiz-adv-x="1792" 
+d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178
+q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199
+t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297
+t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208
+t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" />
+    <glyph glyph-name="uniF2DB" unicode="&#xf2db;" 
+d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16
+q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28
+t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32
+q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16
+h48q16 0 16 -16z" />
+    <glyph glyph-name="uniF2DC" unicode="&#xf2dc;" horiz-adv-x="1664" 
+d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45
+t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33
+q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313
+l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106
+q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" />
+    <glyph glyph-name="uniF2DD" unicode="&#xf2dd;" horiz-adv-x="1792" 
+d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321
+q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" />
+    <glyph glyph-name="uniF2DE" unicode="&#xf2de;" horiz-adv-x="1792" 
+d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62
+t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71
+t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2E0" unicode="&#xf2e0;" horiz-adv-x="1920" 
+d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3
+t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53
+q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5
+q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5
+t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5
+q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z
+M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21
+q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16
+q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" />
+    <glyph glyph-name="uniF2E1" unicode="&#xf2e1;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E2" unicode="&#xf2e2;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E3" unicode="&#xf2e3;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E4" unicode="&#xf2e4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E5" unicode="&#xf2e5;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E6" unicode="&#xf2e6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E7" unicode="&#xf2e7;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_698" unicode="&#xf2e8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E9" unicode="&#xf2e9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EA" unicode="&#xf2ea;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EB" unicode="&#xf2eb;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EC" unicode="&#xf2ec;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2ED" unicode="&#xf2ed;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EE" unicode="&#xf2ee;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="lessequal" unicode="&#xf500;" horiz-adv-x="1792" 
+ />
+  </font>
+</defs></svg>
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.ttf b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.ttf differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.woff b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..400014a4b06eee3d0c0d54402a47ab2601b2862b
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.woff differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.woff2 b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/fontawesome-webfont.woff2 differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold-italic.woff b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold-italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..88ad05b9ff413055b4d4e89dd3eec1c193fa20c6
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold-italic.woff differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold-italic.woff2 b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..c4e3d804b57b625b16a36d767bfca6bbf63d414e
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold-italic.woff2 differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold.woff b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..c6dff51f063cc732fdb5fe786a8966de85f4ebec
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold.woff differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold.woff2 b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..bb195043cfc07fa52741c6144d7378b5ba8be4c5
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-bold.woff2 differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal-italic.woff b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal-italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..76114bc03362242c3325ecda6ce6d02bb737880f
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal-italic.woff differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal-italic.woff2 b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..3404f37e2e312757841abe20343588a7740768ca
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal-italic.woff2 differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal.woff b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal.woff
new file mode 100644
index 0000000000000000000000000000000000000000..ae1307ff5f4c48678621c240f8972d5a6e20b22c
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal.woff differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal.woff2 b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..3bf9843328a6359b6bd06e50010319c63da0d717
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/css/fonts/lato-normal.woff2 differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/css/theme.css b/VimbaX/doc/VimbaX_Documentation/_static/css/theme.css
new file mode 100644
index 0000000000000000000000000000000000000000..0d9ae7e1a45b82198c53548383a570d924993371
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/css/theme.css
@@ -0,0 +1,4 @@
+html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/custom.css b/VimbaX/doc/VimbaX_Documentation/_static/custom.css
new file mode 100644
index 0000000000000000000000000000000000000000..253f08d4161357c64af867f6f9e091a12b22e1e8
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/custom.css
@@ -0,0 +1,6247 @@
+html {
+  box-sizing: border-box;
+}
+*,
+:after,
+:before {
+  box-sizing: inherit;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+  display: block;
+}
+audio,
+canvas,
+video {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+}
+[hidden],
+audio:not([controls]) {
+  display: none;
+}
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+html {
+  font-size: 100%;
+  -webkit-text-size-adjust: 100%;
+  -ms-text-size-adjust: 100%;
+}
+body {
+  margin: 0;
+}
+a:active,
+a:hover {
+  outline: 0;
+}
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+b,
+strong {
+  font-weight: 700;
+}
+blockquote {
+  margin: 0;
+}
+dfn {
+  font-style: italic;
+}
+ins {
+  background: #ff9;
+  text-decoration: none;
+}
+ins,
+mark {
+  color: #000;
+}
+mark {
+  background: #ff0;
+  font-style: italic;
+  font-weight: 700;
+}
+.rst-content code,
+.rst-content tt,
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, serif;
+  _font-family: courier new, monospace;
+  font-size: 1em;
+}
+pre {
+  white-space: pre;
+}
+q {
+  quotes: none;
+}
+q:after,
+q:before {
+  content: "";
+  content: none;
+}
+small {
+  font-size: 85%;
+}
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+sup {
+  top: -0.5em;
+}
+sub {
+  bottom: -0.25em;
+}
+dl,
+ol,
+ul {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  list-style-image: none;
+}
+li {
+  list-style: none;
+}
+dd {
+  margin: 0;
+}
+img {
+  border: 0;
+  -ms-interpolation-mode: bicubic;
+  vertical-align: middle;
+  max-width: 100%;
+}
+svg:not(:root) {
+  overflow: hidden;
+}
+figure,
+form {
+  margin: 0;
+}
+label {
+  cursor: pointer;
+}
+button,
+input,
+select,
+textarea {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+}
+button,
+input {
+  line-height: normal;
+}
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  cursor: pointer;
+  -webkit-appearance: button;
+  *overflow: visible;
+}
+button[disabled],
+input[disabled] {
+  cursor: default;
+}
+input[type="search"] {
+  -webkit-appearance: textfield;
+  -moz-box-sizing: content-box;
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+}
+textarea {
+  resize: vertical;
+}
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+td {
+  vertical-align: top;
+}
+.chromeframe {
+  margin: 0.2em 0;
+  background: #ccc;
+  color: #000;
+  padding: 0.2em 0;
+}
+.ir {
+  display: block;
+  border: 0;
+  text-indent: -999em;
+  overflow: hidden;
+  background-color: transparent;
+  background-repeat: no-repeat;
+  text-align: left;
+  direction: ltr;
+  *line-height: 0;
+}
+.ir br {
+  display: none;
+}
+.hidden {
+  display: none !important;
+  visibility: hidden;
+}
+.visuallyhidden {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+}
+.visuallyhidden.focusable:active,
+.visuallyhidden.focusable:focus {
+  clip: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  position: static;
+  width: auto;
+}
+.invisible {
+  visibility: hidden;
+}
+.relative {
+  position: relative;
+}
+big,
+small {
+  font-size: 100%;
+}
+@media print {
+  body,
+  html,
+  section {
+    background: none !important;
+  }
+  * {
+    box-shadow: none !important;
+    text-shadow: none !important;
+    filter: none !important;
+    -ms-filter: none !important;
+  }
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+  .ir a:after,
+  a[href^="#"]:after,
+  a[href^="javascript:"]:after {
+    content: "";
+  }
+  blockquote,
+  pre {
+    page-break-inside: avoid;
+  }
+  thead {
+    display: table-header-group;
+  }
+  img,
+  tr {
+    page-break-inside: avoid;
+  }
+  img {
+    max-width: 100% !important;
+  }
+  @page {
+    margin: 0.5cm;
+  }
+  .rst-content .toctree-wrapper > p.caption,
+  h2,
+  h3,
+  p {
+    orphans: 3;
+    widows: 3;
+  }
+  .rst-content .toctree-wrapper > p.caption,
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+}
+.btn,
+.fa:before,
+.icon:before,
+.rst-content .admonition,
+.rst-content .admonition-title:before,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .code-block-caption .headerlink:before,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning,
+.rst-content code.download span:first-child:before,
+.rst-content dl dt .headerlink:before,
+.rst-content h1 .headerlink:before,
+.rst-content h2 .headerlink:before,
+.rst-content h3 .headerlink:before,
+.rst-content h4 .headerlink:before,
+.rst-content h5 .headerlink:before,
+.rst-content h6 .headerlink:before,
+.rst-content p.caption .headerlink:before,
+.rst-content table > caption .headerlink:before,
+.rst-content tt.download span:first-child:before,
+.wy-alert,
+.wy-dropdown .caret:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,
+.wy-menu-vertical li.current > a,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a,
+.wy-menu-vertical li.on a span.toctree-expand:before,
+.wy-menu-vertical li span.toctree-expand:before,
+.wy-nav-top a,
+.wy-side-nav-search .wy-dropdown > a,
+.wy-side-nav-search > a,
+input[type="color"],
+input[type="date"],
+input[type="datetime-local"],
+input[type="datetime"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"],
+select,
+textarea {
+  -webkit-font-smoothing: antialiased;
+}
+.clearfix {
+  *zoom: 1;
+}
+.clearfix:after,
+.clearfix:before {
+  display: table;
+  content: "";
+}
+.clearfix:after {
+  clear: both;
+} /*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+@font-face {
+  font-family: FontAwesome;
+  src: url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);
+  src: url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0)
+      format("embedded-opentype"),
+    url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e)
+      format("woff2"),
+    url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad)
+      format("woff"),
+    url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9)
+      format("truetype"),
+    url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular)
+      format("svg");
+  font-weight: 400;
+  font-style: normal;
+}
+.fa,
+.icon,
+.rst-content .admonition-title,
+.rst-content .code-block-caption .headerlink,
+.rst-content code.download span:first-child,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink,
+.rst-content tt.download span:first-child,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li span.toctree-expand {
+  display: inline-block;
+  font: normal normal normal 14px/1 FontAwesome;
+  font-size: inherit;
+  text-rendering: auto;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.fa-lg {
+  font-size: 1.33333em;
+  line-height: 0.75em;
+  vertical-align: -15%;
+}
+.fa-2x {
+  font-size: 2em;
+}
+.fa-3x {
+  font-size: 3em;
+}
+.fa-4x {
+  font-size: 4em;
+}
+.fa-5x {
+  font-size: 5em;
+}
+.fa-fw {
+  width: 1.28571em;
+  text-align: center;
+}
+.fa-ul {
+  padding-left: 0;
+  margin-left: 2.14286em;
+  list-style-type: none;
+}
+.fa-ul > li {
+  position: relative;
+}
+.fa-li {
+  position: absolute;
+  left: -2.14286em;
+  width: 2.14286em;
+  top: 0.14286em;
+  text-align: center;
+}
+.fa-li.fa-lg {
+  left: -1.85714em;
+}
+.fa-border {
+  padding: 0.2em 0.25em 0.15em;
+  border: 0.08em solid #eee;
+  border-radius: 0.1em;
+}
+.fa-pull-left {
+  float: left;
+}
+.fa-pull-right {
+  float: right;
+}
+.fa-pull-left.icon,
+.fa.fa-pull-left,
+.rst-content .code-block-caption .fa-pull-left.headerlink,
+.rst-content .fa-pull-left.admonition-title,
+.rst-content code.download span.fa-pull-left:first-child,
+.rst-content dl dt .fa-pull-left.headerlink,
+.rst-content h1 .fa-pull-left.headerlink,
+.rst-content h2 .fa-pull-left.headerlink,
+.rst-content h3 .fa-pull-left.headerlink,
+.rst-content h4 .fa-pull-left.headerlink,
+.rst-content h5 .fa-pull-left.headerlink,
+.rst-content h6 .fa-pull-left.headerlink,
+.rst-content p.caption .fa-pull-left.headerlink,
+.rst-content table > caption .fa-pull-left.headerlink,
+.rst-content tt.download span.fa-pull-left:first-child,
+.wy-menu-vertical li.current > a span.fa-pull-left.toctree-expand,
+.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,
+.wy-menu-vertical li span.fa-pull-left.toctree-expand {
+  margin-right: 0.3em;
+}
+.fa-pull-right.icon,
+.fa.fa-pull-right,
+.rst-content .code-block-caption .fa-pull-right.headerlink,
+.rst-content .fa-pull-right.admonition-title,
+.rst-content code.download span.fa-pull-right:first-child,
+.rst-content dl dt .fa-pull-right.headerlink,
+.rst-content h1 .fa-pull-right.headerlink,
+.rst-content h2 .fa-pull-right.headerlink,
+.rst-content h3 .fa-pull-right.headerlink,
+.rst-content h4 .fa-pull-right.headerlink,
+.rst-content h5 .fa-pull-right.headerlink,
+.rst-content h6 .fa-pull-right.headerlink,
+.rst-content p.caption .fa-pull-right.headerlink,
+.rst-content table > caption .fa-pull-right.headerlink,
+.rst-content tt.download span.fa-pull-right:first-child,
+.wy-menu-vertical li.current > a span.fa-pull-right.toctree-expand,
+.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,
+.wy-menu-vertical li span.fa-pull-right.toctree-expand {
+  margin-left: 0.3em;
+}
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+.fa.pull-left,
+.pull-left.icon,
+.rst-content .code-block-caption .pull-left.headerlink,
+.rst-content .pull-left.admonition-title,
+.rst-content code.download span.pull-left:first-child,
+.rst-content dl dt .pull-left.headerlink,
+.rst-content h1 .pull-left.headerlink,
+.rst-content h2 .pull-left.headerlink,
+.rst-content h3 .pull-left.headerlink,
+.rst-content h4 .pull-left.headerlink,
+.rst-content h5 .pull-left.headerlink,
+.rst-content h6 .pull-left.headerlink,
+.rst-content p.caption .pull-left.headerlink,
+.rst-content table > caption .pull-left.headerlink,
+.rst-content tt.download span.pull-left:first-child,
+.wy-menu-vertical li.current > a span.pull-left.toctree-expand,
+.wy-menu-vertical li.on a span.pull-left.toctree-expand,
+.wy-menu-vertical li span.pull-left.toctree-expand {
+  margin-right: 0.3em;
+}
+.fa.pull-right,
+.pull-right.icon,
+.rst-content .code-block-caption .pull-right.headerlink,
+.rst-content .pull-right.admonition-title,
+.rst-content code.download span.pull-right:first-child,
+.rst-content dl dt .pull-right.headerlink,
+.rst-content h1 .pull-right.headerlink,
+.rst-content h2 .pull-right.headerlink,
+.rst-content h3 .pull-right.headerlink,
+.rst-content h4 .pull-right.headerlink,
+.rst-content h5 .pull-right.headerlink,
+.rst-content h6 .pull-right.headerlink,
+.rst-content p.caption .pull-right.headerlink,
+.rst-content table > caption .pull-right.headerlink,
+.rst-content tt.download span.pull-right:first-child,
+.wy-menu-vertical li.current > a span.pull-right.toctree-expand,
+.wy-menu-vertical li.on a span.pull-right.toctree-expand,
+.wy-menu-vertical li span.pull-right.toctree-expand {
+  margin-left: 0.3em;
+}
+.fa-spin {
+  -webkit-animation: fa-spin 2s linear infinite;
+  animation: fa-spin 2s linear infinite;
+}
+.fa-pulse {
+  -webkit-animation: fa-spin 1s steps(8) infinite;
+  animation: fa-spin 1s steps(8) infinite;
+}
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+.fa-rotate-90 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+  -webkit-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.fa-rotate-180 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+  -webkit-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.fa-rotate-270 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+  -webkit-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+  -webkit-transform: scaleX(-1);
+  -ms-transform: scaleX(-1);
+  transform: scaleX(-1);
+}
+.fa-flip-vertical {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+  -webkit-transform: scaleY(-1);
+  -ms-transform: scaleY(-1);
+  transform: scaleY(-1);
+}
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical,
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270 {
+  filter: none;
+}
+.fa-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.fa-stack-1x {
+  line-height: inherit;
+}
+.fa-stack-2x {
+  font-size: 2em;
+}
+.fa-inverse {
+  color: #fff;
+}
+.fa-glass:before {
+  content: "";
+}
+.fa-music:before {
+  content: "";
+}
+.fa-search:before,
+.icon-search:before {
+  content: "";
+}
+.fa-envelope-o:before {
+  content: "";
+}
+.fa-heart:before {
+  content: "";
+}
+.fa-star:before {
+  content: "";
+}
+.fa-star-o:before {
+  content: "";
+}
+.fa-user:before {
+  content: "";
+}
+.fa-film:before {
+  content: "";
+}
+.fa-th-large:before {
+  content: "";
+}
+.fa-th:before {
+  content: "";
+}
+.fa-th-list:before {
+  content: "";
+}
+.fa-check:before {
+  content: "";
+}
+.fa-close:before,
+.fa-remove:before,
+.fa-times:before {
+  content: "";
+}
+.fa-search-plus:before {
+  content: "";
+}
+.fa-search-minus:before {
+  content: "";
+}
+.fa-power-off:before {
+  content: "";
+}
+.fa-signal:before {
+  content: "";
+}
+.fa-cog:before,
+.fa-gear:before {
+  content: "";
+}
+.fa-trash-o:before {
+  content: "";
+}
+.fa-home:before,
+.icon-home:before {
+  content: "";
+}
+.fa-file-o:before {
+  content: "";
+}
+.fa-clock-o:before {
+  content: "";
+}
+.fa-road:before {
+  content: "";
+}
+.fa-download:before,
+.rst-content code.download span:first-child:before,
+.rst-content tt.download span:first-child:before {
+  content: "";
+}
+.fa-arrow-circle-o-down:before {
+  content: "";
+}
+.fa-arrow-circle-o-up:before {
+  content: "";
+}
+.fa-inbox:before {
+  content: "";
+}
+.fa-play-circle-o:before {
+  content: "";
+}
+.fa-repeat:before,
+.fa-rotate-right:before {
+  content: "";
+}
+.fa-refresh:before {
+  content: "";
+}
+.fa-list-alt:before {
+  content: "";
+}
+.fa-lock:before {
+  content: "";
+}
+.fa-flag:before {
+  content: "";
+}
+.fa-headphones:before {
+  content: "";
+}
+.fa-volume-off:before {
+  content: "";
+}
+.fa-volume-down:before {
+  content: "";
+}
+.fa-volume-up:before {
+  content: "";
+}
+.fa-qrcode:before {
+  content: "";
+}
+.fa-barcode:before {
+  content: "";
+}
+.fa-tag:before {
+  content: "";
+}
+.fa-tags:before {
+  content: "";
+}
+.fa-book:before,
+.icon-book:before {
+  content: "";
+}
+.fa-bookmark:before {
+  content: "";
+}
+.fa-print:before {
+  content: "";
+}
+.fa-camera:before {
+  content: "";
+}
+.fa-font:before {
+  content: "";
+}
+.fa-bold:before {
+  content: "";
+}
+.fa-italic:before {
+  content: "";
+}
+.fa-text-height:before {
+  content: "";
+}
+.fa-text-width:before {
+  content: "";
+}
+.fa-align-left:before {
+  content: "";
+}
+.fa-align-center:before {
+  content: "";
+}
+.fa-align-right:before {
+  content: "";
+}
+.fa-align-justify:before {
+  content: "";
+}
+.fa-list:before {
+  content: "";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+  content: "";
+}
+.fa-indent:before {
+  content: "";
+}
+.fa-video-camera:before {
+  content: "";
+}
+.fa-image:before,
+.fa-photo:before,
+.fa-picture-o:before {
+  content: "";
+}
+.fa-pencil:before {
+  content: "";
+}
+.fa-map-marker:before {
+  content: "";
+}
+.fa-adjust:before {
+  content: "";
+}
+.fa-tint:before {
+  content: "";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+  content: "";
+}
+.fa-share-square-o:before {
+  content: "";
+}
+.fa-check-square-o:before {
+  content: "";
+}
+.fa-arrows:before {
+  content: "";
+}
+.fa-step-backward:before {
+  content: "";
+}
+.fa-fast-backward:before {
+  content: "";
+}
+.fa-backward:before {
+  content: "";
+}
+.fa-play:before {
+  content: "";
+}
+.fa-pause:before {
+  content: "";
+}
+.fa-stop:before {
+  content: "";
+}
+.fa-forward:before {
+  content: "";
+}
+.fa-fast-forward:before {
+  content: "";
+}
+.fa-step-forward:before {
+  content: "";
+}
+.fa-eject:before {
+  content: "";
+}
+.fa-chevron-left:before {
+  content: "";
+}
+.fa-chevron-right:before {
+  content: "";
+}
+.fa-plus-circle:before {
+  content: "";
+}
+.fa-minus-circle:before {
+  content: "";
+}
+.fa-times-circle:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before {
+  content: "";
+}
+.fa-check-circle:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before {
+  content: "";
+}
+.fa-question-circle:before {
+  content: "";
+}
+.fa-info-circle:before {
+  content: "";
+}
+.fa-crosshairs:before {
+  content: "";
+}
+.fa-times-circle-o:before {
+  content: "";
+}
+.fa-check-circle-o:before {
+  content: "";
+}
+.fa-ban:before {
+  content: "";
+}
+.fa-arrow-left:before {
+  content: "";
+}
+.fa-arrow-right:before {
+  content: "";
+}
+.fa-arrow-up:before {
+  content: "";
+}
+.fa-arrow-down:before {
+  content: "";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+  content: "";
+}
+.fa-expand:before {
+  content: "";
+}
+.fa-compress:before {
+  content: "";
+}
+.fa-plus:before {
+  content: "";
+}
+.fa-minus:before {
+  content: "";
+}
+.fa-asterisk:before {
+  content: "";
+}
+.fa-exclamation-circle:before,
+.rst-content .admonition-title:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before {
+  content: "";
+}
+.fa-gift:before {
+  content: "";
+}
+.fa-leaf:before {
+  content: "";
+}
+.fa-fire:before,
+.icon-fire:before {
+  content: "";
+}
+.fa-eye:before {
+  content: "";
+}
+.fa-eye-slash:before {
+  content: "";
+}
+.fa-exclamation-triangle:before,
+.fa-warning:before {
+  content: "";
+}
+.fa-plane:before {
+  content: "";
+}
+.fa-calendar:before {
+  content: "";
+}
+.fa-random:before {
+  content: "";
+}
+.fa-comment:before {
+  content: "";
+}
+.fa-magnet:before {
+  content: "";
+}
+.fa-chevron-up:before {
+  content: "";
+}
+.fa-chevron-down:before {
+  content: "";
+}
+.fa-retweet:before {
+  content: "";
+}
+.fa-shopping-cart:before {
+  content: "";
+}
+.fa-folder:before {
+  content: "";
+}
+.fa-folder-open:before {
+  content: "";
+}
+.fa-arrows-v:before {
+  content: "";
+}
+.fa-arrows-h:before {
+  content: "";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+  content: "";
+}
+.fa-twitter-square:before {
+  content: "";
+}
+.fa-facebook-square:before {
+  content: "";
+}
+.fa-camera-retro:before {
+  content: "";
+}
+.fa-key:before {
+  content: "";
+}
+.fa-cogs:before,
+.fa-gears:before {
+  content: "";
+}
+.fa-comments:before {
+  content: "";
+}
+.fa-thumbs-o-up:before {
+  content: "";
+}
+.fa-thumbs-o-down:before {
+  content: "";
+}
+.fa-star-half:before {
+  content: "";
+}
+.fa-heart-o:before {
+  content: "";
+}
+.fa-sign-out:before {
+  content: "";
+}
+.fa-linkedin-square:before {
+  content: "";
+}
+.fa-thumb-tack:before {
+  content: "";
+}
+.fa-external-link:before {
+  content: "";
+}
+.fa-sign-in:before {
+  content: "";
+}
+.fa-trophy:before {
+  content: "";
+}
+.fa-github-square:before {
+  content: "";
+}
+.fa-upload:before {
+  content: "";
+}
+.fa-lemon-o:before {
+  content: "";
+}
+.fa-phone:before {
+  content: "";
+}
+.fa-square-o:before {
+  content: "";
+}
+.fa-bookmark-o:before {
+  content: "";
+}
+.fa-phone-square:before {
+  content: "";
+}
+.fa-twitter:before {
+  content: "";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+  content: "";
+}
+.fa-github:before,
+.icon-github:before {
+  content: "";
+}
+.fa-unlock:before {
+  content: "";
+}
+.fa-credit-card:before {
+  content: "";
+}
+.fa-feed:before,
+.fa-rss:before {
+  content: "";
+}
+.fa-hdd-o:before {
+  content: "";
+}
+.fa-bullhorn:before {
+  content: "";
+}
+.fa-bell:before {
+  content: "";
+}
+.fa-certificate:before {
+  content: "";
+}
+.fa-hand-o-right:before {
+  content: "";
+}
+.fa-hand-o-left:before {
+  content: "";
+}
+.fa-hand-o-up:before {
+  content: "";
+}
+.fa-hand-o-down:before {
+  content: "";
+}
+.fa-arrow-circle-left:before,
+.icon-circle-arrow-left:before {
+  content: "";
+}
+.fa-arrow-circle-right:before,
+.icon-circle-arrow-right:before {
+  content: "";
+}
+.fa-arrow-circle-up:before {
+  content: "";
+}
+.fa-arrow-circle-down:before {
+  content: "";
+}
+.fa-globe:before {
+  content: "";
+}
+.fa-wrench:before {
+  content: "";
+}
+.fa-tasks:before {
+  content: "";
+}
+.fa-filter:before {
+  content: "";
+}
+.fa-briefcase:before {
+  content: "";
+}
+.fa-arrows-alt:before {
+  content: "";
+}
+.fa-group:before,
+.fa-users:before {
+  content: "";
+}
+.fa-chain:before,
+.fa-link:before,
+.icon-link:before {
+  content: "";
+}
+.fa-cloud:before {
+  content: "";
+}
+.fa-flask:before {
+  content: "";
+}
+.fa-cut:before,
+.fa-scissors:before {
+  content: "";
+}
+.fa-copy:before,
+.fa-files-o:before {
+  content: "";
+}
+.fa-paperclip:before {
+  content: "";
+}
+.fa-floppy-o:before,
+.fa-save:before {
+  content: "";
+}
+.fa-square:before {
+  content: "";
+}
+.fa-bars:before,
+.fa-navicon:before,
+.fa-reorder:before {
+  content: "";
+}
+.fa-list-ul:before {
+  content: "";
+}
+.fa-list-ol:before {
+  content: "";
+}
+.fa-strikethrough:before {
+  content: "";
+}
+.fa-underline:before {
+  content: "";
+}
+.fa-table:before {
+  content: "";
+}
+.fa-magic:before {
+  content: "";
+}
+.fa-truck:before {
+  content: "";
+}
+.fa-pinterest:before {
+  content: "";
+}
+.fa-pinterest-square:before {
+  content: "";
+}
+.fa-google-plus-square:before {
+  content: "";
+}
+.fa-google-plus:before {
+  content: "";
+}
+.fa-money:before {
+  content: "";
+}
+.fa-caret-down:before,
+.icon-caret-down:before,
+.wy-dropdown .caret:before {
+  content: "";
+}
+.fa-caret-up:before {
+  content: "";
+}
+.fa-caret-left:before {
+  content: "";
+}
+.fa-caret-right:before {
+  content: "";
+}
+.fa-columns:before {
+  content: "";
+}
+.fa-sort:before,
+.fa-unsorted:before {
+  content: "";
+}
+.fa-sort-desc:before,
+.fa-sort-down:before {
+  content: "";
+}
+.fa-sort-asc:before,
+.fa-sort-up:before {
+  content: "";
+}
+.fa-envelope:before {
+  content: "";
+}
+.fa-linkedin:before {
+  content: "";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+  content: "";
+}
+.fa-gavel:before,
+.fa-legal:before {
+  content: "";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+  content: "";
+}
+.fa-comment-o:before {
+  content: "";
+}
+.fa-comments-o:before {
+  content: "";
+}
+.fa-bolt:before,
+.fa-flash:before {
+  content: "";
+}
+.fa-sitemap:before {
+  content: "";
+}
+.fa-umbrella:before {
+  content: "";
+}
+.fa-clipboard:before,
+.fa-paste:before {
+  content: "";
+}
+.fa-lightbulb-o:before {
+  content: "";
+}
+.fa-exchange:before {
+  content: "";
+}
+.fa-cloud-download:before {
+  content: "";
+}
+.fa-cloud-upload:before {
+  content: "";
+}
+.fa-user-md:before {
+  content: "";
+}
+.fa-stethoscope:before {
+  content: "";
+}
+.fa-suitcase:before {
+  content: "";
+}
+.fa-bell-o:before {
+  content: "";
+}
+.fa-coffee:before {
+  content: "";
+}
+.fa-cutlery:before {
+  content: "";
+}
+.fa-file-text-o:before {
+  content: "";
+}
+.fa-building-o:before {
+  content: "";
+}
+.fa-hospital-o:before {
+  content: "";
+}
+.fa-ambulance:before {
+  content: "";
+}
+.fa-medkit:before {
+  content: "";
+}
+.fa-fighter-jet:before {
+  content: "";
+}
+.fa-beer:before {
+  content: "";
+}
+.fa-h-square:before {
+  content: "";
+}
+.fa-plus-square:before {
+  content: "";
+}
+.fa-angle-double-left:before {
+  content: "";
+}
+.fa-angle-double-right:before {
+  content: "";
+}
+.fa-angle-double-up:before {
+  content: "";
+}
+.fa-angle-double-down:before {
+  content: "";
+}
+.fa-angle-left:before {
+  content: "";
+}
+.fa-angle-right:before {
+  content: "";
+}
+.fa-angle-up:before {
+  content: "";
+}
+.fa-angle-down:before {
+  content: "";
+}
+.fa-desktop:before {
+  content: "";
+}
+.fa-laptop:before {
+  content: "";
+}
+.fa-tablet:before {
+  content: "";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+  content: "";
+}
+.fa-circle-o:before {
+  content: "";
+}
+.fa-quote-left:before {
+  content: "";
+}
+.fa-quote-right:before {
+  content: "";
+}
+.fa-spinner:before {
+  content: "";
+}
+.fa-circle:before {
+  content: "";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+  content: "";
+}
+.fa-github-alt:before {
+  content: "";
+}
+.fa-folder-o:before {
+  content: "";
+}
+.fa-folder-open-o:before {
+  content: "";
+}
+.fa-smile-o:before {
+  content: "";
+}
+.fa-frown-o:before {
+  content: "";
+}
+.fa-meh-o:before {
+  content: "";
+}
+.fa-gamepad:before {
+  content: "";
+}
+.fa-keyboard-o:before {
+  content: "";
+}
+.fa-flag-o:before {
+  content: "";
+}
+.fa-flag-checkered:before {
+  content: "";
+}
+.fa-terminal:before {
+  content: "";
+}
+.fa-code:before {
+  content: "";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+  content: "";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+  content: "";
+}
+.fa-location-arrow:before {
+  content: "";
+}
+.fa-crop:before {
+  content: "";
+}
+.fa-code-fork:before {
+  content: "";
+}
+.fa-chain-broken:before,
+.fa-unlink:before {
+  content: "";
+}
+.fa-question:before {
+  content: "";
+}
+.fa-info:before {
+  content: "";
+}
+.fa-exclamation:before {
+  content: "";
+}
+.fa-superscript:before {
+  content: "";
+}
+.fa-subscript:before {
+  content: "";
+}
+.fa-eraser:before {
+  content: "";
+}
+.fa-puzzle-piece:before {
+  content: "";
+}
+.fa-microphone:before {
+  content: "";
+}
+.fa-microphone-slash:before {
+  content: "";
+}
+.fa-shield:before {
+  content: "";
+}
+.fa-calendar-o:before {
+  content: "";
+}
+.fa-fire-extinguisher:before {
+  content: "";
+}
+.fa-rocket:before {
+  content: "";
+}
+.fa-maxcdn:before {
+  content: "";
+}
+.fa-chevron-circle-left:before {
+  content: "";
+}
+.fa-chevron-circle-right:before {
+  content: "";
+}
+.fa-chevron-circle-up:before {
+  content: "";
+}
+.fa-chevron-circle-down:before {
+  content: "";
+}
+.fa-html5:before {
+  content: "";
+}
+.fa-css3:before {
+  content: "";
+}
+.fa-anchor:before {
+  content: "";
+}
+.fa-unlock-alt:before {
+  content: "";
+}
+.fa-bullseye:before {
+  content: "";
+}
+.fa-ellipsis-h:before {
+  content: "";
+}
+.fa-ellipsis-v:before {
+  content: "";
+}
+.fa-rss-square:before {
+  content: "";
+}
+.fa-play-circle:before {
+  content: "";
+}
+.fa-ticket:before {
+  content: "";
+}
+.fa-minus-square:before {
+  content: "";
+}
+.fa-minus-square-o:before,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a span.toctree-expand:before {
+  content: "";
+}
+.fa-level-up:before {
+  content: "";
+}
+.fa-level-down:before {
+  content: "";
+}
+.fa-check-square:before {
+  content: "";
+}
+.fa-pencil-square:before {
+  content: "";
+}
+.fa-external-link-square:before {
+  content: "";
+}
+.fa-share-square:before {
+  content: "";
+}
+.fa-compass:before {
+  content: "";
+}
+.fa-caret-square-o-down:before,
+.fa-toggle-down:before {
+  content: "";
+}
+.fa-caret-square-o-up:before,
+.fa-toggle-up:before {
+  content: "";
+}
+.fa-caret-square-o-right:before,
+.fa-toggle-right:before {
+  content: "";
+}
+.fa-eur:before,
+.fa-euro:before {
+  content: "";
+}
+.fa-gbp:before {
+  content: "";
+}
+.fa-dollar:before,
+.fa-usd:before {
+  content: "";
+}
+.fa-inr:before,
+.fa-rupee:before {
+  content: "";
+}
+.fa-cny:before,
+.fa-jpy:before,
+.fa-rmb:before,
+.fa-yen:before {
+  content: "";
+}
+.fa-rouble:before,
+.fa-rub:before,
+.fa-ruble:before {
+  content: "";
+}
+.fa-krw:before,
+.fa-won:before {
+  content: "";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+  content: "";
+}
+.fa-file:before {
+  content: "";
+}
+.fa-file-text:before {
+  content: "";
+}
+.fa-sort-alpha-asc:before {
+  content: "";
+}
+.fa-sort-alpha-desc:before {
+  content: "";
+}
+.fa-sort-amount-asc:before {
+  content: "";
+}
+.fa-sort-amount-desc:before {
+  content: "";
+}
+.fa-sort-numeric-asc:before {
+  content: "";
+}
+.fa-sort-numeric-desc:before {
+  content: "";
+}
+.fa-thumbs-up:before {
+  content: "";
+}
+.fa-thumbs-down:before {
+  content: "";
+}
+.fa-youtube-square:before {
+  content: "";
+}
+.fa-youtube:before {
+  content: "";
+}
+.fa-xing:before {
+  content: "";
+}
+.fa-xing-square:before {
+  content: "";
+}
+.fa-youtube-play:before {
+  content: "";
+}
+.fa-dropbox:before {
+  content: "";
+}
+.fa-stack-overflow:before {
+  content: "";
+}
+.fa-instagram:before {
+  content: "";
+}
+.fa-flickr:before {
+  content: "";
+}
+.fa-adn:before {
+  content: "";
+}
+.fa-bitbucket:before,
+.icon-bitbucket:before {
+  content: "";
+}
+.fa-bitbucket-square:before {
+  content: "";
+}
+.fa-tumblr:before {
+  content: "";
+}
+.fa-tumblr-square:before {
+  content: "";
+}
+.fa-long-arrow-down:before {
+  content: "";
+}
+.fa-long-arrow-up:before {
+  content: "";
+}
+.fa-long-arrow-left:before {
+  content: "";
+}
+.fa-long-arrow-right:before {
+  content: "";
+}
+.fa-apple:before {
+  content: "";
+}
+.fa-windows:before {
+  content: "";
+}
+.fa-android:before {
+  content: "";
+}
+.fa-linux:before {
+  content: "";
+}
+.fa-dribbble:before {
+  content: "";
+}
+.fa-skype:before {
+  content: "";
+}
+.fa-foursquare:before {
+  content: "";
+}
+.fa-trello:before {
+  content: "";
+}
+.fa-female:before {
+  content: "";
+}
+.fa-male:before {
+  content: "";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+  content: "";
+}
+.fa-sun-o:before {
+  content: "";
+}
+.fa-moon-o:before {
+  content: "";
+}
+.fa-archive:before {
+  content: "";
+}
+.fa-bug:before {
+  content: "";
+}
+.fa-vk:before {
+  content: "";
+}
+.fa-weibo:before {
+  content: "";
+}
+.fa-renren:before {
+  content: "";
+}
+.fa-pagelines:before {
+  content: "";
+}
+.fa-stack-exchange:before {
+  content: "";
+}
+.fa-arrow-circle-o-right:before {
+  content: "";
+}
+.fa-arrow-circle-o-left:before {
+  content: "";
+}
+.fa-caret-square-o-left:before,
+.fa-toggle-left:before {
+  content: "";
+}
+.fa-dot-circle-o:before {
+  content: "";
+}
+.fa-wheelchair:before {
+  content: "";
+}
+.fa-vimeo-square:before {
+  content: "";
+}
+.fa-try:before,
+.fa-turkish-lira:before {
+  content: "";
+}
+.fa-plus-square-o:before,
+.wy-menu-vertical li span.toctree-expand:before {
+  content: "";
+}
+.fa-space-shuttle:before {
+  content: "";
+}
+.fa-slack:before {
+  content: "";
+}
+.fa-envelope-square:before {
+  content: "";
+}
+.fa-wordpress:before {
+  content: "";
+}
+.fa-openid:before {
+  content: "";
+}
+.fa-bank:before,
+.fa-institution:before,
+.fa-university:before {
+  content: "";
+}
+.fa-graduation-cap:before,
+.fa-mortar-board:before {
+  content: "";
+}
+.fa-yahoo:before {
+  content: "";
+}
+.fa-google:before {
+  content: "";
+}
+.fa-reddit:before {
+  content: "";
+}
+.fa-reddit-square:before {
+  content: "";
+}
+.fa-stumbleupon-circle:before {
+  content: "";
+}
+.fa-stumbleupon:before {
+  content: "";
+}
+.fa-delicious:before {
+  content: "";
+}
+.fa-digg:before {
+  content: "";
+}
+.fa-pied-piper-pp:before {
+  content: "";
+}
+.fa-pied-piper-alt:before {
+  content: "";
+}
+.fa-drupal:before {
+  content: "";
+}
+.fa-joomla:before {
+  content: "";
+}
+.fa-language:before {
+  content: "";
+}
+.fa-fax:before {
+  content: "";
+}
+.fa-building:before {
+  content: "";
+}
+.fa-child:before {
+  content: "";
+}
+.fa-paw:before {
+  content: "";
+}
+.fa-spoon:before {
+  content: "";
+}
+.fa-cube:before {
+  content: "";
+}
+.fa-cubes:before {
+  content: "";
+}
+.fa-behance:before {
+  content: "";
+}
+.fa-behance-square:before {
+  content: "";
+}
+.fa-steam:before {
+  content: "";
+}
+.fa-steam-square:before {
+  content: "";
+}
+.fa-recycle:before {
+  content: "";
+}
+.fa-automobile:before,
+.fa-car:before {
+  content: "";
+}
+.fa-cab:before,
+.fa-taxi:before {
+  content: "";
+}
+.fa-tree:before {
+  content: "";
+}
+.fa-spotify:before {
+  content: "";
+}
+.fa-deviantart:before {
+  content: "";
+}
+.fa-soundcloud:before {
+  content: "";
+}
+.fa-database:before {
+  content: "";
+}
+.fa-file-pdf-o:before {
+  content: "";
+}
+.fa-file-word-o:before {
+  content: "";
+}
+.fa-file-excel-o:before {
+  content: "";
+}
+.fa-file-powerpoint-o:before {
+  content: "";
+}
+.fa-file-image-o:before,
+.fa-file-photo-o:before,
+.fa-file-picture-o:before {
+  content: "";
+}
+.fa-file-archive-o:before,
+.fa-file-zip-o:before {
+  content: "";
+}
+.fa-file-audio-o:before,
+.fa-file-sound-o:before {
+  content: "";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+  content: "";
+}
+.fa-file-code-o:before {
+  content: "";
+}
+.fa-vine:before {
+  content: "";
+}
+.fa-codepen:before {
+  content: "";
+}
+.fa-jsfiddle:before {
+  content: "";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-ring:before,
+.fa-life-saver:before,
+.fa-support:before {
+  content: "";
+}
+.fa-circle-o-notch:before {
+  content: "";
+}
+.fa-ra:before,
+.fa-rebel:before,
+.fa-resistance:before {
+  content: "";
+}
+.fa-empire:before,
+.fa-ge:before {
+  content: "";
+}
+.fa-git-square:before {
+  content: "";
+}
+.fa-git:before {
+  content: "";
+}
+.fa-hacker-news:before,
+.fa-y-combinator-square:before,
+.fa-yc-square:before {
+  content: "";
+}
+.fa-tencent-weibo:before {
+  content: "";
+}
+.fa-qq:before {
+  content: "";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+  content: "";
+}
+.fa-paper-plane:before,
+.fa-send:before {
+  content: "";
+}
+.fa-paper-plane-o:before,
+.fa-send-o:before {
+  content: "";
+}
+.fa-history:before {
+  content: "";
+}
+.fa-circle-thin:before {
+  content: "";
+}
+.fa-header:before {
+  content: "";
+}
+.fa-paragraph:before {
+  content: "";
+}
+.fa-sliders:before {
+  content: "";
+}
+.fa-share-alt:before {
+  content: "";
+}
+.fa-share-alt-square:before {
+  content: "";
+}
+.fa-bomb:before {
+  content: "";
+}
+.fa-futbol-o:before,
+.fa-soccer-ball-o:before {
+  content: "";
+}
+.fa-tty:before {
+  content: "";
+}
+.fa-binoculars:before {
+  content: "";
+}
+.fa-plug:before {
+  content: "";
+}
+.fa-slideshare:before {
+  content: "";
+}
+.fa-twitch:before {
+  content: "";
+}
+.fa-yelp:before {
+  content: "";
+}
+.fa-newspaper-o:before {
+  content: "";
+}
+.fa-wifi:before {
+  content: "";
+}
+.fa-calculator:before {
+  content: "";
+}
+.fa-paypal:before {
+  content: "";
+}
+.fa-google-wallet:before {
+  content: "";
+}
+.fa-cc-visa:before {
+  content: "";
+}
+.fa-cc-mastercard:before {
+  content: "";
+}
+.fa-cc-discover:before {
+  content: "";
+}
+.fa-cc-amex:before {
+  content: "";
+}
+.fa-cc-paypal:before {
+  content: "";
+}
+.fa-cc-stripe:before {
+  content: "";
+}
+.fa-bell-slash:before {
+  content: "";
+}
+.fa-bell-slash-o:before {
+  content: "";
+}
+.fa-trash:before {
+  content: "";
+}
+.fa-copyright:before {
+  content: "";
+}
+.fa-at:before {
+  content: "";
+}
+.fa-eyedropper:before {
+  content: "";
+}
+.fa-paint-brush:before {
+  content: "";
+}
+.fa-birthday-cake:before {
+  content: "";
+}
+.fa-area-chart:before {
+  content: "";
+}
+.fa-pie-chart:before {
+  content: "";
+}
+.fa-line-chart:before {
+  content: "";
+}
+.fa-lastfm:before {
+  content: "";
+}
+.fa-lastfm-square:before {
+  content: "";
+}
+.fa-toggle-off:before {
+  content: "";
+}
+.fa-toggle-on:before {
+  content: "";
+}
+.fa-bicycle:before {
+  content: "";
+}
+.fa-bus:before {
+  content: "";
+}
+.fa-ioxhost:before {
+  content: "";
+}
+.fa-angellist:before {
+  content: "";
+}
+.fa-cc:before {
+  content: "";
+}
+.fa-ils:before,
+.fa-shekel:before,
+.fa-sheqel:before {
+  content: "";
+}
+.fa-meanpath:before {
+  content: "";
+}
+.fa-buysellads:before {
+  content: "";
+}
+.fa-connectdevelop:before {
+  content: "";
+}
+.fa-dashcube:before {
+  content: "";
+}
+.fa-forumbee:before {
+  content: "";
+}
+.fa-leanpub:before {
+  content: "";
+}
+.fa-sellsy:before {
+  content: "";
+}
+.fa-shirtsinbulk:before {
+  content: "";
+}
+.fa-simplybuilt:before {
+  content: "";
+}
+.fa-skyatlas:before {
+  content: "";
+}
+.fa-cart-plus:before {
+  content: "";
+}
+.fa-cart-arrow-down:before {
+  content: "";
+}
+.fa-diamond:before {
+  content: "";
+}
+.fa-ship:before {
+  content: "";
+}
+.fa-user-secret:before {
+  content: "";
+}
+.fa-motorcycle:before {
+  content: "";
+}
+.fa-street-view:before {
+  content: "";
+}
+.fa-heartbeat:before {
+  content: "";
+}
+.fa-venus:before {
+  content: "";
+}
+.fa-mars:before {
+  content: "";
+}
+.fa-mercury:before {
+  content: "";
+}
+.fa-intersex:before,
+.fa-transgender:before {
+  content: "";
+}
+.fa-transgender-alt:before {
+  content: "";
+}
+.fa-venus-double:before {
+  content: "";
+}
+.fa-mars-double:before {
+  content: "";
+}
+.fa-venus-mars:before {
+  content: "";
+}
+.fa-mars-stroke:before {
+  content: "";
+}
+.fa-mars-stroke-v:before {
+  content: "";
+}
+.fa-mars-stroke-h:before {
+  content: "";
+}
+.fa-neuter:before {
+  content: "";
+}
+.fa-genderless:before {
+  content: "";
+}
+.fa-facebook-official:before {
+  content: "";
+}
+.fa-pinterest-p:before {
+  content: "";
+}
+.fa-whatsapp:before {
+  content: "";
+}
+.fa-server:before {
+  content: "";
+}
+.fa-user-plus:before {
+  content: "";
+}
+.fa-user-times:before {
+  content: "";
+}
+.fa-bed:before,
+.fa-hotel:before {
+  content: "";
+}
+.fa-viacoin:before {
+  content: "";
+}
+.fa-train:before {
+  content: "";
+}
+.fa-subway:before {
+  content: "";
+}
+.fa-medium:before {
+  content: "";
+}
+.fa-y-combinator:before,
+.fa-yc:before {
+  content: "";
+}
+.fa-optin-monster:before {
+  content: "";
+}
+.fa-opencart:before {
+  content: "";
+}
+.fa-expeditedssl:before {
+  content: "";
+}
+.fa-battery-4:before,
+.fa-battery-full:before,
+.fa-battery:before {
+  content: "";
+}
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+  content: "";
+}
+.fa-battery-2:before,
+.fa-battery-half:before {
+  content: "";
+}
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+  content: "";
+}
+.fa-battery-0:before,
+.fa-battery-empty:before {
+  content: "";
+}
+.fa-mouse-pointer:before {
+  content: "";
+}
+.fa-i-cursor:before {
+  content: "";
+}
+.fa-object-group:before {
+  content: "";
+}
+.fa-object-ungroup:before {
+  content: "";
+}
+.fa-sticky-note:before {
+  content: "";
+}
+.fa-sticky-note-o:before {
+  content: "";
+}
+.fa-cc-jcb:before {
+  content: "";
+}
+.fa-cc-diners-club:before {
+  content: "";
+}
+.fa-clone:before {
+  content: "";
+}
+.fa-balance-scale:before {
+  content: "";
+}
+.fa-hourglass-o:before {
+  content: "";
+}
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+  content: "";
+}
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+  content: "";
+}
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+  content: "";
+}
+.fa-hourglass:before {
+  content: "";
+}
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+  content: "";
+}
+.fa-hand-paper-o:before,
+.fa-hand-stop-o:before {
+  content: "";
+}
+.fa-hand-scissors-o:before {
+  content: "";
+}
+.fa-hand-lizard-o:before {
+  content: "";
+}
+.fa-hand-spock-o:before {
+  content: "";
+}
+.fa-hand-pointer-o:before {
+  content: "";
+}
+.fa-hand-peace-o:before {
+  content: "";
+}
+.fa-trademark:before {
+  content: "";
+}
+.fa-registered:before {
+  content: "";
+}
+.fa-creative-commons:before {
+  content: "";
+}
+.fa-gg:before {
+  content: "";
+}
+.fa-gg-circle:before {
+  content: "";
+}
+.fa-tripadvisor:before {
+  content: "";
+}
+.fa-odnoklassniki:before {
+  content: "";
+}
+.fa-odnoklassniki-square:before {
+  content: "";
+}
+.fa-get-pocket:before {
+  content: "";
+}
+.fa-wikipedia-w:before {
+  content: "";
+}
+.fa-safari:before {
+  content: "";
+}
+.fa-chrome:before {
+  content: "";
+}
+.fa-firefox:before {
+  content: "";
+}
+.fa-opera:before {
+  content: "";
+}
+.fa-internet-explorer:before {
+  content: "";
+}
+.fa-television:before,
+.fa-tv:before {
+  content: "";
+}
+.fa-contao:before {
+  content: "";
+}
+.fa-500px:before {
+  content: "";
+}
+.fa-amazon:before {
+  content: "";
+}
+.fa-calendar-plus-o:before {
+  content: "";
+}
+.fa-calendar-minus-o:before {
+  content: "";
+}
+.fa-calendar-times-o:before {
+  content: "";
+}
+.fa-calendar-check-o:before {
+  content: "";
+}
+.fa-industry:before {
+  content: "";
+}
+.fa-map-pin:before {
+  content: "";
+}
+.fa-map-signs:before {
+  content: "";
+}
+.fa-map-o:before {
+  content: "";
+}
+.fa-map:before {
+  content: "";
+}
+.fa-commenting:before {
+  content: "";
+}
+.fa-commenting-o:before {
+  content: "";
+}
+.fa-houzz:before {
+  content: "";
+}
+.fa-vimeo:before {
+  content: "";
+}
+.fa-black-tie:before {
+  content: "";
+}
+.fa-fonticons:before {
+  content: "";
+}
+.fa-reddit-alien:before {
+  content: "";
+}
+.fa-edge:before {
+  content: "";
+}
+.fa-credit-card-alt:before {
+  content: "";
+}
+.fa-codiepie:before {
+  content: "";
+}
+.fa-modx:before {
+  content: "";
+}
+.fa-fort-awesome:before {
+  content: "";
+}
+.fa-usb:before {
+  content: "";
+}
+.fa-product-hunt:before {
+  content: "";
+}
+.fa-mixcloud:before {
+  content: "";
+}
+.fa-scribd:before {
+  content: "";
+}
+.fa-pause-circle:before {
+  content: "";
+}
+.fa-pause-circle-o:before {
+  content: "";
+}
+.fa-stop-circle:before {
+  content: "";
+}
+.fa-stop-circle-o:before {
+  content: "";
+}
+.fa-shopping-bag:before {
+  content: "";
+}
+.fa-shopping-basket:before {
+  content: "";
+}
+.fa-hashtag:before {
+  content: "";
+}
+.fa-bluetooth:before {
+  content: "";
+}
+.fa-bluetooth-b:before {
+  content: "";
+}
+.fa-percent:before {
+  content: "";
+}
+.fa-gitlab:before,
+.icon-gitlab:before {
+  content: "";
+}
+.fa-wpbeginner:before {
+  content: "";
+}
+.fa-wpforms:before {
+  content: "";
+}
+.fa-envira:before {
+  content: "";
+}
+.fa-universal-access:before {
+  content: "";
+}
+.fa-wheelchair-alt:before {
+  content: "";
+}
+.fa-question-circle-o:before {
+  content: "";
+}
+.fa-blind:before {
+  content: "";
+}
+.fa-audio-description:before {
+  content: "";
+}
+.fa-volume-control-phone:before {
+  content: "";
+}
+.fa-braille:before {
+  content: "";
+}
+.fa-assistive-listening-systems:before {
+  content: "";
+}
+.fa-american-sign-language-interpreting:before,
+.fa-asl-interpreting:before {
+  content: "";
+}
+.fa-deaf:before,
+.fa-deafness:before,
+.fa-hard-of-hearing:before {
+  content: "";
+}
+.fa-glide:before {
+  content: "";
+}
+.fa-glide-g:before {
+  content: "";
+}
+.fa-sign-language:before,
+.fa-signing:before {
+  content: "";
+}
+.fa-low-vision:before {
+  content: "";
+}
+.fa-viadeo:before {
+  content: "";
+}
+.fa-viadeo-square:before {
+  content: "";
+}
+.fa-snapchat:before {
+  content: "";
+}
+.fa-snapchat-ghost:before {
+  content: "";
+}
+.fa-snapchat-square:before {
+  content: "";
+}
+.fa-pied-piper:before {
+  content: "";
+}
+.fa-first-order:before {
+  content: "";
+}
+.fa-yoast:before {
+  content: "";
+}
+.fa-themeisle:before {
+  content: "";
+}
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+  content: "";
+}
+.fa-fa:before,
+.fa-font-awesome:before {
+  content: "";
+}
+.fa-handshake-o:before {
+  content: "";
+}
+.fa-envelope-open:before {
+  content: "";
+}
+.fa-envelope-open-o:before {
+  content: "";
+}
+.fa-linode:before {
+  content: "";
+}
+.fa-address-book:before {
+  content: "";
+}
+.fa-address-book-o:before {
+  content: "";
+}
+.fa-address-card:before,
+.fa-vcard:before {
+  content: "";
+}
+.fa-address-card-o:before,
+.fa-vcard-o:before {
+  content: "";
+}
+.fa-user-circle:before {
+  content: "";
+}
+.fa-user-circle-o:before {
+  content: "";
+}
+.fa-user-o:before {
+  content: "";
+}
+.fa-id-badge:before {
+  content: "";
+}
+.fa-drivers-license:before,
+.fa-id-card:before {
+  content: "";
+}
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+  content: "";
+}
+.fa-quora:before {
+  content: "";
+}
+.fa-free-code-camp:before {
+  content: "";
+}
+.fa-telegram:before {
+  content: "";
+}
+.fa-thermometer-4:before,
+.fa-thermometer-full:before,
+.fa-thermometer:before {
+  content: "";
+}
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+  content: "";
+}
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+  content: "";
+}
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+  content: "";
+}
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+  content: "";
+}
+.fa-shower:before {
+  content: "";
+}
+.fa-bath:before,
+.fa-bathtub:before,
+.fa-s15:before {
+  content: "";
+}
+.fa-podcast:before {
+  content: "";
+}
+.fa-window-maximize:before {
+  content: "";
+}
+.fa-window-minimize:before {
+  content: "";
+}
+.fa-window-restore:before {
+  content: "";
+}
+.fa-times-rectangle:before,
+.fa-window-close:before {
+  content: "";
+}
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+  content: "";
+}
+.fa-bandcamp:before {
+  content: "";
+}
+.fa-grav:before {
+  content: "";
+}
+.fa-etsy:before {
+  content: "";
+}
+.fa-imdb:before {
+  content: "";
+}
+.fa-ravelry:before {
+  content: "";
+}
+.fa-eercast:before {
+  content: "";
+}
+.fa-microchip:before {
+  content: "";
+}
+.fa-snowflake-o:before {
+  content: "";
+}
+.fa-superpowers:before {
+  content: "";
+}
+.fa-wpexplorer:before {
+  content: "";
+}
+.fa-meetup:before {
+  content: "";
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
+.fa,
+.icon,
+.rst-content .admonition-title,
+.rst-content .code-block-caption .headerlink,
+.rst-content code.download span:first-child,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink,
+.rst-content tt.download span:first-child,
+.wy-dropdown .caret,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li span.toctree-expand {
+  font-family: inherit;
+}
+.fa:before,
+.icon:before,
+.rst-content .admonition-title:before,
+.rst-content .code-block-caption .headerlink:before,
+.rst-content code.download span:first-child:before,
+.rst-content dl dt .headerlink:before,
+.rst-content h1 .headerlink:before,
+.rst-content h2 .headerlink:before,
+.rst-content h3 .headerlink:before,
+.rst-content h4 .headerlink:before,
+.rst-content h5 .headerlink:before,
+.rst-content h6 .headerlink:before,
+.rst-content p.caption .headerlink:before,
+.rst-content table > caption .headerlink:before,
+.rst-content tt.download span:first-child:before,
+.wy-dropdown .caret:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a span.toctree-expand:before,
+.wy-menu-vertical li span.toctree-expand:before {
+  font-family: FontAwesome;
+  display: inline-block;
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1;
+  text-decoration: inherit;
+}
+.rst-content .code-block-caption a .headerlink,
+.rst-content a .admonition-title,
+.rst-content code.download a span:first-child,
+.rst-content dl dt a .headerlink,
+.rst-content h1 a .headerlink,
+.rst-content h2 a .headerlink,
+.rst-content h3 a .headerlink,
+.rst-content h4 a .headerlink,
+.rst-content h5 a .headerlink,
+.rst-content h6 a .headerlink,
+.rst-content p.caption a .headerlink,
+.rst-content table > caption a .headerlink,
+.rst-content tt.download a span:first-child,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li a span.toctree-expand,
+a .fa,
+a .icon,
+a .rst-content .admonition-title,
+a .rst-content .code-block-caption .headerlink,
+a .rst-content code.download span:first-child,
+a .rst-content dl dt .headerlink,
+a .rst-content h1 .headerlink,
+a .rst-content h2 .headerlink,
+a .rst-content h3 .headerlink,
+a .rst-content h4 .headerlink,
+a .rst-content h5 .headerlink,
+a .rst-content h6 .headerlink,
+a .rst-content p.caption .headerlink,
+a .rst-content table > caption .headerlink,
+a .rst-content tt.download span:first-child,
+a .wy-menu-vertical li span.toctree-expand {
+  display: inline-block;
+  text-decoration: inherit;
+}
+.btn .fa,
+.btn .icon,
+.btn .rst-content .admonition-title,
+.btn .rst-content .code-block-caption .headerlink,
+.btn .rst-content code.download span:first-child,
+.btn .rst-content dl dt .headerlink,
+.btn .rst-content h1 .headerlink,
+.btn .rst-content h2 .headerlink,
+.btn .rst-content h3 .headerlink,
+.btn .rst-content h4 .headerlink,
+.btn .rst-content h5 .headerlink,
+.btn .rst-content h6 .headerlink,
+.btn .rst-content p.caption .headerlink,
+.btn .rst-content table > caption .headerlink,
+.btn .rst-content tt.download span:first-child,
+.btn .wy-menu-vertical li.current > a span.toctree-expand,
+.btn .wy-menu-vertical li.on a span.toctree-expand,
+.btn .wy-menu-vertical li span.toctree-expand,
+.nav .fa,
+.nav .icon,
+.nav .rst-content .admonition-title,
+.nav .rst-content .code-block-caption .headerlink,
+.nav .rst-content code.download span:first-child,
+.nav .rst-content dl dt .headerlink,
+.nav .rst-content h1 .headerlink,
+.nav .rst-content h2 .headerlink,
+.nav .rst-content h3 .headerlink,
+.nav .rst-content h4 .headerlink,
+.nav .rst-content h5 .headerlink,
+.nav .rst-content h6 .headerlink,
+.nav .rst-content p.caption .headerlink,
+.nav .rst-content table > caption .headerlink,
+.nav .rst-content tt.download span:first-child,
+.nav .wy-menu-vertical li.current > a span.toctree-expand,
+.nav .wy-menu-vertical li.on a span.toctree-expand,
+.nav .wy-menu-vertical li span.toctree-expand,
+.rst-content .btn .admonition-title,
+.rst-content .code-block-caption .btn .headerlink,
+.rst-content .code-block-caption .nav .headerlink,
+.rst-content .nav .admonition-title,
+.rst-content code.download .btn span:first-child,
+.rst-content code.download .nav span:first-child,
+.rst-content dl dt .btn .headerlink,
+.rst-content dl dt .nav .headerlink,
+.rst-content h1 .btn .headerlink,
+.rst-content h1 .nav .headerlink,
+.rst-content h2 .btn .headerlink,
+.rst-content h2 .nav .headerlink,
+.rst-content h3 .btn .headerlink,
+.rst-content h3 .nav .headerlink,
+.rst-content h4 .btn .headerlink,
+.rst-content h4 .nav .headerlink,
+.rst-content h5 .btn .headerlink,
+.rst-content h5 .nav .headerlink,
+.rst-content h6 .btn .headerlink,
+.rst-content h6 .nav .headerlink,
+.rst-content p.caption .btn .headerlink,
+.rst-content p.caption .nav .headerlink,
+.rst-content table > caption .btn .headerlink,
+.rst-content table > caption .nav .headerlink,
+.rst-content tt.download .btn span:first-child,
+.rst-content tt.download .nav span:first-child,
+.wy-menu-vertical li .btn span.toctree-expand,
+.wy-menu-vertical li.current > a .btn span.toctree-expand,
+.wy-menu-vertical li.current > a .nav span.toctree-expand,
+.wy-menu-vertical li .nav span.toctree-expand,
+.wy-menu-vertical li.on a .btn span.toctree-expand,
+.wy-menu-vertical li.on a .nav span.toctree-expand {
+  display: inline;
+}
+.btn .fa-large.icon,
+.btn .fa.fa-large,
+.btn .rst-content .code-block-caption .fa-large.headerlink,
+.btn .rst-content .fa-large.admonition-title,
+.btn .rst-content code.download span.fa-large:first-child,
+.btn .rst-content dl dt .fa-large.headerlink,
+.btn .rst-content h1 .fa-large.headerlink,
+.btn .rst-content h2 .fa-large.headerlink,
+.btn .rst-content h3 .fa-large.headerlink,
+.btn .rst-content h4 .fa-large.headerlink,
+.btn .rst-content h5 .fa-large.headerlink,
+.btn .rst-content h6 .fa-large.headerlink,
+.btn .rst-content p.caption .fa-large.headerlink,
+.btn .rst-content table > caption .fa-large.headerlink,
+.btn .rst-content tt.download span.fa-large:first-child,
+.btn .wy-menu-vertical li span.fa-large.toctree-expand,
+.nav .fa-large.icon,
+.nav .fa.fa-large,
+.nav .rst-content .code-block-caption .fa-large.headerlink,
+.nav .rst-content .fa-large.admonition-title,
+.nav .rst-content code.download span.fa-large:first-child,
+.nav .rst-content dl dt .fa-large.headerlink,
+.nav .rst-content h1 .fa-large.headerlink,
+.nav .rst-content h2 .fa-large.headerlink,
+.nav .rst-content h3 .fa-large.headerlink,
+.nav .rst-content h4 .fa-large.headerlink,
+.nav .rst-content h5 .fa-large.headerlink,
+.nav .rst-content h6 .fa-large.headerlink,
+.nav .rst-content p.caption .fa-large.headerlink,
+.nav .rst-content table > caption .fa-large.headerlink,
+.nav .rst-content tt.download span.fa-large:first-child,
+.nav .wy-menu-vertical li span.fa-large.toctree-expand,
+.rst-content .btn .fa-large.admonition-title,
+.rst-content .code-block-caption .btn .fa-large.headerlink,
+.rst-content .code-block-caption .nav .fa-large.headerlink,
+.rst-content .nav .fa-large.admonition-title,
+.rst-content code.download .btn span.fa-large:first-child,
+.rst-content code.download .nav span.fa-large:first-child,
+.rst-content dl dt .btn .fa-large.headerlink,
+.rst-content dl dt .nav .fa-large.headerlink,
+.rst-content h1 .btn .fa-large.headerlink,
+.rst-content h1 .nav .fa-large.headerlink,
+.rst-content h2 .btn .fa-large.headerlink,
+.rst-content h2 .nav .fa-large.headerlink,
+.rst-content h3 .btn .fa-large.headerlink,
+.rst-content h3 .nav .fa-large.headerlink,
+.rst-content h4 .btn .fa-large.headerlink,
+.rst-content h4 .nav .fa-large.headerlink,
+.rst-content h5 .btn .fa-large.headerlink,
+.rst-content h5 .nav .fa-large.headerlink,
+.rst-content h6 .btn .fa-large.headerlink,
+.rst-content h6 .nav .fa-large.headerlink,
+.rst-content p.caption .btn .fa-large.headerlink,
+.rst-content p.caption .nav .fa-large.headerlink,
+.rst-content table > caption .btn .fa-large.headerlink,
+.rst-content table > caption .nav .fa-large.headerlink,
+.rst-content tt.download .btn span.fa-large:first-child,
+.rst-content tt.download .nav span.fa-large:first-child,
+.wy-menu-vertical li .btn span.fa-large.toctree-expand,
+.wy-menu-vertical li .nav span.fa-large.toctree-expand {
+  line-height: 0.9em;
+}
+.btn .fa-spin.icon,
+.btn .fa.fa-spin,
+.btn .rst-content .code-block-caption .fa-spin.headerlink,
+.btn .rst-content .fa-spin.admonition-title,
+.btn .rst-content code.download span.fa-spin:first-child,
+.btn .rst-content dl dt .fa-spin.headerlink,
+.btn .rst-content h1 .fa-spin.headerlink,
+.btn .rst-content h2 .fa-spin.headerlink,
+.btn .rst-content h3 .fa-spin.headerlink,
+.btn .rst-content h4 .fa-spin.headerlink,
+.btn .rst-content h5 .fa-spin.headerlink,
+.btn .rst-content h6 .fa-spin.headerlink,
+.btn .rst-content p.caption .fa-spin.headerlink,
+.btn .rst-content table > caption .fa-spin.headerlink,
+.btn .rst-content tt.download span.fa-spin:first-child,
+.btn .wy-menu-vertical li span.fa-spin.toctree-expand,
+.nav .fa-spin.icon,
+.nav .fa.fa-spin,
+.nav .rst-content .code-block-caption .fa-spin.headerlink,
+.nav .rst-content .fa-spin.admonition-title,
+.nav .rst-content code.download span.fa-spin:first-child,
+.nav .rst-content dl dt .fa-spin.headerlink,
+.nav .rst-content h1 .fa-spin.headerlink,
+.nav .rst-content h2 .fa-spin.headerlink,
+.nav .rst-content h3 .fa-spin.headerlink,
+.nav .rst-content h4 .fa-spin.headerlink,
+.nav .rst-content h5 .fa-spin.headerlink,
+.nav .rst-content h6 .fa-spin.headerlink,
+.nav .rst-content p.caption .fa-spin.headerlink,
+.nav .rst-content table > caption .fa-spin.headerlink,
+.nav .rst-content tt.download span.fa-spin:first-child,
+.nav .wy-menu-vertical li span.fa-spin.toctree-expand,
+.rst-content .btn .fa-spin.admonition-title,
+.rst-content .code-block-caption .btn .fa-spin.headerlink,
+.rst-content .code-block-caption .nav .fa-spin.headerlink,
+.rst-content .nav .fa-spin.admonition-title,
+.rst-content code.download .btn span.fa-spin:first-child,
+.rst-content code.download .nav span.fa-spin:first-child,
+.rst-content dl dt .btn .fa-spin.headerlink,
+.rst-content dl dt .nav .fa-spin.headerlink,
+.rst-content h1 .btn .fa-spin.headerlink,
+.rst-content h1 .nav .fa-spin.headerlink,
+.rst-content h2 .btn .fa-spin.headerlink,
+.rst-content h2 .nav .fa-spin.headerlink,
+.rst-content h3 .btn .fa-spin.headerlink,
+.rst-content h3 .nav .fa-spin.headerlink,
+.rst-content h4 .btn .fa-spin.headerlink,
+.rst-content h4 .nav .fa-spin.headerlink,
+.rst-content h5 .btn .fa-spin.headerlink,
+.rst-content h5 .nav .fa-spin.headerlink,
+.rst-content h6 .btn .fa-spin.headerlink,
+.rst-content h6 .nav .fa-spin.headerlink,
+.rst-content p.caption .btn .fa-spin.headerlink,
+.rst-content p.caption .nav .fa-spin.headerlink,
+.rst-content table > caption .btn .fa-spin.headerlink,
+.rst-content table > caption .nav .fa-spin.headerlink,
+.rst-content tt.download .btn span.fa-spin:first-child,
+.rst-content tt.download .nav span.fa-spin:first-child,
+.wy-menu-vertical li .btn span.fa-spin.toctree-expand,
+.wy-menu-vertical li .nav span.fa-spin.toctree-expand {
+  display: inline-block;
+}
+.btn.fa:before,
+.btn.icon:before,
+.rst-content .btn.admonition-title:before,
+.rst-content .code-block-caption .btn.headerlink:before,
+.rst-content code.download span.btn:first-child:before,
+.rst-content dl dt .btn.headerlink:before,
+.rst-content h1 .btn.headerlink:before,
+.rst-content h2 .btn.headerlink:before,
+.rst-content h3 .btn.headerlink:before,
+.rst-content h4 .btn.headerlink:before,
+.rst-content h5 .btn.headerlink:before,
+.rst-content h6 .btn.headerlink:before,
+.rst-content p.caption .btn.headerlink:before,
+.rst-content table > caption .btn.headerlink:before,
+.rst-content tt.download span.btn:first-child:before,
+.wy-menu-vertical li span.btn.toctree-expand:before {
+  opacity: 0.5;
+  -webkit-transition: opacity 0.05s ease-in;
+  -moz-transition: opacity 0.05s ease-in;
+  transition: opacity 0.05s ease-in;
+}
+.btn.fa:hover:before,
+.btn.icon:hover:before,
+.rst-content .btn.admonition-title:hover:before,
+.rst-content .code-block-caption .btn.headerlink:hover:before,
+.rst-content code.download span.btn:first-child:hover:before,
+.rst-content dl dt .btn.headerlink:hover:before,
+.rst-content h1 .btn.headerlink:hover:before,
+.rst-content h2 .btn.headerlink:hover:before,
+.rst-content h3 .btn.headerlink:hover:before,
+.rst-content h4 .btn.headerlink:hover:before,
+.rst-content h5 .btn.headerlink:hover:before,
+.rst-content h6 .btn.headerlink:hover:before,
+.rst-content p.caption .btn.headerlink:hover:before,
+.rst-content table > caption .btn.headerlink:hover:before,
+.rst-content tt.download span.btn:first-child:hover:before,
+.wy-menu-vertical li span.btn.toctree-expand:hover:before {
+  opacity: 1;
+}
+.btn-mini .fa:before,
+.btn-mini .icon:before,
+.btn-mini .rst-content .admonition-title:before,
+.btn-mini .rst-content .code-block-caption .headerlink:before,
+.btn-mini .rst-content code.download span:first-child:before,
+.btn-mini .rst-content dl dt .headerlink:before,
+.btn-mini .rst-content h1 .headerlink:before,
+.btn-mini .rst-content h2 .headerlink:before,
+.btn-mini .rst-content h3 .headerlink:before,
+.btn-mini .rst-content h4 .headerlink:before,
+.btn-mini .rst-content h5 .headerlink:before,
+.btn-mini .rst-content h6 .headerlink:before,
+.btn-mini .rst-content p.caption .headerlink:before,
+.btn-mini .rst-content table > caption .headerlink:before,
+.btn-mini .rst-content tt.download span:first-child:before,
+.btn-mini .wy-menu-vertical li span.toctree-expand:before,
+.rst-content .btn-mini .admonition-title:before,
+.rst-content .code-block-caption .btn-mini .headerlink:before,
+.rst-content code.download .btn-mini span:first-child:before,
+.rst-content dl dt .btn-mini .headerlink:before,
+.rst-content h1 .btn-mini .headerlink:before,
+.rst-content h2 .btn-mini .headerlink:before,
+.rst-content h3 .btn-mini .headerlink:before,
+.rst-content h4 .btn-mini .headerlink:before,
+.rst-content h5 .btn-mini .headerlink:before,
+.rst-content h6 .btn-mini .headerlink:before,
+.rst-content p.caption .btn-mini .headerlink:before,
+.rst-content table > caption .btn-mini .headerlink:before,
+.rst-content tt.download .btn-mini span:first-child:before,
+.wy-menu-vertical li .btn-mini span.toctree-expand:before {
+  font-size: 14px;
+  vertical-align: -15%;
+}
+.rst-content .admonition,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning,
+.wy-alert {
+  padding: 12px;
+  line-height: 24px;
+  margin-bottom: 24px;
+  background: #F2F2F2;
+}
+.rst-content .admonition-title,
+.wy-alert-title {
+  font-weight: 700;
+  display: block;
+  color: #fff;
+  background: #1D4F9C;
+  padding: 6px 12px;
+  margin: -12px -12px 12px;
+}
+.rst-content .danger,
+.rst-content .error,
+.rst-content .wy-alert-danger.admonition,
+.rst-content .wy-alert-danger.admonition-todo,
+.rst-content .wy-alert-danger.attention,
+.rst-content .wy-alert-danger.caution,
+.rst-content .wy-alert-danger.hint,
+.rst-content .wy-alert-danger.important,
+.rst-content .wy-alert-danger.note,
+.rst-content .wy-alert-danger.seealso,
+.rst-content .wy-alert-danger.tip,
+.rst-content .wy-alert-danger.warning,
+.wy-alert.wy-alert-danger {
+  background: #fdf3f2;
+}
+.rst-content .danger .admonition-title,
+.rst-content .danger .wy-alert-title,
+.rst-content .error .admonition-title,
+.rst-content .error .wy-alert-title,
+.rst-content .wy-alert-danger.admonition-todo .admonition-title,
+.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-danger.admonition .admonition-title,
+.rst-content .wy-alert-danger.admonition .wy-alert-title,
+.rst-content .wy-alert-danger.attention .admonition-title,
+.rst-content .wy-alert-danger.attention .wy-alert-title,
+.rst-content .wy-alert-danger.caution .admonition-title,
+.rst-content .wy-alert-danger.caution .wy-alert-title,
+.rst-content .wy-alert-danger.hint .admonition-title,
+.rst-content .wy-alert-danger.hint .wy-alert-title,
+.rst-content .wy-alert-danger.important .admonition-title,
+.rst-content .wy-alert-danger.important .wy-alert-title,
+.rst-content .wy-alert-danger.note .admonition-title,
+.rst-content .wy-alert-danger.note .wy-alert-title,
+.rst-content .wy-alert-danger.seealso .admonition-title,
+.rst-content .wy-alert-danger.seealso .wy-alert-title,
+.rst-content .wy-alert-danger.tip .admonition-title,
+.rst-content .wy-alert-danger.tip .wy-alert-title,
+.rst-content .wy-alert-danger.warning .admonition-title,
+.rst-content .wy-alert-danger.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-danger .admonition-title,
+.wy-alert.wy-alert-danger .rst-content .admonition-title,
+.wy-alert.wy-alert-danger .wy-alert-title {
+  background: #f29f97;
+}
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .warning,
+.rst-content .wy-alert-warning.admonition,
+.rst-content .wy-alert-warning.danger,
+.rst-content .wy-alert-warning.error,
+.rst-content .wy-alert-warning.hint,
+.rst-content .wy-alert-warning.important,
+.rst-content .wy-alert-warning.note,
+.rst-content .wy-alert-warning.seealso,
+.rst-content .wy-alert-warning.tip,
+.wy-alert.wy-alert-warning {
+  background: #ffedcc;
+}
+.rst-content .admonition-todo .admonition-title,
+.rst-content .admonition-todo .wy-alert-title,
+.rst-content .attention .admonition-title,
+.rst-content .attention .wy-alert-title,
+.rst-content .caution .admonition-title,
+.rst-content .caution .wy-alert-title,
+.rst-content .warning .admonition-title,
+.rst-content .warning .wy-alert-title,
+.rst-content .wy-alert-warning.admonition .admonition-title,
+.rst-content .wy-alert-warning.admonition .wy-alert-title,
+.rst-content .wy-alert-warning.danger .admonition-title,
+.rst-content .wy-alert-warning.danger .wy-alert-title,
+.rst-content .wy-alert-warning.error .admonition-title,
+.rst-content .wy-alert-warning.error .wy-alert-title,
+.rst-content .wy-alert-warning.hint .admonition-title,
+.rst-content .wy-alert-warning.hint .wy-alert-title,
+.rst-content .wy-alert-waseealsorning.important .admonition-title,
+.rst-content .wy-alert-warning.important .wy-alert-title,
+.rst-content .wy-alert-warning.note .admonition-title,
+.rst-content .wy-alert-warning.note .wy-alert-title,
+.rst-content .wy-alert-warning.seealso .admonition-title,
+.rst-content .wy-alert-warning.seealso .wy-alert-title,
+.rst-content .wy-alert-warning.tip .admonition-title,
+.rst-content .wy-alert-warning.tip .wy-alert-title,
+.rst-content .wy-alert.wy-alert-warning .admonition-title,
+.wy-alert.wy-alert-warning .rst-content .admonition-title,
+.wy-alert.wy-alert-warning .wy-alert-title {
+  background: #f0b37e;
+}
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .wy-alert-info.admonition,
+.rst-content .wy-alert-info.admonition-todo,
+.rst-content .wy-alert-info.attention,
+.rst-content .wy-alert-info.caution,
+.rst-content .wy-alert-info.danger,
+.rst-content .wy-alert-info.error,
+.rst-content .wy-alert-info.hint,
+.rst-content .wy-alert-info.important,
+.rst-content .wy-alert-info.tip,
+.rst-content .wy-alert-info.warning,
+.wy-alert.wy-alert-info {
+  background: #F2F2F2;
+}
+.rst-content .note .wy-alert-title,
+.rst-content .note .admonition-title {
+  background: #1D4F9C;
+}
+.rst-content .seealso .admonition-title,
+.rst-content .seealso .wy-alert-title,
+.rst-content .wy-alert-info.admonition-todo .admonition-title,
+.rst-content .wy-alert-info.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-info.admonition .admonition-title,
+.rst-content .wy-alert-info.admonition .wy-alert-title,
+.rst-content .wy-alert-info.attention .admonition-title,
+.rst-content .wy-alert-info.attention .wy-alert-title,
+.rst-content .wy-alert-info.caution .admonition-title,
+.rst-content .wy-alert-info.caution .wy-alert-title,
+.rst-content .wy-alert-info.danger .admonition-title,
+.rst-content .wy-alert-info.danger .wy-alert-title,
+.rst-content .wy-alert-info.error .admonition-title,
+.rst-content .wy-alert-info.error .wy-alert-title,
+.rst-content .wy-alert-info.hint .admonition-title,
+.rst-content .wy-alert-info.hint .wy-alert-title,
+.rst-content .wy-alert-info.important .admonition-title,
+.rst-content .wy-alert-info.important .wy-alert-title,
+.rst-content .wy-alert-info.tip .admonition-title,
+.rst-content .wy-alert-info.tip .wy-alert-title,
+.rst-content .wy-alert-info.warning .admonition-title,
+.rst-content .wy-alert-info.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-info .admonition-title,
+.wy-alert.wy-alert-info .rst-content .admonition-title,
+.wy-alert.wy-alert-info .wy-alert-title {
+  background: #999999;
+}
+.rst-content .hint,
+.rst-content .important,
+.rst-content .tip,
+.rst-content .wy-alert-success.admonition,
+.rst-content .wy-alert-success.admonition-todo,
+.rst-content .wy-alert-success.attention,
+.rst-content .wy-alert-success.caution,
+.rst-content .wy-alert-success.danger,
+.rst-content .wy-alert-success.error,
+.rst-content .wy-alert-success.note,
+.rst-content .wy-alert-success.seealso,
+.rst-content .wy-alert-success.warning,
+.wy-alert.wy-alert-success {
+  background: #F2F2F2;
+}
+.rst-content .hint .admonition-title,
+.rst-content .hint .wy-alert-title,
+.rst-content .important .admonition-title,
+.rst-content .important .wy-alert-title,
+.rst-content .tip .admonition-title,
+.rst-content .tip .wy-alert-title,
+.rst-content .wy-alert-success.admonition-todo .admonition-title,
+.rst-content .wy-alert-success.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-success.admonition .admonition-title,
+.rst-content .wy-alert-success.admonition .wy-alert-title,
+.rst-content .wy-alert-success.attention .admonition-title,
+.rst-content .wy-alert-success.attention .wy-alert-title,
+.rst-content .wy-alert-success.caution .admonition-title,
+.rst-content .wy-alert-success.caution .wy-alert-title,
+.rst-content .wy-alert-success.danger .admonition-title,
+.rst-content .wy-alert-success.danger .wy-alert-title,
+.rst-content .wy-alert-success.error .admonition-title,
+.rst-content .wy-alert-success.error .wy-alert-title,
+.rst-content .wy-alert-success.note .admonition-title,
+.rst-content .wy-alert-success.note .wy-alert-title,
+.rst-content .wy-alert-success.seealso .admonition-title,
+.rst-content .wy-alert-success.seealso .wy-alert-title,
+.rst-content .wy-alert-success.warning .admonition-title,
+.rst-content .wy-alert-success.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-success .admonition-title,
+.wy-alert.wy-alert-success .rst-content .admonition-title,
+.wy-alert.wy-alert-success .wy-alert-title {
+  background: #7F8DC4;
+}
+.rst-content .wy-alert-neutral.admonition,
+.rst-content .wy-alert-neutral.admonition-todo,
+.rst-content .wy-alert-neutral.attention,
+.rst-content .wy-alert-neutral.caution,
+.rst-content .wy-alert-neutral.danger,
+.rst-content .wy-alert-neutral.error,
+.rst-content .wy-alert-neutral.hint,
+.rst-content .wy-alert-neutral.important,
+.rst-content .wy-alert-neutral.note,
+.rst-content .wy-alert-neutral.seealso,
+.rst-content .wy-alert-neutral.tip,
+.rst-content .wy-alert-neutral.warning,
+.wy-alert.wy-alert-neutral {
+  background: #f3f6f6;
+}
+.rst-content .wy-alert-neutral.admonition-todo .admonition-title,
+.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-neutral.admonition .admonition-title,
+.rst-content .wy-alert-neutral.admonition .wy-alert-title,
+.rst-content .wy-alert-neutral.attention .admonition-title,
+.rst-content .wy-alert-neutral.attention .wy-alert-title,
+.rst-content .wy-alert-neutral.caution .admonition-title,
+.rst-content .wy-alert-neutral.caution .wy-alert-title,
+.rst-content .wy-alert-neutral.danger .admonition-title,
+.rst-content .wy-alert-neutral.danger .wy-alert-title,
+.rst-content .wy-alert-neutral.error .admonition-title,
+.rst-content .wy-alert-neutral.error .wy-alert-title,
+.rst-content .wy-alert-neutral.hint .admonition-title,
+.rst-content .wy-alert-neutral.hint .wy-alert-title,
+.rst-content .wy-alert-neutral.important .admonition-title,
+.rst-content .wy-alert-neutral.important .wy-alert-title,
+.rst-content .wy-alert-neutral.note .admonition-title,
+.rst-content .wy-alert-neutral.note .wy-alert-title,
+.rst-content .wy-alert-neutral.seealso .admonition-title,
+.rst-content .wy-alert-neutral.seealso .wy-alert-title,
+.rst-content .wy-alert-neutral.tip .admonition-title,
+.rst-content .wy-alert-neutral.tip .wy-alert-title,
+.rst-content .wy-alert-neutral.warning .admonition-title,
+.rst-content .wy-alert-neutral.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-neutral .admonition-title,
+.wy-alert.wy-alert-neutral .rst-content .admonition-title,
+.wy-alert.wy-alert-neutral .wy-alert-title {
+  color: #404040;
+  background: #e1e4e5;
+}
+.rst-content .wy-alert-neutral.admonition-todo a,
+.rst-content .wy-alert-neutral.admonition a,
+.rst-content .wy-alert-neutral.attention a,
+.rst-content .wy-alert-neutral.caution a,
+.rst-content .wy-alert-neutral.danger a,
+.rst-content .wy-alert-neutral.error a,
+.rst-content .wy-alert-neutral.hint a,
+.rst-content .wy-alert-neutral.important a,
+.rst-content .wy-alert-neutral.note a,
+.rst-content .wy-alert-neutral.seealso a,
+.rst-content .wy-alert-neutral.tip a,
+.rst-content .wy-alert-neutral.warning a,
+.wy-alert.wy-alert-neutral a {
+  color: #2980b9;
+}
+.rst-content .admonition-todo p:last-child,
+.rst-content .admonition p:last-child,
+.rst-content .attention p:last-child,
+.rst-content .caution p:last-child,
+.rst-content .danger p:last-child,
+.rst-content .error p:last-child,
+.rst-content .hint p:last-child,
+.rst-content .important p:last-child,
+.rst-content .note p:last-child,
+.rst-content .seealso p:last-child,
+.rst-content .tip p:last-child,
+.rst-content .warning p:last-child,
+.wy-alert p:last-child {
+  margin-bottom: 0;
+}
+.wy-tray-container {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 600;
+}
+.wy-tray-container li {
+  display: block;
+  width: 300px;
+  background: transparent;
+  color: #fff;
+  text-align: center;
+  box-shadow: 0 5px 5px 0 rgba(0, 0, 0, 0.1);
+  padding: 0 24px;
+  min-width: 20%;
+  opacity: 0;
+  height: 0;
+  line-height: 56px;
+  overflow: hidden;
+  -webkit-transition: all 0.3s ease-in;
+  -moz-transition: all 0.3s ease-in;
+  transition: all 0.3s ease-in;
+}
+.wy-tray-container li.wy-tray-item-success {
+  background: #27ae60;
+}
+.wy-tray-container li.wy-tray-item-info {
+  background: #2980b9;
+}
+.wy-tray-container li.wy-tray-item-warning {
+  background: #e67e22;
+}
+.wy-tray-container li.wy-tray-item-danger {
+  background: #e74c3c;
+}
+.wy-tray-container li.on {
+  opacity: 1;
+  height: 56px;
+}
+@media screen and (max-width: 768px) {
+  .wy-tray-container {
+    bottom: auto;
+    top: 0;
+    width: 100%;
+  }
+  .wy-tray-container li {
+    width: 100%;
+  }
+}
+button {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+  cursor: pointer;
+  line-height: normal;
+  -webkit-appearance: button;
+  *overflow: visible;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+button[disabled] {
+  cursor: default;
+}
+.btn {
+  display: inline-block;
+  border-radius: 2px;
+  line-height: normal;
+  white-space: nowrap;
+  text-align: center;
+  cursor: pointer;
+  font-size: 100%;
+  padding: 6px 12px 8px;
+  color: #fff;
+  border: 1px solid rgba(0, 0, 0, 0.1);
+  background-color: #27ae60;
+  text-decoration: none;
+  font-weight: 400;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  box-shadow: inset 0 1px 2px -1px hsla(0, 0%, 100%, 0.5),
+    inset 0 -2px 0 0 rgba(0, 0, 0, 0.1);
+  outline-none: false;
+  vertical-align: middle;
+  *display: inline;
+  zoom: 1;
+  -webkit-user-drag: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  -webkit-transition: all 0.1s linear;
+  -moz-transition: all 0.1s linear;
+  transition: all 0.1s linear;
+}
+.btn-hover {
+  background: #2e8ece;
+  color: #fff;
+}
+.btn:hover {
+  background: #2cc36b;
+  color: #fff;
+}
+.btn:focus {
+  background: #2cc36b;
+  outline: 0;
+}
+.btn:active {
+  box-shadow: inset 0 -1px 0 0 rgba(0, 0, 0, 0.05),
+    inset 0 2px 0 0 rgba(0, 0, 0, 0.1);
+  padding: 8px 12px 6px;
+}
+.btn:visited {
+  color: #fff;
+}
+.btn-disabled,
+.btn-disabled:active,
+.btn-disabled:focus,
+.btn-disabled:hover,
+.btn:disabled {
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  filter: alpha(opacity=40);
+  opacity: 0.4;
+  cursor: not-allowed;
+  box-shadow: none;
+}
+.btn::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+.btn-small {
+  font-size: 80%;
+}
+.btn-info {
+  background-color: #2980b9 !important;
+}
+.btn-info:hover {
+  background-color: #2e8ece !important;
+}
+.btn-neutral {
+  background-color: #f3f6f6 !important;
+  color: #404040 !important;
+}
+.btn-neutral:hover {
+  background-color: #e5ebeb !important;
+  color: #404040;
+}
+.btn-neutral:visited {
+  color: #404040 !important;
+}
+.btn-success {
+  background-color: #27ae60 !important;
+}
+.btn-success:hover {
+  background-color: #295 !important;
+}
+.btn-danger {
+  background-color: #e74c3c !important;
+}
+.btn-danger:hover {
+  background-color: #ea6153 !important;
+}
+.btn-warning {
+  background-color: #e67e22 !important;
+}
+.btn-warning:hover {
+  background-color: #e98b39 !important;
+}
+.btn-invert {
+  background-color: #222;
+}
+.btn-invert:hover {
+  background-color: #2f2f2f !important;
+}
+.btn-link {
+  background-color: transparent !important;
+  color: #2980b9;
+  box-shadow: none;
+  border-color: transparent !important;
+}
+.btn-link:active,
+.btn-link:hover {
+  background-color: transparent !important;
+  color: #409ad5 !important;
+  box-shadow: none;
+}
+.btn-link:visited {
+  color: #2980b9;
+}
+.wy-btn-group .btn,
+.wy-control .btn {
+  vertical-align: middle;
+}
+.wy-btn-group {
+  margin-bottom: 24px;
+  *zoom: 1;
+}
+.wy-btn-group:after,
+.wy-btn-group:before {
+  display: table;
+  content: "";
+}
+.wy-btn-group:after {
+  clear: both;
+}
+.wy-dropdown {
+  position: relative;
+  display: inline-block;
+}
+.wy-dropdown-active .wy-dropdown-menu {
+  display: block;
+}
+.wy-dropdown-menu {
+  position: absolute;
+  left: 0;
+  display: none;
+  float: left;
+  top: 100%;
+  min-width: 100%;
+  background: #fcfcfc;
+  z-index: 100;
+  border: 1px solid #cfd7dd;
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
+  padding: 12px;
+}
+.wy-dropdown-menu > dd > a {
+  display: block;
+  clear: both;
+  color: #404040;
+  white-space: nowrap;
+  font-size: 90%;
+  padding: 0 12px;
+  cursor: pointer;
+}
+.wy-dropdown-menu > dd > a:hover {
+  background: #000000;
+  color: #fff;
+}
+.wy-dropdown-menu > dd.divider {
+  border-top: 1px solid #cfd7dd;
+  margin: 6px 0;
+}
+.wy-dropdown-menu > dd.search {
+  padding-bottom: 12px;
+}
+.wy-dropdown-menu > dd.search input[type="search"] {
+  width: 100%;
+}
+.wy-dropdown-menu > dd.call-to-action {
+  background: #e3e3e3;
+  text-transform: uppercase;
+  font-weight: 500;
+  font-size: 80%;
+}
+.wy-dropdown-menu > dd.call-to-action:hover {
+  background: #e3e3e3;
+}
+.wy-dropdown-menu > dd.call-to-action .btn {
+  color: #fff;
+}
+.wy-dropdown.wy-dropdown-up .wy-dropdown-menu {
+  bottom: 100%;
+  top: auto;
+  left: auto;
+  right: 0;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu {
+  background: #fcfcfc;
+  margin-top: 2px;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a {
+  padding: 6px 12px;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover {
+  background: #000000;
+  color: #fff;
+}
+.wy-dropdown.wy-dropdown-left .wy-dropdown-menu {
+  right: 0;
+  left: auto;
+  text-align: right;
+}
+.wy-dropdown-arrow:before {
+  content: " ";
+  border-bottom: 5px solid #f5f5f5;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
+  position: absolute;
+  display: block;
+  top: -4px;
+  left: 50%;
+  margin-left: -3px;
+}
+.wy-dropdown-arrow.wy-dropdown-arrow-left:before {
+  left: 11px;
+}
+.wy-form-stacked select {
+  display: block;
+}
+.wy-form-aligned .wy-help-inline,
+.wy-form-aligned input,
+.wy-form-aligned label,
+.wy-form-aligned select,
+.wy-form-aligned textarea {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+  vertical-align: middle;
+}
+.wy-form-aligned .wy-control-group > label {
+  display: inline-block;
+  vertical-align: middle;
+  width: 10em;
+  margin: 6px 12px 0 0;
+  float: left;
+}
+.wy-form-aligned .wy-control {
+  float: left;
+}
+.wy-form-aligned .wy-control label {
+  display: block;
+}
+.wy-form-aligned .wy-control select {
+  margin-top: 6px;
+}
+fieldset {
+  margin: 0;
+}
+fieldset,
+legend {
+  border: 0;
+  padding: 0;
+}
+legend {
+  width: 100%;
+  white-space: normal;
+  margin-bottom: 24px;
+  font-size: 150%;
+  *margin-left: -7px;
+}
+label,
+legend {
+  display: block;
+}
+label {
+  margin: 0 0 0.3125em;
+  color: #333;
+  font-size: 90%;
+}
+input,
+select,
+textarea {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+}
+.wy-control-group {
+  margin-bottom: 24px;
+  max-width: 1200px;
+  margin-left: auto;
+  margin-right: auto;
+  *zoom: 1;
+}
+.wy-control-group:after,
+.wy-control-group:before {
+  display: table;
+  content: "";
+}
+.wy-control-group:after {
+  clear: both;
+}
+.wy-control-group.wy-control-group-required > label:after {
+  content: " *";
+  color: #e74c3c;
+}
+.wy-control-group .wy-form-full,
+.wy-control-group .wy-form-halves,
+.wy-control-group .wy-form-thirds {
+  padding-bottom: 12px;
+}
+.wy-control-group .wy-form-full input[type="color"],
+.wy-control-group .wy-form-full input[type="date"],
+.wy-control-group .wy-form-full input[type="datetime-local"],
+.wy-control-group .wy-form-full input[type="datetime"],
+.wy-control-group .wy-form-full input[type="email"],
+.wy-control-group .wy-form-full input[type="month"],
+.wy-control-group .wy-form-full input[type="number"],
+.wy-control-group .wy-form-full input[type="password"],
+.wy-control-group .wy-form-full input[type="search"],
+.wy-control-group .wy-form-full input[type="tel"],
+.wy-control-group .wy-form-full input[type="text"],
+.wy-control-group .wy-form-full input[type="time"],
+.wy-control-group .wy-form-full input[type="url"],
+.wy-control-group .wy-form-full input[type="week"],
+.wy-control-group .wy-form-full select,
+.wy-control-group .wy-form-halves input[type="color"],
+.wy-control-group .wy-form-halves input[type="date"],
+.wy-control-group .wy-form-halves input[type="datetime-local"],
+.wy-control-group .wy-form-halves input[type="datetime"],
+.wy-control-group .wy-form-halves input[type="email"],
+.wy-control-group .wy-form-halves input[type="month"],
+.wy-control-group .wy-form-halves input[type="number"],
+.wy-control-group .wy-form-halves input[type="password"],
+.wy-control-group .wy-form-halves input[type="search"],
+.wy-control-group .wy-form-halves input[type="tel"],
+.wy-control-group .wy-form-halves input[type="text"],
+.wy-control-group .wy-form-halves input[type="time"],
+.wy-control-group .wy-form-halves input[type="url"],
+.wy-control-group .wy-form-halves input[type="week"],
+.wy-control-group .wy-form-halves select,
+.wy-control-group .wy-form-thirds input[type="color"],
+.wy-control-group .wy-form-thirds input[type="date"],
+.wy-control-group .wy-form-thirds input[type="datetime-local"],
+.wy-control-group .wy-form-thirds input[type="datetime"],
+.wy-control-group .wy-form-thirds input[type="email"],
+.wy-control-group .wy-form-thirds input[type="month"],
+.wy-control-group .wy-form-thirds input[type="number"],
+.wy-control-group .wy-form-thirds input[type="password"],
+.wy-control-group .wy-form-thirds input[type="search"],
+.wy-control-group .wy-form-thirds input[type="tel"],
+.wy-control-group .wy-form-thirds input[type="text"],
+.wy-control-group .wy-form-thirds input[type="time"],
+.wy-control-group .wy-form-thirds input[type="url"],
+.wy-control-group .wy-form-thirds input[type="week"],
+.wy-control-group .wy-form-thirds select {
+  width: 100%;
+}
+.wy-control-group .wy-form-full {
+  float: left;
+  display: block;
+  width: 100%;
+  margin-right: 0;
+}
+.wy-control-group .wy-form-full:last-child {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-halves {
+  float: left;
+  display: block;
+  margin-right: 2.35765%;
+  width: 48.82117%;
+}
+.wy-control-group .wy-form-halves:last-child,
+.wy-control-group .wy-form-halves:nth-of-type(2n) {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-halves:nth-of-type(odd) {
+  clear: left;
+}
+.wy-control-group .wy-form-thirds {
+  float: left;
+  display: block;
+  margin-right: 2.35765%;
+  width: 31.76157%;
+}
+.wy-control-group .wy-form-thirds:last-child,
+.wy-control-group .wy-form-thirds:nth-of-type(3n) {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-thirds:nth-of-type(3n + 1) {
+  clear: left;
+}
+.wy-control-group.wy-control-group-no-input .wy-control,
+.wy-control-no-input {
+  margin: 6px 0 0;
+  font-size: 90%;
+}
+.wy-control-no-input {
+  display: inline-block;
+}
+.wy-control-group.fluid-input input[type="color"],
+.wy-control-group.fluid-input input[type="date"],
+.wy-control-group.fluid-input input[type="datetime-local"],
+.wy-control-group.fluid-input input[type="datetime"],
+.wy-control-group.fluid-input input[type="email"],
+.wy-control-group.fluid-input input[type="month"],
+.wy-control-group.fluid-input input[type="number"],
+.wy-control-group.fluid-input input[type="password"],
+.wy-control-group.fluid-input input[type="search"],
+.wy-control-group.fluid-input input[type="tel"],
+.wy-control-group.fluid-input input[type="text"],
+.wy-control-group.fluid-input input[type="time"],
+.wy-control-group.fluid-input input[type="url"],
+.wy-control-group.fluid-input input[type="week"] {
+  width: 100%;
+}
+.wy-form-message-inline {
+  padding-left: 0.3em;
+  color: #666;
+  font-size: 90%;
+}
+.wy-form-message {
+  display: block;
+  color: #999;
+  font-size: 70%;
+  margin-top: 0.3125em;
+  font-style: italic;
+}
+.wy-form-message p {
+  font-size: inherit;
+  font-style: italic;
+  margin-bottom: 6px;
+}
+.wy-form-message p:last-child {
+  margin-bottom: 0;
+}
+input {
+  line-height: normal;
+}
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button;
+  cursor: pointer;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  *overflow: visible;
+}
+input[type="color"],
+input[type="date"],
+input[type="datetime-local"],
+input[type="datetime"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"] {
+  -webkit-appearance: none;
+  padding: 6px;
+  display: inline-block;
+  border: 1px solid #ccc;
+  font-size: 80%;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  box-shadow: inset 0 1px 3px #ddd;
+  border-radius: 0;
+  -webkit-transition: border 0.3s linear;
+  -moz-transition: border 0.3s linear;
+  transition: border 0.3s linear;
+}
+input[type="datetime-local"] {
+  padding: 0.34375em 0.625em;
+}
+input[disabled] {
+  cursor: default;
+}
+input[type="checkbox"],
+input[type="radio"] {
+  padding: 0;
+  margin-right: 0.3125em;
+  *height: 13px;
+  *width: 13px;
+}
+input[type="checkbox"],
+input[type="radio"],
+input[type="search"] {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+input[type="color"]:focus,
+input[type="date"]:focus,
+input[type="datetime-local"]:focus,
+input[type="datetime"]:focus,
+input[type="email"]:focus,
+input[type="month"]:focus,
+input[type="number"]:focus,
+input[type="password"]:focus,
+input[type="search"]:focus,
+input[type="tel"]:focus,
+input[type="text"]:focus,
+input[type="time"]:focus,
+input[type="url"]:focus,
+input[type="week"]:focus {
+  outline: 0;
+  outline: thin dotted\9;
+  border-color: #333;
+}
+input.no-focus:focus {
+  border-color: #ccc !important;
+}
+input[type="checkbox"]:focus,
+input[type="file"]:focus,
+input[type="radio"]:focus {
+  outline: thin dotted #333;
+  outline: 1px auto #129fea;
+}
+input[type="color"][disabled],
+input[type="date"][disabled],
+input[type="datetime-local"][disabled],
+input[type="datetime"][disabled],
+input[type="email"][disabled],
+input[type="month"][disabled],
+input[type="number"][disabled],
+input[type="password"][disabled],
+input[type="search"][disabled],
+input[type="tel"][disabled],
+input[type="text"][disabled],
+input[type="time"][disabled],
+input[type="url"][disabled],
+input[type="week"][disabled] {
+  cursor: not-allowed;
+  background-color: #fafafa;
+}
+input:focus:invalid,
+select:focus:invalid,
+textarea:focus:invalid {
+  color: #e74c3c;
+  border: 1px solid #e74c3c;
+}
+input:focus:invalid:focus,
+select:focus:invalid:focus,
+textarea:focus:invalid:focus {
+  border-color: #e74c3c;
+}
+input[type="checkbox"]:focus:invalid:focus,
+input[type="file"]:focus:invalid:focus,
+input[type="radio"]:focus:invalid:focus {
+  outline-color: #e74c3c;
+}
+input.wy-input-large {
+  padding: 12px;
+  font-size: 100%;
+}
+textarea {
+  overflow: auto;
+  vertical-align: top;
+  width: 100%;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+}
+select,
+textarea {
+  padding: 0.5em 0.625em;
+  display: inline-block;
+  border: 1px solid #ccc;
+  font-size: 80%;
+  box-shadow: inset 0 1px 3px #ddd;
+  -webkit-transition: border 0.3s linear;
+  -moz-transition: border 0.3s linear;
+  transition: border 0.3s linear;
+}
+select {
+  border: 1px solid #ccc;
+  background-color: #fff;
+}
+select[multiple] {
+  height: auto;
+}
+select:focus,
+textarea:focus {
+  outline: 0;
+}
+input[readonly],
+select[disabled],
+select[readonly],
+textarea[disabled],
+textarea[readonly] {
+  cursor: not-allowed;
+  background-color: #fafafa;
+}
+input[type="checkbox"][disabled],
+input[type="radio"][disabled] {
+  cursor: not-allowed;
+}
+.wy-checkbox,
+.wy-radio {
+  margin: 6px 0;
+  color: #404040;
+  display: block;
+}
+.wy-checkbox input,
+.wy-radio input {
+  vertical-align: baseline;
+}
+.wy-form-message-inline {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+  vertical-align: middle;
+}
+.wy-input-prefix,
+.wy-input-suffix {
+  white-space: nowrap;
+  padding: 6px;
+}
+.wy-input-prefix .wy-input-context,
+.wy-input-suffix .wy-input-context {
+  line-height: 27px;
+  padding: 0 8px;
+  display: inline-block;
+  font-size: 80%;
+  background-color: #f3f6f6;
+  border: 1px solid #ccc;
+  color: #999;
+}
+.wy-input-suffix .wy-input-context {
+  border-left: 0;
+}
+.wy-input-prefix .wy-input-context {
+  border-right: 0;
+}
+.wy-switch {
+  position: relative;
+  display: block;
+  height: 24px;
+  margin-top: 12px;
+  cursor: pointer;
+}
+.wy-switch:before {
+  left: 0;
+  top: 0;
+  width: 36px;
+  height: 12px;
+  background: #ccc;
+}
+.wy-switch:after,
+.wy-switch:before {
+  position: absolute;
+  content: "";
+  display: block;
+  border-radius: 4px;
+  -webkit-transition: all 0.2s ease-in-out;
+  -moz-transition: all 0.2s ease-in-out;
+  transition: all 0.2s ease-in-out;
+}
+.wy-switch:after {
+  width: 18px;
+  height: 18px;
+  background: #999;
+  left: -3px;
+  top: -3px;
+}
+.wy-switch span {
+  position: absolute;
+  left: 48px;
+  display: block;
+  font-size: 12px;
+  color: #ccc;
+  line-height: 1;
+}
+.wy-switch.active:before {
+  background: #1e8449;
+}
+.wy-switch.active:after {
+  left: 24px;
+  background: #27ae60;
+}
+.wy-switch.disabled {
+  cursor: not-allowed;
+  opacity: 0.8;
+}
+.wy-control-group.wy-control-group-error .wy-form-message,
+.wy-control-group.wy-control-group-error > label {
+  color: #e74c3c;
+}
+.wy-control-group.wy-control-group-error input[type="color"],
+.wy-control-group.wy-control-group-error input[type="date"],
+.wy-control-group.wy-control-group-error input[type="datetime-local"],
+.wy-control-group.wy-control-group-error input[type="datetime"],
+.wy-control-group.wy-control-group-error input[type="email"],
+.wy-control-group.wy-control-group-error input[type="month"],
+.wy-control-group.wy-control-group-error input[type="number"],
+.wy-control-group.wy-control-group-error input[type="password"],
+.wy-control-group.wy-control-group-error input[type="search"],
+.wy-control-group.wy-control-group-error input[type="tel"],
+.wy-control-group.wy-control-group-error input[type="text"],
+.wy-control-group.wy-control-group-error input[type="time"],
+.wy-control-group.wy-control-group-error input[type="url"],
+.wy-control-group.wy-control-group-error input[type="week"],
+.wy-control-group.wy-control-group-error textarea {
+  border: 1px solid #e74c3c;
+}
+.wy-inline-validate {
+  white-space: nowrap;
+}
+.wy-inline-validate .wy-input-context {
+  padding: 0.5em 0.625em;
+  display: inline-block;
+  font-size: 80%;
+}
+.wy-inline-validate.wy-inline-validate-success .wy-input-context {
+  color: #27ae60;
+}
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context {
+  color: #e74c3c;
+}
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context {
+  color: #e67e22;
+}
+.wy-inline-validate.wy-inline-validate-info .wy-input-context {
+  color: #2980b9;
+}
+.rotate-90 {
+  -webkit-transform: rotate(90deg);
+  -moz-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  -o-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.rotate-180 {
+  -webkit-transform: rotate(180deg);
+  -moz-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  -o-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.rotate-270 {
+  -webkit-transform: rotate(270deg);
+  -moz-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  -o-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.mirror {
+  -webkit-transform: scaleX(-1);
+  -moz-transform: scaleX(-1);
+  -ms-transform: scaleX(-1);
+  -o-transform: scaleX(-1);
+  transform: scaleX(-1);
+}
+.mirror.rotate-90 {
+  -webkit-transform: scaleX(-1) rotate(90deg);
+  -moz-transform: scaleX(-1) rotate(90deg);
+  -ms-transform: scaleX(-1) rotate(90deg);
+  -o-transform: scaleX(-1) rotate(90deg);
+  transform: scaleX(-1) rotate(90deg);
+}
+.mirror.rotate-180 {
+  -webkit-transform: scaleX(-1) rotate(180deg);
+  -moz-transform: scaleX(-1) rotate(180deg);
+  -ms-transform: scaleX(-1) rotate(180deg);
+  -o-transform: scaleX(-1) rotate(180deg);
+  transform: scaleX(-1) rotate(180deg);
+}
+.mirror.rotate-270 {
+  -webkit-transform: scaleX(-1) rotate(270deg);
+  -moz-transform: scaleX(-1) rotate(270deg);
+  -ms-transform: scaleX(-1) rotate(270deg);
+  -o-transform: scaleX(-1) rotate(270deg);
+  transform: scaleX(-1) rotate(270deg);
+}
+@media only screen and (max-width: 480px) {
+  .wy-form button[type="submit"] {
+    margin: 0.7em 0 0;
+  }
+  .wy-form input[type="color"],
+  .wy-form input[type="date"],
+  .wy-form input[type="datetime-local"],
+  .wy-form input[type="datetime"],
+  .wy-form input[type="email"],
+  .wy-form input[type="month"],
+  .wy-form input[type="number"],
+  .wy-form input[type="password"],
+  .wy-form input[type="search"],
+  .wy-form input[type="tel"],
+  .wy-form input[type="text"],
+  .wy-form input[type="time"],
+  .wy-form input[type="url"],
+  .wy-form input[type="week"],
+  .wy-form label {
+    margin-bottom: 0.3em;
+    display: block;
+  }
+  .wy-form input[type="color"],
+  .wy-form input[type="date"],
+  .wy-form input[type="datetime-local"],
+  .wy-form input[type="datetime"],
+  .wy-form input[type="email"],
+  .wy-form input[type="month"],
+  .wy-form input[type="number"],
+  .wy-form input[type="password"],
+  .wy-form input[type="search"],
+  .wy-form input[type="tel"],
+  .wy-form input[type="time"],
+  .wy-form input[type="url"],
+  .wy-form input[type="week"] {
+    margin-bottom: 0;
+  }
+  .wy-form-aligned .wy-control-group label {
+    margin-bottom: 0.3em;
+    text-align: left;
+    display: block;
+    width: 100%;
+  }
+  .wy-form-aligned .wy-control {
+    margin: 1.5em 0 0;
+  }
+  .wy-form-message,
+  .wy-form-message-inline,
+  .wy-form .wy-help-inline {
+    display: block;
+    font-size: 80%;
+    padding: 6px 0;
+  }
+}
+@media screen and (max-width: 768px) {
+  .tablet-hide {
+    display: none;
+  }
+}
+@media screen and (max-width: 480px) {
+  .mobile-hide {
+    display: none;
+  }
+}
+.float-left {
+  float: left;
+}
+.float-right {
+  float: right;
+}
+.full-width {
+  width: 100%;
+}
+.rst-content table.docutils,
+.rst-content table.field-list,
+.wy-table {
+  border-collapse: collapse;
+  border-spacing: 0;
+  empty-cells: show;
+  margin-bottom: 24px;
+}
+.rst-content table.docutils caption,
+.rst-content table.field-list caption,
+.wy-table caption {
+  color: #000;
+  font-style: italic;
+  font-size: 85%;
+  padding: 1em 0;
+  text-align: center;
+}
+.rst-content table.docutils td,
+.rst-content table.docutils th,
+.rst-content table.field-list td,
+.rst-content table.field-list th,
+.wy-table td,
+.wy-table th {
+  font-size: 90%;
+  margin: 0;
+  overflow: visible;
+  padding: 8px 16px;
+}
+.rst-content table.docutils td:first-child,
+.rst-content table.docutils th:first-child,
+.rst-content table.field-list td:first-child,
+.rst-content table.field-list th:first-child,
+.wy-table td:first-child,
+.wy-table th:first-child {
+  border-left-width: 0;
+}
+.rst-content table.docutils thead,
+.rst-content table.field-list thead,
+.wy-table thead {
+  color: #000;
+  text-align: left;
+  vertical-align: bottom;
+  white-space: nowrap;
+}
+.rst-content table.docutils thead th,
+.rst-content table.field-list thead th,
+.wy-table thead th {
+  font-weight: 700;
+  border-bottom: 2px solid #e1e4e5;
+}
+.rst-content table.docutils td,
+.rst-content table.field-list td,
+.wy-table td {
+  background-color: transparent;
+  vertical-align: middle;
+}
+.rst-content table.docutils td p,
+.rst-content table.field-list td p,
+.wy-table td p {
+  line-height: 18px;
+}
+.rst-content table.docutils td p:last-child,
+.rst-content table.field-list td p:last-child,
+.wy-table td p:last-child {
+  margin-bottom: 0;
+}
+.rst-content table.docutils .wy-table-cell-min,
+.rst-content table.field-list .wy-table-cell-min,
+.wy-table .wy-table-cell-min {
+  width: 1%;
+  padding-right: 0;
+}
+.rst-content table.docutils .wy-table-cell-min input[type="checkbox"],
+.rst-content table.field-list .wy-table-cell-min input[type="checkbox"],
+.wy-table .wy-table-cell-min input[type="checkbox"] {
+  margin: 0;
+}
+.wy-table-secondary {
+  color: grey;
+  font-size: 90%;
+}
+.wy-table-tertiary {
+  color: grey;
+  font-size: 80%;
+}
+.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,
+.wy-table-backed,
+.wy-table-odd td,
+.wy-table-striped tr:nth-child(2n-1) td {
+  background-color: #f3f6f6;
+}
+.rst-content table.docutils,
+.wy-table-bordered-all {
+  border: 1px solid #e1e4e5;
+}
+.rst-content table.docutils td,
+.wy-table-bordered-all td {
+  border-bottom: 1px solid #e1e4e5;
+  border-left: 1px solid #e1e4e5;
+}
+.rst-content table.docutils tbody > tr:last-child td,
+.wy-table-bordered-all tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-bordered {
+  border: 1px solid #e1e4e5;
+}
+.wy-table-bordered-rows td {
+  border-bottom: 1px solid #e1e4e5;
+}
+.wy-table-bordered-rows tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-horizontal td,
+.wy-table-horizontal th {
+  border-width: 0 0 1px;
+  border-bottom: 1px solid #e1e4e5;
+}
+.wy-table-horizontal tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-responsive {
+  margin-bottom: 24px;
+  max-width: 100%;
+  overflow: auto;
+}
+.wy-table-responsive table {
+  margin-bottom: 0 !important;
+}
+.wy-table-responsive table td,
+.wy-table-responsive table th {
+  white-space: nowrap;
+}
+a {
+  color: #2980b9;
+  text-decoration: none;
+  cursor: pointer;
+}
+a:hover {
+  color: #3091d1;
+}
+a:visited {
+  color: #2980b9;
+}
+html {
+  height: 100%;
+}
+body,
+html {
+  overflow-x: hidden;
+}
+body {
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  font-weight: 400;
+  color: #404040;
+  min-height: 100%;
+  background: #edf0f2;
+}
+.wy-text-left {
+  text-align: left;
+}
+.wy-text-center {
+  text-align: center;
+}
+.wy-text-right {
+  text-align: right;
+}
+.wy-text-large {
+  font-size: 120%;
+}
+.wy-text-normal {
+  font-size: 100%;
+}
+.wy-text-small,
+small {
+  font-size: 80%;
+}
+.wy-text-strike {
+  text-decoration: line-through;
+}
+.wy-text-warning {
+  color: #e67e22 !important;
+}
+a.wy-text-warning:hover {
+  color: #eb9950 !important;
+}
+.wy-text-info {
+  color: #2980b9 !important;
+}
+a.wy-text-info:hover {
+  color: #409ad5 !important;
+}
+.wy-text-success {
+  color: #27ae60 !important;
+}
+a.wy-text-success:hover {
+  color: #36d278 !important;
+}
+.wy-text-danger {
+  color: #e74c3c !important;
+}
+a.wy-text-danger:hover {
+  color: #ed7669 !important;
+}
+.wy-text-neutral {
+  color: #404040 !important;
+}
+a.wy-text-neutral:hover {
+  color: #595959 !important;
+}
+.rst-content .toctree-wrapper > p.caption,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+legend {
+  margin-top: 0;
+  font-weight: 700;
+  font-family: Helvetica, Arial, sans-serif, ff-tisa-web-pro, Georgia;
+}
+p {
+  line-height: 24px;
+  font-size: 16px;
+  margin: 0 0 24px;
+}
+h1 {
+  font-size: 175%;
+}
+.rst-content .toctree-wrapper > p.caption,
+h2 {
+  font-size: 150%;
+}
+h3 {
+  font-size: 125%;
+}
+h4 {
+  font-size: 115%;
+}
+h5 {
+  font-size: 110%;
+}
+h6 {
+  font-size: 100%;
+}
+hr {
+  display: block;
+  height: 1px;
+  border: 0;
+  border-top: 1px solid #e1e4e5;
+  margin: 24px 0;
+  padding: 0;
+}
+.rst-content code,
+.rst-content tt,
+code {
+  white-space: nowrap;
+  max-width: 100%;
+  background: #fff;
+  border: 1px solid #e1e4e5;
+  font-size: 75%;
+  padding: 0 5px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  color: #E60000;
+  overflow-x: auto;
+}
+.rst-content tt.code-large,
+code.code-large {
+  font-size: 90%;
+}
+.rst-content .section ul,
+.rst-content .toctree-wrapper ul,
+.wy-plain-list-disc,
+article ul {
+  list-style: disc;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content .section ul li,
+.rst-content .toctree-wrapper ul li,
+.wy-plain-list-disc li,
+article ul li {
+  list-style: disc;
+  margin-left: 24px;
+}
+.rst-content .section ul li p:last-child,
+.rst-content .section ul li ul,
+.rst-content .toctree-wrapper ul li p:last-child,
+.rst-content .toctree-wrapper ul li ul,
+.wy-plain-list-disc li p:last-child,
+.wy-plain-list-disc li ul,
+article ul li p:last-child,
+article ul li ul {
+  margin-bottom: 0;
+}
+.rst-content .section ul li li,
+.rst-content .toctree-wrapper ul li li,
+.wy-plain-list-disc li li,
+article ul li li {
+  list-style: circle;
+}
+.rst-content .section ul li li li,
+.rst-content .toctree-wrapper ul li li li,
+.wy-plain-list-disc li li li,
+article ul li li li {
+  list-style: square;
+}
+.rst-content .section ul li ol li,
+.rst-content .toctree-wrapper ul li ol li,
+.wy-plain-list-disc li ol li,
+article ul li ol li {
+  list-style: decimal;
+}
+.rst-content .section ol,
+.rst-content ol.arabic,
+.wy-plain-list-decimal,
+article ol {
+  list-style: decimal;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content .section ol li,
+.rst-content ol.arabic li,
+.wy-plain-list-decimal li,
+article ol li {
+  list-style: decimal;
+  margin-left: 24px;
+}
+.rst-content .section ol li p:last-child,
+.rst-content .section ol li ul,
+.rst-content ol.arabic li p:last-child,
+.rst-content ol.arabic li ul,
+.wy-plain-list-decimal li p:last-child,
+.wy-plain-list-decimal li ul,
+article ol li p:last-child,
+article ol li ul {
+  margin-bottom: 0;
+}
+.rst-content .section ol li ul li,
+.rst-content ol.arabic li ul li,
+.wy-plain-list-decimal li ul li,
+article ol li ul li {
+  list-style: disc;
+}
+.wy-breadcrumbs {
+  *zoom: 1;
+}
+.wy-breadcrumbs:after,
+.wy-breadcrumbs:before {
+  display: table;
+  content: "";
+}
+.wy-breadcrumbs:after {
+  clear: both;
+}
+.wy-breadcrumbs li {
+  display: inline-block;
+}
+.wy-breadcrumbs li.wy-breadcrumbs-aside {
+  float: right;
+}
+.wy-breadcrumbs li a {
+  display: inline-block;
+  padding: 5px;
+}
+
+.wy-breadcrumbs li a:before {
+  font-weight: bold;
+  color: #000000;
+  content: "//";
+}
+.wy-breadcrumbs li a:first-child {
+  padding-left: 0;
+}
+
+.rst-content .wy-breadcrumbs li tt,
+.wy-breadcrumbs li .rst-content tt,
+.wy-breadcrumbs li code {
+  padding: 5px;
+  border: none;
+  background: none;
+}
+.rst-content .wy-breadcrumbs li tt.literal,
+.wy-breadcrumbs li .rst-content tt.literal,
+.wy-breadcrumbs li code.literal {
+  color: #E60000;
+}
+.wy-breadcrumbs-extra {
+  margin-bottom: 0;
+  color: #b3b3b3;
+  font-size: 80%;
+  display: inline-block;
+}
+@media screen and (max-width: 480px) {
+  .wy-breadcrumbs-extra,
+  .wy-breadcrumbs li.wy-breadcrumbs-aside {
+    display: none;
+  }
+}
+@media print {
+  .wy-breadcrumbs li.wy-breadcrumbs-aside {
+    display: none;
+  }
+}
+html {
+  font-size: 16px;
+}
+.wy-affix {
+  position: fixed;
+  top: 1.618em;
+}
+.wy-menu a:hover {
+  text-decoration: none;
+}
+.wy-menu-horiz {
+  *zoom: 1;
+}
+.wy-menu-horiz:after,
+.wy-menu-horiz:before {
+  display: table;
+  content: "";
+}
+.wy-menu-horiz:after {
+  clear: both;
+}
+.wy-menu-horiz li,
+.wy-menu-horiz ul {
+  display: inline-block;
+}
+.wy-menu-horiz li:hover {
+  background: hsla(0, 0%, 100%, 0.1);
+}
+.wy-menu-horiz li.divide-left {
+  border-left: 1px solid #404040;
+}
+.wy-menu-horiz li.divide-right {
+  border-right: 1px solid #404040;
+}
+.wy-menu-horiz a {
+  height: 32px;
+  display: inline-block;
+  line-height: 32px;
+  padding: 0 16px;
+}
+.wy-menu-vertical {
+  width: 300px;
+}
+.wy-menu-vertical header,
+.wy-menu-vertical p.caption::before {
+    font-weight: normal;
+    letter-spacing: .1rem;
+    color: #E60000;
+    font-size: 120%;
+    content: "// ";
+  }
+.wy-menu-vertical p.caption {
+  color: #ffffff;
+  height: 32px;
+  line-height: 32px;
+  padding: 0 1.618em;
+  margin: 12px 0 0;
+  display: block;
+  font-weight: 400;
+  text-transform: uppercase;
+  font-size: 85%;
+  white-space: nowrap;
+}
+.wy-menu-vertical ul {
+  margin-bottom: 0;
+}
+.wy-menu-vertical li.divide-top {
+  border-top: 1px solid #404040;
+}
+.wy-menu-vertical li.divide-bottom {
+  border-bottom: 1px solid #404040;
+}
+.wy-menu-vertical li.current {
+  background: #e3e3e3;
+}
+.wy-menu-vertical li.current a {
+  color: grey;
+  border-right: 1px solid #c9c9c9;
+  padding: 0.4045em 2.427em;
+}
+.wy-menu-vertical li.current a:hover {
+  background: #d6d6d6;
+}
+.rst-content .wy-menu-vertical li tt,
+.wy-menu-vertical li .rst-content tt,
+.wy-menu-vertical li code {
+  border: none;
+  background: inherit;
+  color: inherit;
+  padding-left: 0;
+  padding-right: 0;
+}
+.wy-menu-vertical li span.toctree-expand {
+  display: block;
+  float: left;
+  margin-left: -1.2em;
+  font-size: 0.8em;
+  line-height: 1.6em;
+  color: #4d4d4d;
+}
+.wy-menu-vertical li.current > a,
+.wy-menu-vertical li.on a {
+  color: #404040;
+  font-weight: 700;
+  position: relative;
+  background: #fcfcfc;
+  border: none;
+  padding: 0.4045em 1.618em;
+}
+.wy-menu-vertical li.current > a:hover,
+.wy-menu-vertical li.on a:hover {
+  background: #fcfcfc;
+}
+.wy-menu-vertical li.current > a:hover span.toctree-expand,
+.wy-menu-vertical li.on a:hover span.toctree-expand {
+  color: grey;
+}
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand {
+  display: block;
+  font-size: 0.8em;
+  line-height: 1.6em;
+  color: #333;
+}
+.wy-menu-vertical li.toctree-l1.current > a {
+  border-bottom: 1px solid #c9c9c9;
+  border-top: 1px solid #c9c9c9;
+}
+.wy-menu-vertical .toctree-l1.current .toctree-l2 > ul,
+.wy-menu-vertical .toctree-l2.current .toctree-l3 > ul,
+.wy-menu-vertical .toctree-l3.current .toctree-l4 > ul,
+.wy-menu-vertical .toctree-l4.current .toctree-l5 > ul,
+.wy-menu-vertical .toctree-l5.current .toctree-l6 > ul,
+.wy-menu-vertical .toctree-l6.current .toctree-l7 > ul,
+.wy-menu-vertical .toctree-l7.current .toctree-l8 > ul,
+.wy-menu-vertical .toctree-l8.current .toctree-l9 > ul,
+.wy-menu-vertical .toctree-l9.current .toctree-l10 > ul,
+.wy-menu-vertical .toctree-l10.current .toctree-l11 > ul {
+  display: none;
+}
+.wy-menu-vertical .toctree-l1.current .current.toctree-l2 > ul,
+.wy-menu-vertical .toctree-l2.current .current.toctree-l3 > ul,
+.wy-menu-vertical .toctree-l3.current .current.toctree-l4 > ul,
+.wy-menu-vertical .toctree-l4.current .current.toctree-l5 > ul,
+.wy-menu-vertical .toctree-l5.current .current.toctree-l6 > ul,
+.wy-menu-vertical .toctree-l6.current .current.toctree-l7 > ul,
+.wy-menu-vertical .toctree-l7.current .current.toctree-l8 > ul,
+.wy-menu-vertical .toctree-l8.current .current.toctree-l9 > ul,
+.wy-menu-vertical .toctree-l9.current .current.toctree-l10 > ul,
+.wy-menu-vertical .toctree-l10.current .current.toctree-l11 > ul {
+  display: block;
+}
+.wy-menu-vertical li.toctree-l3,
+.wy-menu-vertical li.toctree-l4 {
+  font-size: 0.9em;
+}
+.wy-menu-vertical li.toctree-l2 a,
+.wy-menu-vertical li.toctree-l3 a,
+.wy-menu-vertical li.toctree-l4 a,
+.wy-menu-vertical li.toctree-l5 a,
+.wy-menu-vertical li.toctree-l6 a,
+.wy-menu-vertical li.toctree-l7 a,
+.wy-menu-vertical li.toctree-l8 a,
+.wy-menu-vertical li.toctree-l9 a,
+.wy-menu-vertical li.toctree-l10 a {
+  color: #404040;
+}
+.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand {
+  color: grey;
+}
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a,
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a,
+.wy-menu-vertical li.toctree-l4.current li.toctree-l5 > a,
+.wy-menu-vertical li.toctree-l5.current li.toctree-l6 > a,
+.wy-menu-vertical li.toctree-l6.current li.toctree-l7 > a,
+.wy-menu-vertical li.toctree-l7.current li.toctree-l8 > a,
+.wy-menu-vertical li.toctree-l8.current li.toctree-l9 > a,
+.wy-menu-vertical li.toctree-l9.current li.toctree-l10 > a,
+.wy-menu-vertical li.toctree-l10.current li.toctree-l11 > a {
+  display: block;
+}
+.wy-menu-vertical li.toctree-l2.current > a {
+  padding: 0.4045em 2.427em;
+}
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a,
+.wy-menu-vertical li.toctree-l3.current > a {
+  padding: 0.4045em 4.045em;
+}
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a,
+.wy-menu-vertical li.toctree-l4.current > a {
+  padding: 0.4045em 5.663em;
+}
+.wy-menu-vertical li.toctree-l4.current li.toctree-l5 > a,
+.wy-menu-vertical li.toctree-l5.current > a {
+  padding: 0.4045em 7.281em;
+}
+.wy-menu-vertical li.toctree-l5.current li.toctree-l6 > a,
+.wy-menu-vertical li.toctree-l6.current > a {
+  padding: 0.4045em 8.899em;
+}
+.wy-menu-vertical li.toctree-l6.current li.toctree-l7 > a,
+.wy-menu-vertical li.toctree-l7.current > a {
+  padding: 0.4045em 10.517em;
+}
+.wy-menu-vertical li.toctree-l7.current li.toctree-l8 > a,
+.wy-menu-vertical li.toctree-l8.current > a {
+  padding: 0.4045em 12.135em;
+}
+.wy-menu-vertical li.toctree-l8.current li.toctree-l9 > a,
+.wy-menu-vertical li.toctree-l9.current > a {
+  padding: 0.4045em 13.753em;
+}
+.wy-menu-vertical li.toctree-l9.current li.toctree-l10 > a,
+.wy-menu-vertical li.toctree-l10.current > a {
+  padding: 0.4045em 15.371em;
+}
+.wy-menu-vertical li.toctree-l10.current li.toctree-l11 > a {
+  padding: 0.4045em 16.989em;
+}
+.wy-menu-vertical li.toctree-l2.current > a,
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a {
+  background: #c9c9c9;
+}
+.wy-menu-vertical li.toctree-l2 span.toctree-expand {
+  color: #a3a3a3;
+}
+.wy-menu-vertical li.toctree-l3.current > a,
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a {
+  background: #bdbdbd;
+}
+.wy-menu-vertical li.toctree-l3 span.toctree-expand {
+  color: #969696;
+}
+.wy-menu-vertical li.current ul {
+  display: block;
+}
+.wy-menu-vertical li ul {
+  margin-bottom: 0;
+  display: none;
+}
+.wy-menu-vertical li ul li a {
+  margin-bottom: 0;
+  color: #d9d9d9;
+  font-weight: 400;
+}
+.wy-menu-vertical a {
+  line-height: 18px;
+  padding: 0.4045em 1.618em;
+  display: block;
+  position: relative;
+  font-size: 90%;
+  color: #d9d9d9;
+}
+.wy-menu-vertical a:hover {
+  background-color: #4e4a4a;
+  cursor: pointer;
+}
+.wy-menu-vertical a:hover span.toctree-expand {
+  color: #d9d9d9;
+}
+.wy-menu-vertical a:active {
+  background-color: #000000;
+  cursor: pointer;
+  color: #fff;
+}
+.wy-menu-vertical a:active span.toctree-expand {
+  color: #fff;
+}
+.wy-side-nav-search {
+  display: block;
+  width: 300px;
+  padding: 0.809em;
+  margin-bottom: 0.809em;
+  z-index: 200;
+  background-color: #262626;
+  text-align: center;
+  color: #fcfcfc;
+}
+.wy-side-nav-search input[type="text"] {
+  width: 100%;
+  border-radius: 50px;
+  padding: 6px 12px;
+  border-color: #000000;
+}
+.wy-side-nav-search img {
+  display: block;
+  margin: auto auto 0.809em;
+  height: 45px;
+  width: 45px;
+  background-color: #666666;
+  padding: 5px;
+  border-radius: 100%;
+}
+.wy-side-nav-search .wy-dropdown > a,
+.wy-side-nav-search > a {
+  color: #fcfcfc;
+  font-size: 100%;
+  font-weight: 700;
+  display: inline-block;
+  padding: 4px 6px;
+  margin-bottom: 0.809em;
+}
+.wy-side-nav-search .wy-dropdown > a:hover,
+.wy-side-nav-search > a:hover {
+  background: hsla(0, 0%, 100%, 0.1);
+}
+.wy-side-nav-search .wy-dropdown > a img.logo,
+.wy-side-nav-search > a img.logo {
+  display: block;
+  margin: 0 auto;
+  height: auto;
+  width: auto;
+  border-radius: 0;
+  max-width: 100%;
+  background: transparent;
+}
+.wy-side-nav-search .wy-dropdown > a.icon img.logo,
+.wy-side-nav-search > a.icon img.logo {
+  margin-top: 0.85em;
+}
+.wy-side-nav-search > div.version {
+  margin-top: -0.4045em;
+  margin-bottom: 0.809em;
+  font-weight: 400;
+  color: #ffffff;
+}
+.wy-nav .wy-menu-vertical header {
+  color: #666666;
+}
+.wy-nav .wy-menu-vertical a {
+  color: #b3b3b3;
+}
+.wy-nav .wy-menu-vertical a:hover {
+  background-color: #000000;
+  color: #fff;
+}
+[data-menu-wrap] {
+  -webkit-transition: all 0.2s ease-in;
+  -moz-transition: all 0.2s ease-in;
+  transition: all 0.2s ease-in;
+  position: absolute;
+  opacity: 1;
+  width: 100%;
+  opacity: 0;
+}
+[data-menu-wrap].move-center {
+  left: 0;
+  right: auto;
+  opacity: 1;
+}
+[data-menu-wrap].move-left {
+  right: auto;
+  left: -100%;
+  opacity: 0;
+}
+[data-menu-wrap].move-right {
+  right: -100%;
+  left: auto;
+  opacity: 0;
+}
+.wy-body-for-nav {
+  background: #fcfcfc;
+}
+.wy-grid-for-nav {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+}
+.wy-nav-side {
+  position: fixed;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  padding-bottom: 2em;
+  width: 300px;
+  overflow-x: hidden;
+  overflow-y: hidden;
+  min-height: 100%;
+  color: #9b9b9b;
+  background: #000000;
+  z-index: 200;
+}
+.wy-side-scroll {
+  width: 320px;
+  position: relative;
+  overflow-x: hidden;
+  overflow-y: scroll;
+  height: 100%;
+}
+.wy-nav-top {
+  display: none;
+  background: #262626;
+  color: #fff;
+  padding: 0.4045em 0.809em;
+  position: relative;
+  line-height: 50px;
+  text-align: center;
+  font-size: 100%;
+  *zoom: 1;
+}
+.wy-nav-top:after,
+.wy-nav-top:before {
+  display: table;
+  content: "";
+}
+.wy-nav-top:after {
+  clear: both;
+}
+.wy-nav-top a {
+  color: #fff;
+  font-weight: 700;
+}
+.wy-nav-top img {
+  margin-right: 12px;
+  height: 45px;
+  width: 45px;
+  background-color: #666666;
+  padding: 5px;
+  border-radius: 100%;
+}
+.wy-nav-top i {
+  font-size: 30px;
+  float: left;
+  cursor: pointer;
+  padding-top: inherit;
+}
+.wy-nav-content-wrap {
+  margin-left: 300px;
+  background: #fcfcfc;
+  min-height: 100%;
+}
+.wy-nav-content {
+  padding: 1.618em 3.236em;
+  height: 100%;
+  max-width: 800px;
+  margin: auto;
+}
+.wy-body-mask {
+  position: fixed;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.2);
+  display: none;
+  z-index: 499;
+}
+.wy-body-mask.on {
+  display: block;
+}
+footer {
+  color: grey;
+}
+footer p {
+  margin-bottom: 12px;
+}
+.rst-content footer span.commit tt,
+footer span.commit .rst-content tt,
+footer span.commit code {
+  padding: 0;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  font-size: 1em;
+  background: none;
+  border: none;
+  color: grey;
+}
+.rst-footer-buttons {
+  *zoom: 1;
+}
+.rst-footer-buttons:after,
+.rst-footer-buttons:before {
+  width: 100%;
+  display: table;
+  content: "";
+}
+.rst-footer-buttons:after {
+  clear: both;
+}
+.rst-breadcrumbs-buttons {
+  margin-top: 12px;
+  *zoom: 1;
+}
+.rst-breadcrumbs-buttons:after,
+.rst-breadcrumbs-buttons:before {
+  display: table;
+  content: "";
+}
+.rst-breadcrumbs-buttons:after {
+  clear: both;
+}
+#search-results .search li {
+  margin-bottom: 24px;
+  border-bottom: 1px solid #e1e4e5;
+  padding-bottom: 24px;
+}
+#search-results .search li:first-child {
+  border-top: 1px solid #e1e4e5;
+  padding-top: 24px;
+}
+#search-results .search li a {
+  font-size: 120%;
+  margin-bottom: 12px;
+  display: inline-block;
+}
+#search-results .context {
+  color: grey;
+  font-size: 90%;
+}
+.genindextable li > ul {
+  margin-left: 24px;
+}
+@media screen and (max-width: 768px) {
+  .wy-body-for-nav {
+    background: #ffffff;
+  }
+  .wy-nav-top {
+    display: block;
+  }
+  .wy-nav-side {
+    left: -300px;
+  }
+  .wy-nav-side.shift {
+    width: 85%;
+    left: 0;
+  }
+  .wy-menu.wy-menu-vertical,
+  .wy-side-nav-search,
+  .wy-side-scroll {
+    width: auto;
+  }
+  .wy-nav-content-wrap {
+    margin-left: 0;
+  }
+  .wy-nav-content-wrap .wy-nav-content {
+    padding: 1.618em;
+  }
+  .wy-nav-content-wrap.shift {
+    position: fixed;
+    min-width: 100%;
+    left: 85%;
+    top: 0;
+    height: 100%;
+    overflow: hidden;
+  }
+}
+@media screen and (min-width: 1100px) {
+  .wy-nav-content-wrap {
+    background: #ffffff;
+  }
+  .wy-nav-content {
+    margin: 0;
+    background: #ffffff;
+  }
+}
+@media print {
+  .rst-versions,
+  .wy-nav-side,
+  footer {
+    display: none;
+  }
+  .wy-nav-content-wrap {
+    margin-left: 0;
+  }
+}
+.rst-versions {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 300px;
+  color: #fcfcfc;
+  background: #1f1d1d;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  z-index: 400;
+}
+.rst-versions a {
+  color: #2980b9;
+  text-decoration: none;
+}
+.rst-versions .rst-badge-small {
+  display: none;
+}
+.rst-versions .rst-current-version {
+  padding: 12px;
+  background-color: #272525;
+  display: block;
+  text-align: right;
+  font-size: 90%;
+  cursor: pointer;
+  color: #27ae60;
+  *zoom: 1;
+}
+.rst-versions .rst-current-version:after,
+.rst-versions .rst-current-version:before {
+  display: table;
+  content: "";
+}
+.rst-versions .rst-current-version:after {
+  clear: both;
+}
+.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,
+.rst-content .rst-versions .rst-current-version .admonition-title,
+.rst-content code.download .rst-versions .rst-current-version span:first-child,
+.rst-content dl dt .rst-versions .rst-current-version .headerlink,
+.rst-content h1 .rst-versions .rst-current-version .headerlink,
+.rst-content h2 .rst-versions .rst-current-version .headerlink,
+.rst-content h3 .rst-versions .rst-current-version .headerlink,
+.rst-content h4 .rst-versions .rst-current-version .headerlink,
+.rst-content h5 .rst-versions .rst-current-version .headerlink,
+.rst-content h6 .rst-versions .rst-current-version .headerlink,
+.rst-content p.caption .rst-versions .rst-current-version .headerlink,
+.rst-content table > caption .rst-versions .rst-current-version .headerlink,
+.rst-content tt.download .rst-versions .rst-current-version span:first-child,
+.rst-versions .rst-current-version .fa,
+.rst-versions .rst-current-version .icon,
+.rst-versions .rst-current-version .rst-content .admonition-title,
+.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,
+.rst-versions .rst-current-version .rst-content code.download span:first-child,
+.rst-versions .rst-current-version .rst-content dl dt .headerlink,
+.rst-versions .rst-current-version .rst-content h1 .headerlink,
+.rst-versions .rst-current-version .rst-content h2 .headerlink,
+.rst-versions .rst-current-version .rst-content h3 .headerlink,
+.rst-versions .rst-current-version .rst-content h4 .headerlink,
+.rst-versions .rst-current-version .rst-content h5 .headerlink,
+.rst-versions .rst-current-version .rst-content h6 .headerlink,
+.rst-versions .rst-current-version .rst-content p.caption .headerlink,
+.rst-versions .rst-current-version .rst-content table > caption .headerlink,
+.rst-versions .rst-current-version .rst-content tt.download span:first-child,
+.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,
+.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand {
+  color: #fcfcfc;
+}
+.rst-versions .rst-current-version .fa-book,
+.rst-versions .rst-current-version .icon-book {
+  float: left;
+}
+.rst-versions .rst-current-version.rst-out-of-date {
+  background-color: #e74c3c;
+  color: #fff;
+}
+.rst-versions .rst-current-version.rst-active-old-version {
+  background-color: #f1c40f;
+  color: #000;
+}
+.rst-versions.shift-up {
+  height: auto;
+  max-height: 100%;
+  overflow-y: scroll;
+}
+.rst-versions.shift-up .rst-other-versions {
+  display: block;
+}
+.rst-versions .rst-other-versions {
+  font-size: 90%;
+  padding: 12px;
+  color: grey;
+  display: none;
+}
+.rst-versions .rst-other-versions hr {
+  display: block;
+  height: 1px;
+  border: 0;
+  margin: 20px 0;
+  padding: 0;
+  border-top: 1px solid #413d3d;
+}
+.rst-versions .rst-other-versions dd {
+  display: inline-block;
+  margin: 0;
+}
+.rst-versions .rst-other-versions dd a {
+  display: inline-block;
+  padding: 6px;
+  color: #fcfcfc;
+}
+.rst-versions.rst-badge {
+  width: auto;
+  bottom: 20px;
+  right: 20px;
+  left: auto;
+  border: none;
+  max-width: 300px;
+  max-height: 90%;
+}
+.rst-versions.rst-badge .fa-book,
+.rst-versions.rst-badge .icon-book {
+  float: none;
+  line-height: 30px;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version {
+  text-align: right;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,
+.rst-versions.rst-badge.shift-up .rst-current-version .icon-book {
+  float: left;
+}
+.rst-versions.rst-badge > .rst-current-version {
+  width: auto;
+  height: 30px;
+  line-height: 30px;
+  padding: 0 6px;
+  display: block;
+  text-align: center;
+}
+@media screen and (max-width: 768px) {
+  .rst-versions {
+    width: 85%;
+    display: none;
+  }
+  .rst-versions.shift {
+    display: block;
+  }
+}
+.rst-content img {
+  max-width: 100%;
+  height: auto;
+}
+.rst-content div.figure {
+  margin-bottom: 24px;
+}
+.rst-content div.figure p.caption {
+  font-style: italic;
+}
+.rst-content div.figure p:last-child.caption {
+  margin-bottom: 0;
+}
+.rst-content div.figure.align-center {
+  text-align: center;
+}
+.rst-content .section > a > img,
+.rst-content .section > img {
+  margin-bottom: 24px;
+}
+.rst-content abbr[title] {
+  text-decoration: none;
+}
+.rst-content.style-external-links a.reference.external:after {
+  font-family: FontAwesome;
+  content: "\f08e";
+  color: #b3b3b3;
+  vertical-align: super;
+  font-size: 60%;
+  margin: 0 0.2em;
+}
+.rst-content blockquote {
+  margin-left: 24px;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content pre.literal-block {
+  white-space: pre;
+  margin: 0;
+  padding: 12px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  display: block;
+  overflow: auto;
+}
+.rst-content div[class^="highlight"],
+.rst-content pre.literal-block {
+  border: 1px solid #e1e4e5;
+  overflow-x: auto;
+  margin: 1px 0 24px;
+}
+.rst-content div[class^="highlight"] div[class^="highlight"],
+.rst-content pre.literal-block div[class^="highlight"] {
+  padding: 0;
+  border: none;
+  margin: 0;
+}
+.rst-content div[class^="highlight"] td.code {
+  width: 100%;
+}
+.rst-content .linenodiv pre {
+  border-right: 1px solid #e6e9ea;
+  margin: 0;
+  padding: 12px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  user-select: none;
+  pointer-events: none;
+}
+.rst-content div[class^="highlight"] pre {
+  white-space: pre;
+  margin: 0;
+  padding: 12px;
+  display: block;
+  overflow: auto;
+}
+.rst-content div[class^="highlight"] pre .hll {
+  display: block;
+  margin: 0 -12px;
+  padding: 0 12px;
+}
+.rst-content .linenodiv pre,
+.rst-content div[class^="highlight"] pre,
+.rst-content pre.literal-block {
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  font-size: 12px;
+  line-height: 1.4;
+}
+.rst-content div.highlight .gp {
+  user-select: none;
+  pointer-events: none;
+}
+.rst-content .code-block-caption {
+  font-style: italic;
+  font-size: 100%;
+  line-height: 1;
+  padding: 1em 0;
+  text-align: center;
+}
+@media print {
+  .rst-content .codeblock,
+  .rst-content div[class^="highlight"],
+  .rst-content div[class^="highlight"] pre {
+    white-space: pre-wrap;
+  }
+}
+.rst-content .admonition,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning {
+  clear: both;
+}
+.rst-content .admonition-todo .last,
+.rst-content .admonition-todo > :last-child,
+.rst-content .admonition .last,
+.rst-content .admonition > :last-child,
+.rst-content .attention .last,
+.rst-content .attention > :last-child,
+.rst-content .caution .last,
+.rst-content .caution > :last-child,
+.rst-content .danger .last,
+.rst-content .danger > :last-child,
+.rst-content .error .last,
+.rst-content .error > :last-child,
+.rst-content .hint .last,
+.rst-content .hint > :last-child,
+.rst-content .important .last,
+.rst-content .important > :last-child,
+.rst-content .note .last,
+.rst-content .note > :last-child,
+.rst-content .seealso .last,
+.rst-content .seealso > :last-child,
+.rst-content .tip .last,
+.rst-content .tip > :last-child,
+.rst-content .warning .last,
+.rst-content .warning > :last-child {
+  margin-bottom: 0;
+}
+.rst-content .admonition-title:before {
+  margin-right: 4px;
+}
+.rst-content .admonition table {
+  border-color: rgba(0, 0, 0, 0.1);
+}
+.rst-content .admonition table td,
+.rst-content .admonition table th {
+  background: transparent !important;
+  border-color: rgba(0, 0, 0, 0.1) !important;
+}
+.rst-content .section ol.loweralpha,
+.rst-content .section ol.loweralpha > li {
+  list-style: lower-alpha;
+}
+.rst-content .section ol.upperalpha,
+.rst-content .section ol.upperalpha > li {
+  list-style: upper-alpha;
+}
+.rst-content .section ol li > *,
+.rst-content .section ul li > * {
+  margin-top: 12px;
+  margin-bottom: 12px;
+}
+.rst-content .section ol li > :first-child,
+.rst-content .section ul li > :first-child {
+  margin-top: 0;
+}
+.rst-content .section ol li > p,
+.rst-content .section ol li > p:last-child,
+.rst-content .section ul li > p,
+.rst-content .section ul li > p:last-child {
+  margin-bottom: 12px;
+}
+.rst-content .section ol li > p:only-child,
+.rst-content .section ol li > p:only-child:last-child,
+.rst-content .section ul li > p:only-child,
+.rst-content .section ul li > p:only-child:last-child {
+  margin-bottom: 0;
+}
+.rst-content .section ol li > ol,
+.rst-content .section ol li > ul,
+.rst-content .section ul li > ol,
+.rst-content .section ul li > ul {
+  margin-bottom: 12px;
+}
+.rst-content .section ol.simple li > *,
+.rst-content .section ol.simple li ol,
+.rst-content .section ol.simple li ul,
+.rst-content .section ul.simple li > *,
+.rst-content .section ul.simple li ol,
+.rst-content .section ul.simple li ul {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.rst-content .line-block {
+  margin-left: 0;
+  margin-bottom: 24px;
+  line-height: 24px;
+}
+.rst-content .line-block .line-block {
+  margin-left: 24px;
+  margin-bottom: 0;
+}
+.rst-content .topic-title {
+  font-weight: 700;
+  margin-bottom: 12px;
+}
+.rst-content .toc-backref {
+  color: #404040;
+}
+.rst-content .align-right {
+  float: right;
+  margin: 0 0 24px 24px;
+}
+.rst-content .align-left {
+  float: left;
+  margin: 0 24px 24px 0;
+}
+.rst-content .align-center {
+  margin: auto;
+}
+.rst-content .align-center:not(table) {
+  display: block;
+}
+.rst-content .code-block-caption .headerlink,
+.rst-content .toctree-wrapper > p.caption .headerlink,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink {
+  visibility: hidden;
+  font-size: 14px;
+}
+.rst-content .code-block-caption .headerlink:after,
+.rst-content .toctree-wrapper > p.caption .headerlink:after,
+.rst-content dl dt .headerlink:after,
+.rst-content h1 .headerlink:after,
+.rst-content h2 .headerlink:after,
+.rst-content h3 .headerlink:after,
+.rst-content h4 .headerlink:after,
+.rst-content h5 .headerlink:after,
+.rst-content h6 .headerlink:after,
+.rst-content p.caption .headerlink:after,
+.rst-content table > caption .headerlink:after {
+  content: "\f0c1";
+  font-family: FontAwesome;
+}
+.rst-content .code-block-caption:hover .headerlink:after,
+.rst-content .toctree-wrapper > p.caption:hover .headerlink:after,
+.rst-content dl dt:hover .headerlink:after,
+.rst-content h1:hover .headerlink:after,
+.rst-content h2:hover .headerlink:after,
+.rst-content h3:hover .headerlink:after,
+.rst-content h4:hover .headerlink:after,
+.rst-content h5:hover .headerlink:after,
+.rst-content h6:hover .headerlink:after,
+.rst-content p.caption:hover .headerlink:after,
+.rst-content table > caption:hover .headerlink:after {
+  visibility: visible;
+}
+.rst-content table > caption .headerlink:after {
+  font-size: 12px;
+}
+.rst-content .centered {
+  text-align: center;
+}
+.rst-content .sidebar {
+  float: right;
+  width: 40%;
+  display: block;
+  margin: 0 0 24px 24px;
+  padding: 24px;
+  background: #f3f6f6;
+  border: 1px solid #e1e4e5;
+}
+.rst-content .sidebar dl,
+.rst-content .sidebar p,
+.rst-content .sidebar ul {
+  font-size: 90%;
+}
+.rst-content .sidebar .last,
+.rst-content .sidebar > :last-child {
+  margin-bottom: 0;
+}
+.rst-content .sidebar .sidebar-title {
+  display: block;
+  font-family: Roboto Slab, ff-tisa-web-pro, Georgia, Arial, sans-serif;
+  font-weight: 700;
+  background: #e1e4e5;
+  padding: 6px 12px;
+  margin: -24px -24px 24px;
+  font-size: 100%;
+}
+.rst-content .highlighted {
+  background: #f1c40f;
+  box-shadow: 0 0 0 2px #f1c40f;
+  display: inline;
+  font-weight: 700;
+}
+.rst-content .citation-reference,
+.rst-content .footnote-reference {
+  vertical-align: baseline;
+  position: relative;
+  top: -0.4em;
+  line-height: 0;
+  font-size: 90%;
+}
+.rst-content .hlist {
+  width: 100%;
+}
+html.writer-html4 .rst-content table.docutils.citation,
+html.writer-html4 .rst-content table.docutils.footnote {
+  background: none;
+  border: none;
+}
+html.writer-html4 .rst-content table.docutils.citation td,
+html.writer-html4 .rst-content table.docutils.citation tr,
+html.writer-html4 .rst-content table.docutils.footnote td,
+html.writer-html4 .rst-content table.docutils.footnote tr {
+  border: none;
+  background-color: transparent !important;
+  white-space: normal;
+}
+html.writer-html4 .rst-content table.docutils.citation td.label,
+html.writer-html4 .rst-content table.docutils.footnote td.label {
+  padding-left: 0;
+  padding-right: 0;
+  vertical-align: top;
+}
+html.writer-html5 .rst-content dl dt span.classifier:before {
+  content: " : ";
+}
+html.writer-html5 .rst-content dl.field-list,
+html.writer-html5 .rst-content dl.footnote {
+  display: grid;
+  grid-template-columns: max-content auto;
+}
+html.writer-html5 .rst-content dl.field-list > dt,
+html.writer-html5 .rst-content dl.footnote > dt {
+  padding-left: 1rem;
+}
+html.writer-html5 .rst-content dl.field-list > dt:after,
+html.writer-html5 .rst-content dl.footnote > dt:after {
+  content: ":";
+}
+html.writer-html5 .rst-content dl.field-list > dd,
+html.writer-html5 .rst-content dl.field-list > dt,
+html.writer-html5 .rst-content dl.footnote > dd,
+html.writer-html5 .rst-content dl.footnote > dt {
+  margin-bottom: 0;
+}
+html.writer-html5 .rst-content dl.footnote {
+  font-size: 0.9rem;
+}
+html.writer-html5 .rst-content dl.footnote > dt {
+  margin: 0 0.5rem 0.5rem 0;
+  line-height: 1.2rem;
+  word-break: break-all;
+  font-weight: 400;
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets {
+  margin-right: 0.5rem;
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets:before {
+  content: "[";
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets:after {
+  content: "]";
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.fn-backref {
+  font-style: italic;
+}
+html.writer-html5 .rst-content dl.footnote > dd {
+  margin: 0 0 0.5rem;
+  line-height: 1.2rem;
+}
+html.writer-html5 .rst-content dl.footnote > dd p,
+html.writer-html5 .rst-content dl.option-list kbd {
+  font-size: 0.9rem;
+}
+.rst-content table.docutils.footnote,
+html.writer-html4 .rst-content table.docutils.citation,
+html.writer-html5 .rst-content dl.footnote {
+  color: grey;
+}
+.rst-content table.docutils.footnote code,
+.rst-content table.docutils.footnote tt,
+html.writer-html4 .rst-content table.docutils.citation code,
+html.writer-html4 .rst-content table.docutils.citation tt,
+html.writer-html5 .rst-content dl.footnote code,
+html.writer-html5 .rst-content dl.footnote tt {
+  color: #555;
+}
+.rst-content .wy-table-responsive.citation,
+.rst-content .wy-table-responsive.footnote {
+  margin-bottom: 0;
+}
+.rst-content .wy-table-responsive.citation + :not(.citation),
+.rst-content .wy-table-responsive.footnote + :not(.footnote) {
+  margin-top: 24px;
+}
+.rst-content .wy-table-responsive.citation:last-child,
+.rst-content .wy-table-responsive.footnote:last-child {
+  margin-bottom: 24px;
+}
+.rst-content table.docutils th {
+  border-color: #e1e4e5;
+}
+html.writer-html5 .rst-content table.docutils th {
+  border: 1px solid #e1e4e5;
+}
+html.writer-html5 .rst-content table.docutils td > p,
+html.writer-html5 .rst-content table.docutils th > p {
+  line-height: 1rem;
+  margin-bottom: 0;
+  font-size: 0.9rem;
+}
+.rst-content table.docutils td .last,
+.rst-content table.docutils td .last > :last-child {
+  margin-bottom: 0;
+}
+.rst-content table.field-list,
+.rst-content table.field-list td {
+  border: none;
+}
+.rst-content table.field-list td p {
+  font-size: inherit;
+  line-height: inherit;
+}
+.rst-content table.field-list td > strong {
+  display: inline-block;
+}
+.rst-content table.field-list .field-name {
+  padding-right: 10px;
+  text-align: left;
+  white-space: nowrap;
+}
+.rst-content table.field-list .field-body {
+  text-align: left;
+}
+.rst-content code,
+.rst-content tt {
+  color: #000;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  padding: 2px 5px;
+}
+.rst-content code big,
+.rst-content code em,
+.rst-content tt big,
+.rst-content tt em {
+  font-size: 100% !important;
+  line-height: normal;
+}
+.rst-content code.literal,
+.rst-content tt.literal {
+  color: #E60000;
+}
+.rst-content code.xref,
+.rst-content tt.xref,
+a .rst-content code,
+a .rst-content tt {
+  font-weight: 700;
+  color: #404040;
+}
+.rst-content kbd,
+.rst-content pre,
+.rst-content samp {
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+}
+.rst-content a code,
+.rst-content a tt {
+  color: #558040;
+}
+.rst-content dl {
+  margin-bottom: 24px;
+}
+.rst-content dl dt {
+  font-weight: 700;
+  margin-bottom: 12px;
+}
+.rst-content dl ol,
+.rst-content dl p,
+.rst-content dl table,
+.rst-content dl ul {
+  margin-bottom: 12px;
+}
+.rst-content dl dd {
+  margin: 0 0 12px 24px;
+  line-height: 24px;
+}
+html.writer-html4 .rst-content dl:not(.docutils),
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) {
+  margin-bottom: 24px;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt {
+  display: table;
+  margin: 6px 0;
+  font-size: 90%;
+  line-height: normal;
+  background: ##F2F2F2;
+  color: #666666;
+  border-top: 3px solid #6ab0de;
+  padding: 6px;
+  position: relative;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt:before,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt:before {
+  color: #6ab0de;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt .headerlink,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt
+  .headerlink {
+  color: #404040;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  dl:not(.field-list)
+  > dt {
+  margin-bottom: 6px;
+  border: none;
+  border-left: 3px solid #ccc;
+  background: #f0f0f0;
+  color: #555;
+}
+html.writer-html4
+  .rst-content
+  dl:not(.docutils)
+  dl:not(.field-list)
+  > dt
+  .headerlink,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  dl:not(.field-list)
+  > dt
+  .headerlink {
+  color: #404040;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt:first-child,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt:first-child {
+  margin-top: 0;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code,
+html.writer-html4 .rst-content dl:not(.docutils) tt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt {
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,
+html.writer-html4 .rst-content dl:not(.docutils) code.descname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descclassname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descclassname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descname {
+  background-color: transparent;
+  border: none;
+  padding: 0;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code.descname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descname {
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) .optional,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  .optional {
+  display: inline-block;
+  padding: 0 4px;
+  color: #000;
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) .property,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  .property {
+  display: inline-block;
+  padding-right: 8px;
+}
+.rst-content .viewcode-back,
+.rst-content .viewcode-link {
+  display: inline-block;
+  color: #27ae60;
+  font-size: 80%;
+  padding-left: 24px;
+}
+.rst-content .viewcode-back {
+  display: block;
+  float: right;
+}
+.rst-content p.rubric {
+  margin-bottom: 12px;
+  font-weight: 700;
+}
+.rst-content code.download,
+.rst-content tt.download {
+  background: inherit;
+  padding: inherit;
+  font-weight: 400;
+  font-family: inherit;
+  font-size: inherit;
+  color: inherit;
+  border: inherit;
+  white-space: inherit;
+}
+.rst-content code.download span:first-child,
+.rst-content tt.download span:first-child {
+  -webkit-font-smoothing: subpixel-antialiased;
+}
+.rst-content code.download span:first-child:before,
+.rst-content tt.download span:first-child:before {
+  margin-right: 4px;
+}
+.rst-content .guilabel {
+  border: 1px solid #7fbbe3;
+  background: #e7f2fa;
+  font-size: 80%;
+  font-weight: 700;
+  border-radius: 4px;
+  padding: 2.4px 6px;
+  margin: auto 2px;
+}
+.rst-content .versionmodified {
+  font-style: italic;
+}
+@media screen and (max-width: 480px) {
+  .rst-content .sidebar {
+    width: 100%;
+  }
+}
+span[id*="MathJax-Span"] {
+  color: #666666;
+}
+.math {
+  text-align: center;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942)
+      format("woff2"),
+    url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");
+  font-weight: 400;
+  font-style: normal;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2)
+      format("woff2"),
+    url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");
+  font-weight: 700;
+  font-style: normal;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d)
+      format("woff2"),
+    url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c)
+      format("woff");
+  font-weight: 700;
+  font-style: italic;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d)
+      format("woff2"),
+    url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892)
+      format("woff");
+  font-weight: 400;
+  font-style: italic;
+  font-display: block;
+}
+@font-face {
+  font-family: Roboto Slab;
+  font-style: normal;
+  font-weight: 400;
+  src: url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958)
+      format("woff2"),
+    url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c)
+      format("woff");
+  font-display: block;
+}
+@font-face {
+  font-family: Roboto Slab;
+  font-style: normal;
+  font-weight: 700;
+  src: url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe)
+      format("woff2"),
+    url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a)
+      format("woff");
+  font-display: block;
+}
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/doctools.js b/VimbaX/doc/VimbaX_Documentation/_static/doctools.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1bfd708b7f424846261e634ec53b0be89a4f604
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/doctools.js
@@ -0,0 +1,358 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+if (!window.console || !console.firebug) {
+  var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
+    "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
+    "profile", "profileEnd"];
+  window.console = {};
+  for (var i = 0; i < names.length; ++i)
+    window.console[names[i]] = function() {};
+}
+ */
+
+/**
+ * small helper function to urldecode strings
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
+ */
+jQuery.urldecode = function(x) {
+  if (!x) {
+    return x
+  }
+  return decodeURIComponent(x.replace(/\+/g, ' '));
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+  if (typeof s === 'undefined')
+    s = document.location.search;
+  var parts = s.substr(s.indexOf('?') + 1).split('&');
+  var result = {};
+  for (var i = 0; i < parts.length; i++) {
+    var tmp = parts[i].split('=', 2);
+    var key = jQuery.urldecode(tmp[0]);
+    var value = jQuery.urldecode(tmp[1]);
+    if (key in result)
+      result[key].push(value);
+    else
+      result[key] = [value];
+  }
+  return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+  function highlight(node, addItems) {
+    if (node.nodeType === 3) {
+      var val = node.nodeValue;
+      var pos = val.toLowerCase().indexOf(text);
+      if (pos >= 0 &&
+          !jQuery(node.parentNode).hasClass(className) &&
+          !jQuery(node.parentNode).hasClass("nohighlight")) {
+        var span;
+        var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
+        if (isInSVG) {
+          span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+        } else {
+          span = document.createElement("span");
+          span.className = className;
+        }
+        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling));
+        node.nodeValue = val.substr(0, pos);
+        if (isInSVG) {
+          var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+          var bbox = node.parentElement.getBBox();
+          rect.x.baseVal.value = bbox.x;
+          rect.y.baseVal.value = bbox.y;
+          rect.width.baseVal.value = bbox.width;
+          rect.height.baseVal.value = bbox.height;
+          rect.setAttribute('class', className);
+          addItems.push({
+              "parent": node.parentNode,
+              "target": rect});
+        }
+      }
+    }
+    else if (!jQuery(node).is("button, select, textarea")) {
+      jQuery.each(node.childNodes, function() {
+        highlight(this, addItems);
+      });
+    }
+  }
+  var addItems = [];
+  var result = this.each(function() {
+    highlight(this, addItems);
+  });
+  for (var i = 0; i < addItems.length; ++i) {
+    jQuery(addItems[i].parent).before(addItems[i].target);
+  }
+  return result;
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+  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"
+    };
+  };
+  jQuery.browser = {};
+  jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+  init : function() {
+    this.fixFirefoxAnchorBug();
+    this.highlightSearchWords();
+    this.initIndexTable();
+    this.initOnKeyListeners();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS : {},
+  PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
+  LOCALE : 'unknown',
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext : function(string) {
+    var translated = Documentation.TRANSLATIONS[string];
+    if (typeof translated === 'undefined')
+      return string;
+    return (typeof translated === 'string') ? translated : translated[0];
+  },
+
+  ngettext : function(singular, plural, n) {
+    var translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated === 'undefined')
+      return (n == 1) ? singular : plural;
+    return translated[Documentation.PLURALEXPR(n)];
+  },
+
+  addTranslations : function(catalog) {
+    for (var key in catalog.messages)
+      this.TRANSLATIONS[key] = catalog.messages[key];
+    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+    this.LOCALE = catalog.locale;
+  },
+
+  /**
+   * add context elements like header anchor links
+   */
+  addContextElements : function() {
+    $('div[id] > :header:first').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this headline')).
+      appendTo(this);
+    });
+    $('dt[id]').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this definition')).
+      appendTo(this);
+    });
+  },
+
+  /**
+   * workaround a firefox stupidity
+   * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
+   */
+  fixFirefoxAnchorBug : function() {
+    if (document.location.hash && $.browser.mozilla)
+      window.setTimeout(function() {
+        document.location.href += '';
+      }, 10);
+  },
+
+  /**
+   * highlight the search words provided in the url in the text
+   */
+  highlightSearchWords : function() {
+    var params = $.getQueryParameters();
+    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+    if (terms.length) {
+      var body = $('div.body');
+      if (!body.length) {
+        body = $('body');
+      }
+      window.setTimeout(function() {
+        $.each(terms, function() {
+          body.highlightText(this.toLowerCase(), 'highlighted');
+        });
+      }, 10);
+      $('<p class="highlight-link"><a href="javascript:Documentation.' +
+        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
+          .appendTo($('#searchbox'));
+    }
+  },
+
+  /**
+   * init the domain index toggle buttons
+   */
+  initIndexTable : function() {
+    var togglers = $('img.toggler').click(function() {
+      var src = $(this).attr('src');
+      var idnum = $(this).attr('id').substr(7);
+      $('tr.cg-' + idnum).toggle();
+      if (src.substr(-9) === 'minus.png')
+        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
+      else
+        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
+    }).css('display', '');
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
+        togglers.click();
+    }
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords : function() {
+    $('#searchbox .highlight-link').fadeOut(300);
+    $('span.highlighted').removeClass('highlighted');
+    var url = new URL(window.location);
+    url.searchParams.delete('highlight');
+    window.history.replaceState({}, '', url);
+  },
+
+   /**
+   * helper function to focus on search bar
+   */
+  focusSearchBar : function() {
+    $('input[name=q]').first().focus();
+  },
+
+  /**
+   * make the url absolute
+   */
+  makeURL : function(relativeURL) {
+    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
+  },
+
+  /**
+   * get the current relative url
+   */
+  getCurrentURL : function() {
+    var path = document.location.pathname;
+    var parts = path.split(/\//);
+    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
+      if (this === '..')
+        parts.pop();
+    });
+    var url = parts.join('/');
+    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+  },
+
+  initOnKeyListeners: function() {
+    // only install a listener if it is really needed
+    if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
+        !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+        return;
+
+    $(document).keydown(function(event) {
+      var activeElementType = document.activeElement.tagName;
+      // don't navigate when in search box, textarea, dropdown or button
+      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
+          && activeElementType !== 'BUTTON') {
+        if (event.altKey || event.ctrlKey || event.metaKey)
+          return;
+
+          if (!event.shiftKey) {
+            switch (event.key) {
+              case 'ArrowLeft':
+                if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
+                  break;
+                var prevHref = $('link[rel="prev"]').prop('href');
+                if (prevHref) {
+                  window.location.href = prevHref;
+                  return false;
+                }
+                break;
+              case 'ArrowRight':
+                if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
+                  break;
+                var nextHref = $('link[rel="next"]').prop('href');
+                if (nextHref) {
+                  window.location.href = nextHref;
+                  return false;
+                }
+                break;
+              case 'Escape':
+                if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+                  break;
+                Documentation.hideSearchWords();
+                return false;
+          }
+        }
+
+        // some keyboard layouts may need Shift to get /
+        switch (event.key) {
+          case '/':
+            if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+              break;
+            Documentation.focusSearchBar();
+            return false;
+        }
+      }
+    });
+  }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+  Documentation.init();
+});
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/documentation_options.js b/VimbaX/doc/VimbaX_Documentation/_static/documentation_options.js
new file mode 100644
index 0000000000000000000000000000000000000000..5144ac036eeebced3499a349b3a5485b000c4b0d
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/documentation_options.js
@@ -0,0 +1,14 @@
+var DOCUMENTATION_OPTIONS = {
+    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
+    VERSION: '2023-1',
+    LANGUAGE: 'None',
+    COLLAPSE_INDEX: false,
+    BUILDER: 'html',
+    FILE_SUFFIX: '.html',
+    LINK_SUFFIX: '.html',
+    HAS_SOURCE: false,
+    SOURCELINK_SUFFIX: '.txt',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/file.png b/VimbaX/doc/VimbaX_Documentation/_static/file.png
new file mode 100644
index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/file.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/jquery-3.5.1.js b/VimbaX/doc/VimbaX_Documentation/_static/jquery-3.5.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..50937333b99a5e168ac9e8292b22edd7e96c3e6a
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/jquery-3.5.1.js
@@ -0,0 +1,10872 @@
+/*!
+ * jQuery JavaScript Library v3.5.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2020-05-04T22:49Z
+ */
+( function( global, factory ) {
+
+	"use strict";
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var flat = arr.flat ? function( array ) {
+	return arr.flat.call( array );
+} : function( array ) {
+	return arr.concat.apply( [], array );
+};
+
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+      // Support: Chrome <=57, Firefox <=52
+      // In some browsers, typeof returns "function" for HTML <object> elements
+      // (i.e., `typeof document.createElement( "object" ) === "function"`).
+      // We don't want to classify *any* DOM node as a function.
+      return typeof obj === "function" && typeof obj.nodeType !== "number";
+  };
+
+
+var isWindow = function isWindow( obj ) {
+		return obj != null && obj === obj.window;
+	};
+
+
+var document = window.document;
+
+
+
+	var preservedScriptAttributes = {
+		type: true,
+		src: true,
+		nonce: true,
+		noModule: true
+	};
+
+	function DOMEval( code, node, doc ) {
+		doc = doc || document;
+
+		var i, val,
+			script = doc.createElement( "script" );
+
+		script.text = code;
+		if ( node ) {
+			for ( i in preservedScriptAttributes ) {
+
+				// Support: Firefox 64+, Edge 18+
+				// Some browsers don't support the "nonce" property on scripts.
+				// On the other hand, just using `getAttribute` is not enough as
+				// the `nonce` attribute is reset to an empty string whenever it
+				// becomes browsing-context connected.
+				// See https://github.com/whatwg/html/issues/2369
+				// See https://html.spec.whatwg.org/#nonce-attributes
+				// The `node.getAttribute` check was added for the sake of
+				// `jQuery.globalEval` so that it can fake a nonce-containing node
+				// via an object.
+				val = node[ i ] || node.getAttribute && node.getAttribute( i );
+				if ( val ) {
+					script.setAttribute( i, val );
+				}
+			}
+		}
+		doc.head.appendChild( script ).parentNode.removeChild( script );
+	}
+
+
+function toType( obj ) {
+	if ( obj == null ) {
+		return obj + "";
+	}
+
+	// Support: Android <=2.3 only (functionish RegExp)
+	return typeof obj === "object" || typeof obj === "function" ?
+		class2type[ toString.call( obj ) ] || "object" :
+		typeof obj;
+}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+	version = "3.5.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+
+		// Return all the elements in a clean array
+		if ( num == null ) {
+			return slice.call( this );
+		}
+
+		// Return just the one element from the set
+		return num < 0 ? this[ num + this.length ] : this[ num ];
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	even: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return ( i + 1 ) % 2;
+		} ) );
+	},
+
+	odd: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return i % 2;
+		} ) );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				copy = options[ name ];
+
+				// Prevent Object.prototype pollution
+				// Prevent never-ending loop
+				if ( name === "__proto__" || target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = Array.isArray( copy ) ) ) ) {
+					src = target[ name ];
+
+					// Ensure proper type for the source value
+					if ( copyIsArray && !Array.isArray( src ) ) {
+						clone = [];
+					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
+						clone = {};
+					} else {
+						clone = src;
+					}
+					copyIsArray = false;
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isPlainObject: function( obj ) {
+		var proto, Ctor;
+
+		// Detect obvious negatives
+		// Use toString instead of jQuery.type to catch host objects
+		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+			return false;
+		}
+
+		proto = getProto( obj );
+
+		// Objects with no prototype (e.g., `Object.create( null )`) are plain
+		if ( !proto ) {
+			return true;
+		}
+
+		// Objects with prototype are plain iff they were constructed by a global Object function
+		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	// Evaluates a script in a provided context; falls back to the global one
+	// if not specified.
+	globalEval: function( code, options, doc ) {
+		DOMEval( code, { nonce: options && options.nonce }, doc );
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	// Support: Android <=4.0 only, PhantomJS 1 only
+	// push.apply(_, arraylike) throws on ancient WebKit
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return flat( ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( _i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: real iOS 8.2 only (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = toType( obj );
+
+	if ( isFunction( obj ) || isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.5
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://js.foundation/
+ *
+ * Date: 2020-03-14
+ */
+( function( window ) {
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	nonnativeSelectorCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// Instance methods
+	hasOwn = ( {} ).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	pushNative = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+
+	// Use a stripped-down indexOf as it's faster than native
+	// https://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[ i ] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
+		"ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
+	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
+		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+
+		// "Attribute values must be CSS identifiers [capture 5]
+		// or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
+		whitespace + "*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
+		whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
+		"*" ),
+	rdescend = new RegExp( whitespace + "|>" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
+			whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
+			whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace +
+			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rhtml = /HTML$/i,
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+
+	// CSS escapes
+	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
+	funescape = function( escape, nonHex ) {
+		var high = "0x" + escape.slice( 1 ) - 0x10000;
+
+		return nonHex ?
+
+			// Strip the backslash prefix from a non-hex escape sequence
+			nonHex :
+
+			// Replace a hexadecimal escape sequence with the encoded Unicode code point
+			// Support: IE <=11+
+			// For values outside the Basic Multilingual Plane (BMP), manually construct a
+			// surrogate pair
+			high < 0 ?
+				String.fromCharCode( high + 0x10000 ) :
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// CSS string/identifier serialization
+	// https://drafts.csswg.org/cssom/#common-serializing-idioms
+	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+	fcssescape = function( ch, asCodePoint ) {
+		if ( asCodePoint ) {
+
+			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+			if ( ch === "\0" ) {
+				return "\uFFFD";
+			}
+
+			// Control characters and (dependent upon position) numbers get escaped as code points
+			return ch.slice( 0, -1 ) + "\\" +
+				ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+		}
+
+		// Other potentially-special ASCII characters get backslash-escaped
+		return "\\" + ch;
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	},
+
+	inDisabledFieldset = addCombinator(
+		function( elem ) {
+			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
+		},
+		{ dir: "parentNode", next: "legend" }
+	);
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		( arr = slice.call( preferredDoc.childNodes ) ),
+		preferredDoc.childNodes
+	);
+
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	// eslint-disable-next-line no-unused-expressions
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			pushNative.apply( target, slice.call( els ) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+
+			// Can't trust NodeList.length
+			while ( ( target[ j++ ] = els[ i++ ] ) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+		setDocument( context );
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
+
+				// ID selector
+				if ( ( m = match[ 1 ] ) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( ( elem = context.getElementById( m ) ) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[ 2 ] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!nonnativeSelectorCache[ selector + " " ] &&
+				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
+
+				// Support: IE 8 only
+				// Exclude object elements
+				( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
+
+				newSelector = selector;
+				newContext = context;
+
+				// qSA considers elements outside a scoping root when evaluating child or
+				// descendant combinators, which is not what we want.
+				// In such cases, we work around the behavior by prefixing every selector in the
+				// list with an ID selector referencing the scope context.
+				// The technique has to be used as well when a leading combinator is used
+				// as such selectors are not recognized by querySelectorAll.
+				// Thanks to Andrew Dupont for this technique.
+				if ( nodeType === 1 &&
+					( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+
+					// We can use :scope instead of the ID hack if the browser
+					// supports it & if we're not changing the context.
+					if ( newContext !== context || !support.scope ) {
+
+						// Capture the context ID, setting it first if necessary
+						if ( ( nid = context.getAttribute( "id" ) ) ) {
+							nid = nid.replace( rcssescape, fcssescape );
+						} else {
+							context.setAttribute( "id", ( nid = expando ) );
+						}
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					while ( i-- ) {
+						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
+							toSelector( groups[ i ] );
+					}
+					newSelector = groups.join( "," );
+				}
+
+				try {
+					push.apply( results,
+						newContext.querySelectorAll( newSelector )
+					);
+					return results;
+				} catch ( qsaError ) {
+					nonnativeSelectorCache( selector, true );
+				} finally {
+					if ( nid === expando ) {
+						context.removeAttribute( "id" );
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return ( cache[ key + " " ] = value );
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+	var el = document.createElement( "fieldset" );
+
+	try {
+		return !!fn( el );
+	} catch ( e ) {
+		return false;
+	} finally {
+
+		// Remove from its parent by default
+		if ( el.parentNode ) {
+			el.parentNode.removeChild( el );
+		}
+
+		// release memory in IE
+		el = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split( "|" ),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[ i ] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			a.sourceIndex - b.sourceIndex;
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( ( cur = cur.nextSibling ) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return ( name === "input" || name === "button" ) && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+	return function( elem ) {
+
+		// Only certain elements can match :enabled or :disabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+		if ( "form" in elem ) {
+
+			// Check for inherited disabledness on relevant non-disabled elements:
+			// * listed form-associated elements in a disabled fieldset
+			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+			// * option elements in a disabled optgroup
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+			// All such elements have a "form" property.
+			if ( elem.parentNode && elem.disabled === false ) {
+
+				// Option elements defer to a parent optgroup if present
+				if ( "label" in elem ) {
+					if ( "label" in elem.parentNode ) {
+						return elem.parentNode.disabled === disabled;
+					} else {
+						return elem.disabled === disabled;
+					}
+				}
+
+				// Support: IE 6 - 11
+				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
+				return elem.isDisabled === disabled ||
+
+					// Where there is no isDisabled, check manually
+					/* jshint -W018 */
+					elem.isDisabled !== !disabled &&
+					inDisabledFieldset( elem ) === disabled;
+			}
+
+			return elem.disabled === disabled;
+
+		// Try to winnow out elements that can't be disabled before trusting the disabled property.
+		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+		// even exist on them, let alone have a boolean value.
+		} else if ( "label" in elem ) {
+			return elem.disabled === disabled;
+		}
+
+		// Remaining elements are neither :enabled nor :disabled
+		return false;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction( function( argument ) {
+		argument = +argument;
+		return markFunction( function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
+					seed[ j ] = !( matches[ j ] = seed[ j ] );
+				}
+			}
+		} );
+	} );
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	var namespace = elem.namespaceURI,
+		docElem = ( elem.ownerDocument || elem ).documentElement;
+
+	// Support: IE <=8
+	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
+	// https://bugs.jquery.com/ticket/4833
+	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, subWindow,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9 - 11+, Edge 12 - 18+
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( preferredDoc != document &&
+		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
+
+		// Support: IE 11, Edge
+		if ( subWindow.addEventListener ) {
+			subWindow.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( subWindow.attachEvent ) {
+			subWindow.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
+	// Safari 4 - 5 only, Opera <=11.6 - 12.x only
+	// IE/Edge & older browsers don't support the :scope pseudo-class.
+	// Support: Safari 6.0 only
+	// Safari 6.0 supports :scope but it's an alias of :root there.
+	support.scope = assert( function( el ) {
+		docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
+		return typeof el.querySelectorAll !== "undefined" &&
+			!el.querySelectorAll( ":scope fieldset div" ).length;
+	} );
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert( function( el ) {
+		el.className = "i";
+		return !el.getAttribute( "className" );
+	} );
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert( function( el ) {
+		el.appendChild( document.createComment( "" ) );
+		return !el.getElementsByTagName( "*" ).length;
+	} );
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programmatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert( function( el ) {
+		docElem.appendChild( el ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	} );
+
+	// ID filter and find
+	if ( support.getById ) {
+		Expr.filter[ "ID" ] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute( "id" ) === attrId;
+			};
+		};
+		Expr.find[ "ID" ] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var elem = context.getElementById( id );
+				return elem ? [ elem ] : [];
+			}
+		};
+	} else {
+		Expr.filter[ "ID" ] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode( "id" );
+				return node && node.value === attrId;
+			};
+		};
+
+		// Support: IE 6 - 7 only
+		// getElementById is not reliable as a find shortcut
+		Expr.find[ "ID" ] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var node, i, elems,
+					elem = context.getElementById( id );
+
+				if ( elem ) {
+
+					// Verify the id attribute
+					node = elem.getAttributeNode( "id" );
+					if ( node && node.value === id ) {
+						return [ elem ];
+					}
+
+					// Fall back on getElementsByName
+					elems = context.getElementsByName( id );
+					i = 0;
+					while ( ( elem = elems[ i++ ] ) ) {
+						node = elem.getAttributeNode( "id" );
+						if ( node && node.value === id ) {
+							return [ elem ];
+						}
+					}
+				}
+
+				return [];
+			}
+		};
+	}
+
+	// Tag
+	Expr.find[ "TAG" ] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( ( elem = results[ i++ ] ) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See https://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
+
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert( function( el ) {
+
+			var input;
+
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// https://bugs.jquery.com/ticket/12359
+			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !el.querySelectorAll( "[selected]" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push( "~=" );
+			}
+
+			// Support: IE 11+, Edge 15 - 18+
+			// IE 11/Edge don't find elements on a `[name='']` query in some cases.
+			// Adding a temporary attribute to the document before the selection works
+			// around the issue.
+			// Interestingly, IE 10 & older don't seem to have the issue.
+			input = document.createElement( "input" );
+			input.setAttribute( "name", "" );
+			el.appendChild( input );
+			if ( !el.querySelectorAll( "[name='']" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
+					whitespace + "*(?:''|\"\")" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !el.querySelectorAll( ":checked" ).length ) {
+				rbuggyQSA.push( ":checked" );
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibling-combinator selector` fails
+			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push( ".#.+[+~]" );
+			}
+
+			// Support: Firefox <=3.6 - 5 only
+			// Old Firefox doesn't throw on a badly-escaped identifier.
+			el.querySelectorAll( "\\\f" );
+			rbuggyQSA.push( "[\\r\\n\\f]" );
+		} );
+
+		assert( function( el ) {
+			el.innerHTML = "<a href='' disabled='disabled'></a>" +
+				"<select disabled='disabled'><option/></select>";
+
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement( "input" );
+			input.setAttribute( "type", "hidden" );
+			el.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( el.querySelectorAll( "[name=d]" ).length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: IE9-11+
+			// IE's :disabled selector does not pick up the children of disabled fieldsets
+			docElem.appendChild( el ).disabled = true;
+			if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: Opera 10 - 11 only
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			el.querySelectorAll( "*,:x" );
+			rbuggyQSA.push( ",.*:" );
+		} );
+	}
+
+	if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector ) ) ) ) {
+
+		assert( function( el ) {
+
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( el, "*" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( el, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		} );
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			) );
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( ( b = b.parentNode ) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		// Support: IE 11+, Edge 17 - 18+
+		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+		// two documents; shallow comparisons work.
+		// eslint-disable-next-line eqeqeq
+		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
+
+			// Choose the first element that is related to our preferred document
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( a == document || a.ownerDocument == preferredDoc &&
+				contains( preferredDoc, a ) ) {
+				return -1;
+			}
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( b == document || b.ownerDocument == preferredDoc &&
+				contains( preferredDoc, b ) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			return a == document ? -1 :
+				b == document ? 1 :
+				/* eslint-enable eqeqeq */
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( ( cur = cur.parentNode ) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( ( cur = cur.parentNode ) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[ i ] === bp[ i ] ) {
+			i++;
+		}
+
+		return i ?
+
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[ i ], bp[ i ] ) :
+
+			// Otherwise nodes in our document sort first
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			ap[ i ] == preferredDoc ? -1 :
+			bp[ i ] == preferredDoc ? 1 :
+			/* eslint-enable eqeqeq */
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	setDocument( elem );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!nonnativeSelectorCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+
+				// As well, disconnected nodes are said to be in a document
+				// fragment in IE 9
+				elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch ( e ) {
+			nonnativeSelectorCache( expr, true );
+		}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+
+	// Set document vars if needed
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( context.ownerDocument || context ) != document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+
+	// Set document vars if needed
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( elem.ownerDocument || elem ) != document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			( val = elem.getAttributeNode( name ) ) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.escape = function( sel ) {
+	return ( sel + "" ).replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( ( elem = results[ i++ ] ) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+
+		// If no nodeType, this is expected to be an array
+		while ( ( node = elem[ i++ ] ) ) {
+
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
+				match[ 5 ] || "" ).replace( runescape, funescape );
+
+			if ( match[ 2 ] === "~=" ) {
+				match[ 3 ] = " " + match[ 3 ] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[ 1 ] = match[ 1 ].toLowerCase();
+
+			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
+
+				// nth-* requires argument
+				if ( !match[ 3 ] ) {
+					Sizzle.error( match[ 0 ] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[ 4 ] = +( match[ 4 ] ?
+					match[ 5 ] + ( match[ 6 ] || 1 ) :
+					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
+				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
+
+				// other types prohibit arguments
+			} else if ( match[ 3 ] ) {
+				Sizzle.error( match[ 0 ] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[ 6 ] && match[ 2 ];
+
+			if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[ 3 ] ) {
+				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+
+				// Get excess from tokenize (recursively)
+				( excess = tokenize( unquoted, true ) ) &&
+
+				// advance to the next closing parenthesis
+				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
+
+				// excess is a negative index
+				match[ 0 ] = match[ 0 ].slice( 0, excess );
+				match[ 2 ] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() {
+					return true;
+				} :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				( pattern = new RegExp( "(^|" + whitespace +
+					")" + className + "(" + whitespace + "|$)" ) ) && classCache(
+						className, function( elem ) {
+							return pattern.test(
+								typeof elem.className === "string" && elem.className ||
+								typeof elem.getAttribute !== "undefined" &&
+									elem.getAttribute( "class" ) ||
+								""
+							);
+				} );
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				/* eslint-disable max-len */
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+				/* eslint-enable max-len */
+
+			};
+		},
+
+		"CHILD": function( type, what, _argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, _context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( ( node = node[ dir ] ) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								( outerCache[ node.uniqueID ] = {} );
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( ( node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+
+							// Use previously-cached element index if available
+							if ( useCache ) {
+
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									( outerCache[ node.uniqueID ] = {} );
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+
+								// Use the same loop as above to seek `elem` from the start
+								while ( ( node = ++nodeIndex && node && node[ dir ] ||
+									( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] ||
+												( node[ expando ] = {} );
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												( outerCache[ node.uniqueID ] = {} );
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction( function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[ i ] );
+							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
+						}
+					} ) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+
+		// Potentially complex pseudos
+		"not": markFunction( function( selector ) {
+
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction( function( seed, matches, _context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( ( elem = unmatched[ i ] ) ) {
+							seed[ i ] = !( matches[ i ] = elem );
+						}
+					}
+				} ) :
+				function( elem, _context, xml ) {
+					input[ 0 ] = elem;
+					matcher( input, null, xml, results );
+
+					// Don't keep the element (issue #299)
+					input[ 0 ] = null;
+					return !results.pop();
+				};
+		} ),
+
+		"has": markFunction( function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		} ),
+
+		"contains": markFunction( function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
+			};
+		} ),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+
+			// lang value must be a valid identifier
+			if ( !ridentifier.test( lang || "" ) ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( ( elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
+				return false;
+			};
+		} ),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement &&
+				( !document.hasFocus || document.hasFocus() ) &&
+				!!( elem.type || elem.href || ~elem.tabIndex );
+		},
+
+		// Boolean properties
+		"enabled": createDisabledPseudo( false ),
+		"disabled": createDisabledPseudo( true ),
+
+		"checked": function( elem ) {
+
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return ( nodeName === "input" && !!elem.checked ) ||
+				( nodeName === "option" && !!elem.selected );
+		},
+
+		"selected": function( elem ) {
+
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				// eslint-disable-next-line no-unused-expressions
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos[ "empty" ]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( ( attr = elem.getAttribute( "type" ) ) == null ||
+					attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo( function() {
+			return [ 0 ];
+		} ),
+
+		"last": createPositionalPseudo( function( _matchIndexes, length ) {
+			return [ length - 1 ];
+		} ),
+
+		"eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		} ),
+
+		"even": createPositionalPseudo( function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"odd": createPositionalPseudo( function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+			var i = argument < 0 ?
+				argument + length :
+				argument > length ?
+					length :
+					argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} )
+	}
+};
+
+Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
+			if ( match ) {
+
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[ 0 ].length ) || soFar;
+			}
+			groups.push( ( tokens = [] ) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( ( match = rcombinators.exec( soFar ) ) ) {
+			matched = match.shift();
+			tokens.push( {
+				value: matched,
+
+				// Cast descendant combinators to space
+				type: match[ 0 ].replace( rtrim, " " )
+			} );
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
+				( match = preFilters[ type ]( match ) ) ) ) {
+				matched = match.shift();
+				tokens.push( {
+					value: matched,
+					type: type,
+					matches: match
+				} );
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[ i ].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		skip = combinator.next,
+		key = skip || dir,
+		checkNonElements = base && key === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( ( elem = elem[ dir ] ) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+			return false;
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( ( elem = elem[ dir ] ) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( ( elem = elem[ dir ] ) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] ||
+							( outerCache[ elem.uniqueID ] = {} );
+
+						if ( skip && skip === elem.nodeName.toLowerCase() ) {
+							elem = elem[ dir ] || elem;
+						} else if ( ( oldCache = uniqueCache[ key ] ) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return ( newCache[ 2 ] = oldCache[ 2 ] );
+						} else {
+
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ key ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+			return false;
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[ i ]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[ 0 ];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[ i ], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( ( elem = unmatched[ i ] ) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction( function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts(
+				selector || "*",
+				context.nodeType ? [ context ] : context,
+				[]
+			),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( ( elem = temp[ i ] ) ) {
+					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( ( elem = matcherOut[ i ] ) ) {
+
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( ( matcherIn[ i ] = elem ) );
+						}
+					}
+					postFinder( null, ( matcherOut = [] ), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( ( elem = matcherOut[ i ] ) &&
+						( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
+
+						seed[ temp ] = !( results[ temp ] = elem );
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	} );
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
+		implicitRelative = leadingRelative || Expr.relative[ " " ],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				( checkContext = context ).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
+			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
+		} else {
+			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[ j ].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+
+					// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+					tokens
+						.slice( 0, i - 1 )
+						.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
+
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
+				len = elems.length;
+
+			if ( outermost ) {
+
+				// Support: IE 11+, Edge 17 - 18+
+				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+				// two documents; shallow comparisons work.
+				// eslint-disable-next-line eqeqeq
+				outermostContext = context == document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+
+					// Support: IE 11+, Edge 17 - 18+
+					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+					// two documents; shallow comparisons work.
+					// eslint-disable-next-line eqeqeq
+					if ( !context && elem.ownerDocument != document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( ( matcher = elementMatchers[ j++ ] ) ) {
+						if ( matcher( elem, context || document, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+
+					// They will have gone through all possible matchers
+					if ( ( elem = !matcher && elem ) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( ( matcher = setMatchers[ j++ ] ) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
+								setMatched[ i ] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[ i ] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache(
+			selector,
+			matcherFromGroupMatchers( elementMatchers, setMatchers )
+		);
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
+		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
+			context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
+
+			context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
+				.replace( runescape, funescape ), context ) || [] )[ 0 ];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[ i ];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ ( type = token.type ) ] ) {
+				break;
+			}
+			if ( ( find = Expr.find[ type ] ) ) {
+
+				// Search, expanding context for leading sibling combinators
+				if ( ( seed = find(
+					token.matches[ 0 ].replace( runescape, funescape ),
+					rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
+						context
+				) ) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert( function( el ) {
+
+	// Should return 1, but returns 4 (following)
+	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
+} );
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert( function( el ) {
+	el.innerHTML = "<a href='#'></a>";
+	return el.firstChild.getAttribute( "href" ) === "#";
+} ) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	} );
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert( function( el ) {
+	el.innerHTML = "<input/>";
+	el.firstChild.setAttribute( "value", "" );
+	return el.firstChild.getAttribute( "value" ) === "";
+} ) ) {
+	addHandle( "value", function( elem, _name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	} );
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert( function( el ) {
+	return el.getAttribute( "disabled" ) == null;
+} ) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+				( val = elem.getAttributeNode( name ) ) && val.specified ?
+					val.value :
+					null;
+		}
+	} );
+}
+
+return Sizzle;
+
+} )( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+	}
+
+	// Single element
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+	}
+
+	// Arraylike of elements (jQuery, arguments, Array)
+	if ( typeof qualifier !== "string" ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+		} );
+	}
+
+	// Filtered directly for both simple and complex selectors
+	return jQuery.filter( qualifier, elements, not );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	if ( elems.length === 1 && elem.nodeType === 1 ) {
+		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+	}
+
+	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+		return elem.nodeType === 1;
+	} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i, ret,
+			len = this.length,
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		ret = this.pushStack( [] );
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	// Shortcut simple #id case for speed
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Method init() accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[ 0 ] === "<" &&
+				selector[ selector.length - 1 ] === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					if ( elem ) {
+
+						// Inject the element directly into the jQuery object
+						this[ 0 ] = elem;
+						this.length = 1;
+					}
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( isFunction( selector ) ) {
+			return root.ready !== undefined ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter( function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			targets = typeof selectors !== "string" && jQuery( selectors );
+
+		// Positional selectors never match, since there's no _selection_ context
+		if ( !rneedsContext.test( selectors ) ) {
+			for ( ; i < l; i++ ) {
+				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+					// Always skip document fragments
+					if ( cur.nodeType < 11 && ( targets ?
+						targets.index( cur ) > -1 :
+
+						// Don't pass non-elements to Sizzle
+						cur.nodeType === 1 &&
+							jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+						matched.push( cur );
+						break;
+					}
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, _i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, _i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, _i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+		if ( elem.contentDocument != null &&
+
+			// Support: IE 11+
+			// <object> elements with no `data` attribute has an object
+			// `contentDocument` with a `null` prototype.
+			getProto( elem.contentDocument ) ) {
+
+			return elem.contentDocument;
+		}
+
+		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+		// Treat the template element as a regular one in browsers that
+		// don't support it.
+		if ( nodeName( elem, "template" ) ) {
+			elem = elem.content || elem;
+		}
+
+		return jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.uniqueSort( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = locked || options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = queue = [];
+				if ( !memory && !firing ) {
+					list = memory = "";
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+function Identity( v ) {
+	return v;
+}
+function Thrower( ex ) {
+	throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+	var method;
+
+	try {
+
+		// Check for promise aspect first to privilege synchronous behavior
+		if ( value && isFunction( ( method = value.promise ) ) ) {
+			method.call( value ).done( resolve ).fail( reject );
+
+		// Other thenables
+		} else if ( value && isFunction( ( method = value.then ) ) ) {
+			method.call( value, resolve, reject );
+
+		// Other non-thenables
+		} else {
+
+			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+			// * false: [ value ].slice( 0 ) => resolve( value )
+			// * true: [ value ].slice( 1 ) => resolve()
+			resolve.apply( undefined, [ value ].slice( noValue ) );
+		}
+
+	// For Promises/A+, convert exceptions into rejections
+	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+	// Deferred#then to conditionally suppress rejection.
+	} catch ( value ) {
+
+		// Support: Android 4.0 only
+		// Strict mode functions invoked without .call/.apply get global-object context
+		reject.apply( undefined, [ value ] );
+	}
+}
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, callbacks,
+				// ... .then handlers, argument index, [final state]
+				[ "notify", "progress", jQuery.Callbacks( "memory" ),
+					jQuery.Callbacks( "memory" ), 2 ],
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				"catch": function( fn ) {
+					return promise.then( null, fn );
+				},
+
+				// Keep pipe for back-compat
+				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( _i, tuple ) {
+
+							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
+							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+							// deferred.progress(function() { bind to newDefer or newDefer.notify })
+							// deferred.done(function() { bind to newDefer or newDefer.resolve })
+							// deferred.fail(function() { bind to newDefer or newDefer.reject })
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+				then: function( onFulfilled, onRejected, onProgress ) {
+					var maxDepth = 0;
+					function resolve( depth, deferred, handler, special ) {
+						return function() {
+							var that = this,
+								args = arguments,
+								mightThrow = function() {
+									var returned, then;
+
+									// Support: Promises/A+ section 2.3.3.3.3
+									// https://promisesaplus.com/#point-59
+									// Ignore double-resolution attempts
+									if ( depth < maxDepth ) {
+										return;
+									}
+
+									returned = handler.apply( that, args );
+
+									// Support: Promises/A+ section 2.3.1
+									// https://promisesaplus.com/#point-48
+									if ( returned === deferred.promise() ) {
+										throw new TypeError( "Thenable self-resolution" );
+									}
+
+									// Support: Promises/A+ sections 2.3.3.1, 3.5
+									// https://promisesaplus.com/#point-54
+									// https://promisesaplus.com/#point-75
+									// Retrieve `then` only once
+									then = returned &&
+
+										// Support: Promises/A+ section 2.3.4
+										// https://promisesaplus.com/#point-64
+										// Only check objects and functions for thenability
+										( typeof returned === "object" ||
+											typeof returned === "function" ) &&
+										returned.then;
+
+									// Handle a returned thenable
+									if ( isFunction( then ) ) {
+
+										// Special processors (notify) just wait for resolution
+										if ( special ) {
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special )
+											);
+
+										// Normal processors (resolve) also hook into progress
+										} else {
+
+											// ...and disregard older resolution values
+											maxDepth++;
+
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special ),
+												resolve( maxDepth, deferred, Identity,
+													deferred.notifyWith )
+											);
+										}
+
+									// Handle all other returned values
+									} else {
+
+										// Only substitute handlers pass on context
+										// and multiple values (non-spec behavior)
+										if ( handler !== Identity ) {
+											that = undefined;
+											args = [ returned ];
+										}
+
+										// Process the value(s)
+										// Default process is resolve
+										( special || deferred.resolveWith )( that, args );
+									}
+								},
+
+								// Only normal processors (resolve) catch and reject exceptions
+								process = special ?
+									mightThrow :
+									function() {
+										try {
+											mightThrow();
+										} catch ( e ) {
+
+											if ( jQuery.Deferred.exceptionHook ) {
+												jQuery.Deferred.exceptionHook( e,
+													process.stackTrace );
+											}
+
+											// Support: Promises/A+ section 2.3.3.3.4.1
+											// https://promisesaplus.com/#point-61
+											// Ignore post-resolution exceptions
+											if ( depth + 1 >= maxDepth ) {
+
+												// Only substitute handlers pass on context
+												// and multiple values (non-spec behavior)
+												if ( handler !== Thrower ) {
+													that = undefined;
+													args = [ e ];
+												}
+
+												deferred.rejectWith( that, args );
+											}
+										}
+									};
+
+							// Support: Promises/A+ section 2.3.3.3.1
+							// https://promisesaplus.com/#point-57
+							// Re-resolve promises immediately to dodge false rejection from
+							// subsequent errors
+							if ( depth ) {
+								process();
+							} else {
+
+								// Call an optional hook to record the stack, in case of exception
+								// since it's otherwise lost when execution goes async
+								if ( jQuery.Deferred.getStackHook ) {
+									process.stackTrace = jQuery.Deferred.getStackHook();
+								}
+								window.setTimeout( process );
+							}
+						};
+					}
+
+					return jQuery.Deferred( function( newDefer ) {
+
+						// progress_handlers.add( ... )
+						tuples[ 0 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onProgress ) ?
+									onProgress :
+									Identity,
+								newDefer.notifyWith
+							)
+						);
+
+						// fulfilled_handlers.add( ... )
+						tuples[ 1 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onFulfilled ) ?
+									onFulfilled :
+									Identity
+							)
+						);
+
+						// rejected_handlers.add( ... )
+						tuples[ 2 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onRejected ) ?
+									onRejected :
+									Thrower
+							)
+						);
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 5 ];
+
+			// promise.progress = list.add
+			// promise.done = list.add
+			// promise.fail = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(
+					function() {
+
+						// state = "resolved" (i.e., fulfilled)
+						// state = "rejected"
+						state = stateString;
+					},
+
+					// rejected_callbacks.disable
+					// fulfilled_callbacks.disable
+					tuples[ 3 - i ][ 2 ].disable,
+
+					// rejected_handlers.disable
+					// fulfilled_handlers.disable
+					tuples[ 3 - i ][ 3 ].disable,
+
+					// progress_callbacks.lock
+					tuples[ 0 ][ 2 ].lock,
+
+					// progress_handlers.lock
+					tuples[ 0 ][ 3 ].lock
+				);
+			}
+
+			// progress_handlers.fire
+			// fulfilled_handlers.fire
+			// rejected_handlers.fire
+			list.add( tuple[ 3 ].fire );
+
+			// deferred.notify = function() { deferred.notifyWith(...) }
+			// deferred.resolve = function() { deferred.resolveWith(...) }
+			// deferred.reject = function() { deferred.rejectWith(...) }
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+				return this;
+			};
+
+			// deferred.notifyWith = list.fireWith
+			// deferred.resolveWith = list.fireWith
+			// deferred.rejectWith = list.fireWith
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( singleValue ) {
+		var
+
+			// count of uncompleted subordinates
+			remaining = arguments.length,
+
+			// count of unprocessed arguments
+			i = remaining,
+
+			// subordinate fulfillment data
+			resolveContexts = Array( i ),
+			resolveValues = slice.call( arguments ),
+
+			// the master Deferred
+			master = jQuery.Deferred(),
+
+			// subordinate callback factory
+			updateFunc = function( i ) {
+				return function( value ) {
+					resolveContexts[ i ] = this;
+					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( !( --remaining ) ) {
+						master.resolveWith( resolveContexts, resolveValues );
+					}
+				};
+			};
+
+		// Single- and empty arguments are adopted like Promise.resolve
+		if ( remaining <= 1 ) {
+			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+				!remaining );
+
+			// Use .then() to unwrap secondary thenables (cf. gh-3000)
+			if ( master.state() === "pending" ||
+				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+				return master.then();
+			}
+		}
+
+		// Multiple arguments are aggregated like Promise.all array elements
+		while ( i-- ) {
+			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+		}
+
+		return master.promise();
+	}
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+	// Support: IE 8 - 9 only
+	// Console exists when dev tools are open, which can happen at any time
+	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+	}
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+	window.setTimeout( function() {
+		throw error;
+	} );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+	readyList
+		.then( fn )
+
+		// Wrap jQuery.readyException in a function so that the lookup
+		// happens at the time of error handling instead of callback
+		// registration.
+		.catch( function( error ) {
+			jQuery.readyException( error );
+		} );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+	}
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed );
+	window.removeEventListener( "load", completed );
+	jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+	// Handle it asynchronously to allow scripts the opportunity to delay ready
+	window.setTimeout( jQuery.ready );
+
+} else {
+
+	// Use the handy event callback
+	document.addEventListener( "DOMContentLoaded", completed );
+
+	// A fallback to window.onload, that will always work
+	window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( toType( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, _key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn(
+					elems[ i ], key, raw ?
+					value :
+					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	if ( chainable ) {
+		return elems;
+	}
+
+	// Gets
+	if ( bulk ) {
+		return fn.call( elems );
+	}
+
+	return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+
+
+// Matches dashed string for camelizing
+var rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([a-z])/g;
+
+// Used by camelCase as callback to replace()
+function fcamelCase( _all, letter ) {
+	return letter.toUpperCase();
+}
+
+// Convert dashed to camelCase; used by the css and data modules
+// Support: IE <=9 - 11, Edge 12 - 15
+// Microsoft forgot to hump their vendor prefix (#9572)
+function camelCase( string ) {
+	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+}
+var acceptData = function( owner ) {
+
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+	cache: function( owner ) {
+
+		// Check if the owner object already has a cache
+		var value = owner[ this.expando ];
+
+		// If not, create one
+		if ( !value ) {
+			value = {};
+
+			// We can accept data for non-element nodes in modern browsers,
+			// but we should not, see #8335.
+			// Always return an empty object.
+			if ( acceptData( owner ) ) {
+
+				// If it is a node unlikely to be stringify-ed or looped over
+				// use plain assignment
+				if ( owner.nodeType ) {
+					owner[ this.expando ] = value;
+
+				// Otherwise secure it in a non-enumerable property
+				// configurable must be true to allow the property to be
+				// deleted when data is removed
+				} else {
+					Object.defineProperty( owner, this.expando, {
+						value: value,
+						configurable: true
+					} );
+				}
+			}
+		}
+
+		return value;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			cache = this.cache( owner );
+
+		// Handle: [ owner, key, value ] args
+		// Always use camelCase key (gh-2257)
+		if ( typeof data === "string" ) {
+			cache[ camelCase( data ) ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ camelCase( prop ) ] = data[ prop ];
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		return key === undefined ?
+			this.cache( owner ) :
+
+			// Always use camelCase key (gh-2257)
+			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
+	},
+	access: function( owner, key, value ) {
+
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+			return this.get( owner, key );
+		}
+
+		// When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i,
+			cache = owner[ this.expando ];
+
+		if ( cache === undefined ) {
+			return;
+		}
+
+		if ( key !== undefined ) {
+
+			// Support array or space separated string of keys
+			if ( Array.isArray( key ) ) {
+
+				// If key is an array of keys...
+				// We always set camelCase keys, so remove that.
+				key = key.map( camelCase );
+			} else {
+				key = camelCase( key );
+
+				// If a key with the spaces exists, use it.
+				// Otherwise, create an array by matching non-whitespace
+				key = key in cache ?
+					[ key ] :
+					( key.match( rnothtmlwhite ) || [] );
+			}
+
+			i = key.length;
+
+			while ( i-- ) {
+				delete cache[ key[ i ] ];
+			}
+		}
+
+		// Remove the expando if there's no more data
+		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+			// Support: Chrome <=35 - 45
+			// Webkit & Blink performance suffers when deleting properties
+			// from DOM nodes, so set to undefined instead
+			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+			if ( owner.nodeType ) {
+				owner[ this.expando ] = undefined;
+			} else {
+				delete owner[ this.expando ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		var cache = owner[ this.expando ];
+		return cache !== undefined && !jQuery.isEmptyObject( cache );
+	}
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+	if ( data === "true" ) {
+		return true;
+	}
+
+	if ( data === "false" ) {
+		return false;
+	}
+
+	if ( data === "null" ) {
+		return null;
+	}
+
+	// Only convert to a number if it doesn't change the string
+	if ( data === +data + "" ) {
+		return +data;
+	}
+
+	if ( rbrace.test( data ) ) {
+		return JSON.parse( data );
+	}
+
+	return data;
+}
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = getData( data );
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			dataUser.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend( {
+	hasData: function( elem ) {
+		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return dataUser.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		dataUser.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to dataPriv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return dataPriv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		dataPriv.remove( elem, name );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = dataUser.get( elem );
+
+				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE 11 only
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					dataPriv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				dataUser.set( this, key );
+			} );
+		}
+
+		return access( this, function( value ) {
+			var data;
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+
+				// Attempt to get data from the cache
+				// The key will always be camelCased in Data
+				data = dataUser.get( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			this.each( function() {
+
+				// We always store the camelCased key
+				dataUser.set( this, key, value );
+			} );
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			dataUser.remove( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = dataPriv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || Array.isArray( data ) ) {
+					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				dataPriv.remove( elem, [ type + "queue", key ] );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var documentElement = document.documentElement;
+
+
+
+	var isAttached = function( elem ) {
+			return jQuery.contains( elem.ownerDocument, elem );
+		},
+		composed = { composed: true };
+
+	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
+	// Check attachment across shadow DOM boundaries when possible (gh-3504)
+	// Support: iOS 10.0-10.2 only
+	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
+	// leading to errors. We need to check for `getRootNode`.
+	if ( documentElement.getRootNode ) {
+		isAttached = function( elem ) {
+			return jQuery.contains( elem.ownerDocument, elem ) ||
+				elem.getRootNode( composed ) === elem.ownerDocument;
+		};
+	}
+var isHiddenWithinTree = function( elem, el ) {
+
+		// isHiddenWithinTree might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+
+		// Inline style trumps all
+		return elem.style.display === "none" ||
+			elem.style.display === "" &&
+
+			// Otherwise, check computed style
+			// Support: Firefox <=43 - 45
+			// Disconnected elements can have computed display: none, so first confirm that elem is
+			// in the document.
+			isAttached( elem ) &&
+
+			jQuery.css( elem, "display" ) === "none";
+	};
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted, scale,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() {
+				return tween.cur();
+			} :
+			function() {
+				return jQuery.css( elem, prop, "" );
+			},
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = elem.nodeType &&
+			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Support: Firefox <=54
+		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
+		initial = initial / 2;
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		while ( maxIterations-- ) {
+
+			// Evaluate and update our best guess (doubling guesses that zero out).
+			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
+			jQuery.style( elem, prop, initialInUnit + unit );
+			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
+				maxIterations = 0;
+			}
+			initialInUnit = initialInUnit / scale;
+
+		}
+
+		initialInUnit = initialInUnit * 2;
+		jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+	var temp,
+		doc = elem.ownerDocument,
+		nodeName = elem.nodeName,
+		display = defaultDisplayMap[ nodeName ];
+
+	if ( display ) {
+		return display;
+	}
+
+	temp = doc.body.appendChild( doc.createElement( nodeName ) );
+	display = jQuery.css( temp, "display" );
+
+	temp.parentNode.removeChild( temp );
+
+	if ( display === "none" ) {
+		display = "block";
+	}
+	defaultDisplayMap[ nodeName ] = display;
+
+	return display;
+}
+
+function showHide( elements, show ) {
+	var display, elem,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	// Determine new display value for elements that need to change
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		display = elem.style.display;
+		if ( show ) {
+
+			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+			// check is required in this first loop unless we have a nonempty display value (either
+			// inline or about-to-be-restored)
+			if ( display === "none" ) {
+				values[ index ] = dataPriv.get( elem, "display" ) || null;
+				if ( !values[ index ] ) {
+					elem.style.display = "";
+				}
+			}
+			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+				values[ index ] = getDefaultDisplay( elem );
+			}
+		} else {
+			if ( display !== "none" ) {
+				values[ index ] = "none";
+
+				// Remember what we're overwriting
+				dataPriv.set( elem, "display", display );
+			}
+		}
+	}
+
+	// Set the display of the elements in a second loop to avoid constant reflow
+	for ( index = 0; index < length; index++ ) {
+		if ( values[ index ] != null ) {
+			elements[ index ].style.display = values[ index ];
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend( {
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHiddenWithinTree( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
+
+var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
+
+
+
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0 - 4.3 only
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Android <=4.1 only
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE <=11 only
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+	// Support: IE <=9 only
+	// IE <=9 replaces <option> tags with their contents when inserted outside of
+	// the select element.
+	div.innerHTML = "<option></option>";
+	support.option = !!div.lastChild;
+} )();
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+	// XHTML parsers do not magically insert elements in the
+	// same way that tag soup parsers do. So we cannot shorten
+	// this by omitting <tbody> or other required elements.
+	thead: [ 1, "<table>", "</table>" ],
+	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+	_default: [ 0, "", "" ]
+};
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: IE <=9 only
+if ( !support.option ) {
+	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
+}
+
+
+function getAll( context, tag ) {
+
+	// Support: IE <=9 - 11 only
+	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
+	var ret;
+
+	if ( typeof context.getElementsByTagName !== "undefined" ) {
+		ret = context.getElementsByTagName( tag || "*" );
+
+	} else if ( typeof context.querySelectorAll !== "undefined" ) {
+		ret = context.querySelectorAll( tag || "*" );
+
+	} else {
+		ret = [];
+	}
+
+	if ( tag === undefined || tag && nodeName( context, tag ) ) {
+		return jQuery.merge( [ context ], ret );
+	}
+
+	return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		dataPriv.set(
+			elems[ i ],
+			"globalEval",
+			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var elem, tmp, tag, wrap, attached, j,
+		fragment = context.createDocumentFragment(),
+		nodes = [],
+		i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( toType( elem ) === "object" ) {
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Remember the top-level container
+				tmp = fragment.firstChild;
+
+				// Ensure the created nodes are orphaned (#12392)
+				tmp.textContent = "";
+			}
+		}
+	}
+
+	// Remove wrapper from fragment
+	fragment.textContent = "";
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+			continue;
+		}
+
+		attached = isAttached( elem );
+
+		// Append to fragment
+		tmp = getAll( fragment.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( attached ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	return fragment;
+}
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE <=9 - 11+
+// focus() and blur() are asynchronous, except when they are no-op.
+// So expect focus to be synchronous when the element is already active,
+// and blur to be synchronous when the element is not already active.
+// (focus and blur are always synchronous in other supported browsers,
+// this just defines when we can count on it).
+function expectSync( elem, type ) {
+	return ( elem === safeActiveElement() ) === ( type === "focus" );
+}
+
+// Support: IE <=9 only
+// Accessing document.activeElement can throw unexpectedly
+// https://bugs.jquery.com/ticket/13393
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.get( elem );
+
+		// Only attach events to objects that accept data
+		if ( !acceptData( elem ) ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Ensure that invalid selectors throw exceptions at attach time
+		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
+		if ( selector ) {
+			jQuery.find.matchesSelector( documentElement, selector );
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = Object.create( null );
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove data and the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			dataPriv.remove( elem, "handle events" );
+		}
+	},
+
+	dispatch: function( nativeEvent ) {
+
+		var i, j, ret, matched, handleObj, handlerQueue,
+			args = new Array( arguments.length ),
+
+			// Make a writable jQuery.Event from the native event object
+			event = jQuery.event.fix( nativeEvent ),
+
+			handlers = (
+					dataPriv.get( this, "events" ) || Object.create( null )
+				)[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+
+		for ( i = 1; i < arguments.length; i++ ) {
+			args[ i ] = arguments[ i ];
+		}
+
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// If the event is namespaced, then each handler is only invoked if it is
+				// specially universal or its namespaces are a superset of the event's.
+				if ( !event.rnamespace || handleObj.namespace === false ||
+					event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, handleObj, sel, matchedHandlers, matchedSelectors,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		if ( delegateCount &&
+
+			// Support: IE <=9
+			// Black-hole SVG <use> instance trees (trac-13180)
+			cur.nodeType &&
+
+			// Support: Firefox <=42
+			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+			// Support: IE 11 only
+			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+			!( event.type === "click" && event.button >= 1 ) ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+					matchedHandlers = [];
+					matchedSelectors = {};
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matchedSelectors[ sel ] === undefined ) {
+							matchedSelectors[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matchedSelectors[ sel ] ) {
+							matchedHandlers.push( handleObj );
+						}
+					}
+					if ( matchedHandlers.length ) {
+						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		cur = this;
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	addProp: function( name, hook ) {
+		Object.defineProperty( jQuery.Event.prototype, name, {
+			enumerable: true,
+			configurable: true,
+
+			get: isFunction( hook ) ?
+				function() {
+					if ( this.originalEvent ) {
+							return hook( this.originalEvent );
+					}
+				} :
+				function() {
+					if ( this.originalEvent ) {
+							return this.originalEvent[ name ];
+					}
+				},
+
+			set: function( value ) {
+				Object.defineProperty( this, name, {
+					enumerable: true,
+					configurable: true,
+					writable: true,
+					value: value
+				} );
+			}
+		} );
+	},
+
+	fix: function( originalEvent ) {
+		return originalEvent[ jQuery.expando ] ?
+			originalEvent :
+			new jQuery.Event( originalEvent );
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		click: {
+
+			// Utilize native event to ensure correct state for checkable inputs
+			setup: function( data ) {
+
+				// For mutual compressibility with _default, replace `this` access with a local var.
+				// `|| data` is dead code meant only to preserve the variable through minification.
+				var el = this || data;
+
+				// Claim the first handler
+				if ( rcheckableType.test( el.type ) &&
+					el.click && nodeName( el, "input" ) ) {
+
+					// dataPriv.set( el, "click", ... )
+					leverageNative( el, "click", returnTrue );
+				}
+
+				// Return false to allow normal processing in the caller
+				return false;
+			},
+			trigger: function( data ) {
+
+				// For mutual compressibility with _default, replace `this` access with a local var.
+				// `|| data` is dead code meant only to preserve the variable through minification.
+				var el = this || data;
+
+				// Force setup before triggering a click
+				if ( rcheckableType.test( el.type ) &&
+					el.click && nodeName( el, "input" ) ) {
+
+					leverageNative( el, "click" );
+				}
+
+				// Return non-false to allow normal event-path propagation
+				return true;
+			},
+
+			// For cross-browser consistency, suppress native .click() on links
+			// Also prevent it if we're currently inside a leveraged native-event stack
+			_default: function( event ) {
+				var target = event.target;
+				return rcheckableType.test( target.type ) &&
+					target.click && nodeName( target, "input" ) &&
+					dataPriv.get( target, "click" ) ||
+					nodeName( target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	}
+};
+
+// Ensure the presence of an event listener that handles manually-triggered
+// synthetic events by interrupting progress until reinvoked in response to
+// *native* events that it fires directly, ensuring that state changes have
+// already occurred before other listeners are invoked.
+function leverageNative( el, type, expectSync ) {
+
+	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
+	if ( !expectSync ) {
+		if ( dataPriv.get( el, type ) === undefined ) {
+			jQuery.event.add( el, type, returnTrue );
+		}
+		return;
+	}
+
+	// Register the controller as a special universal handler for all event namespaces
+	dataPriv.set( el, type, false );
+	jQuery.event.add( el, type, {
+		namespace: false,
+		handler: function( event ) {
+			var notAsync, result,
+				saved = dataPriv.get( this, type );
+
+			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
+
+				// Interrupt processing of the outer synthetic .trigger()ed event
+				// Saved data should be false in such cases, but might be a leftover capture object
+				// from an async native handler (gh-4350)
+				if ( !saved.length ) {
+
+					// Store arguments for use when handling the inner native event
+					// There will always be at least one argument (an event object), so this array
+					// will not be confused with a leftover capture object.
+					saved = slice.call( arguments );
+					dataPriv.set( this, type, saved );
+
+					// Trigger the native event and capture its result
+					// Support: IE <=9 - 11+
+					// focus() and blur() are asynchronous
+					notAsync = expectSync( this, type );
+					this[ type ]();
+					result = dataPriv.get( this, type );
+					if ( saved !== result || notAsync ) {
+						dataPriv.set( this, type, false );
+					} else {
+						result = {};
+					}
+					if ( saved !== result ) {
+
+						// Cancel the outer synthetic event
+						event.stopImmediatePropagation();
+						event.preventDefault();
+						return result.value;
+					}
+
+				// If this is an inner synthetic event for an event with a bubbling surrogate
+				// (focus or blur), assume that the surrogate already propagated from triggering the
+				// native event and prevent that from happening again here.
+				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
+				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
+				// less bad than duplication.
+				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
+					event.stopPropagation();
+				}
+
+			// If this is a native event triggered above, everything is now in order
+			// Fire an inner synthetic event with the original arguments
+			} else if ( saved.length ) {
+
+				// ...and capture the result
+				dataPriv.set( this, type, {
+					value: jQuery.event.trigger(
+
+						// Support: IE <=9 - 11+
+						// Extend with the prototype to reset the above stopImmediatePropagation()
+						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
+						saved.slice( 1 ),
+						this
+					)
+				} );
+
+				// Abort handling of the native event
+				event.stopImmediatePropagation();
+			}
+		}
+	} );
+}
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+	// This "if" is needed for plain objects
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: Android <=2.3 only
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+		// Create target properties
+		// Support: Safari <=6 - 7 only
+		// Target should not be a text node (#504, #13143)
+		this.target = ( src.target && src.target.nodeType === 3 ) ?
+			src.target.parentNode :
+			src.target;
+
+		this.currentTarget = src.currentTarget;
+		this.relatedTarget = src.relatedTarget;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || Date.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+	isSimulated: false,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+	altKey: true,
+	bubbles: true,
+	cancelable: true,
+	changedTouches: true,
+	ctrlKey: true,
+	detail: true,
+	eventPhase: true,
+	metaKey: true,
+	pageX: true,
+	pageY: true,
+	shiftKey: true,
+	view: true,
+	"char": true,
+	code: true,
+	charCode: true,
+	key: true,
+	keyCode: true,
+	button: true,
+	buttons: true,
+	clientX: true,
+	clientY: true,
+	offsetX: true,
+	offsetY: true,
+	pointerId: true,
+	pointerType: true,
+	screenX: true,
+	screenY: true,
+	targetTouches: true,
+	toElement: true,
+	touches: true,
+
+	which: function( event ) {
+		var button = event.button;
+
+		// Add which for key events
+		if ( event.which == null && rkeyEvent.test( event.type ) ) {
+			return event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+			if ( button & 1 ) {
+				return 1;
+			}
+
+			if ( button & 2 ) {
+				return 3;
+			}
+
+			if ( button & 4 ) {
+				return 2;
+			}
+
+			return 0;
+		}
+
+		return event.which;
+	}
+}, jQuery.event.addProp );
+
+jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
+	jQuery.event.special[ type ] = {
+
+		// Utilize native event if possible so blur/focus sequence is correct
+		setup: function() {
+
+			// Claim the first handler
+			// dataPriv.set( this, "focus", ... )
+			// dataPriv.set( this, "blur", ... )
+			leverageNative( this, type, expectSync );
+
+			// Return false to allow normal processing in the caller
+			return false;
+		},
+		trigger: function() {
+
+			// Force setup before trigger
+			leverageNative( this, type );
+
+			// Return non-false to allow normal event-path propagation
+			return true;
+		},
+
+		delegateType: delegateType
+	};
+} );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+jQuery.fn.extend( {
+
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	}
+} );
+
+
+var
+
+	// Support: IE <=10 - 11, Edge 12 - 13 only
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+	if ( nodeName( elem, "table" ) &&
+		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
+	}
+
+	return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
+		elem.type = elem.type.slice( 5 );
+	} else {
+		elem.removeAttribute( "type" );
+	}
+
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( dataPriv.hasData( src ) ) {
+		pdataOld = dataPriv.get( src );
+		events = pdataOld.events;
+
+		if ( events ) {
+			dataPriv.remove( dest, "handle events" );
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( dataUser.hasData( src ) ) {
+		udataOld = dataUser.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		dataUser.set( dest, udataCur );
+	}
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = flat( args );
+
+	var fragment, first, scripts, hasScripts, node, doc,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		valueIsFunction = isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( valueIsFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( valueIsFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android <=4.0 only, PhantomJS 1 only
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!dataPriv.access( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl && !node.noModule ) {
+								jQuery._evalUrl( node.src, {
+									nonce: node.nonce || node.getAttribute( "nonce" )
+								}, doc );
+							}
+						} else {
+							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		nodes = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && isAttached( node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html;
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = isAttached( elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+			if ( acceptData( elem ) ) {
+				if ( ( data = elem[ dataPriv.expando ] ) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataPriv.expando ] = undefined;
+				}
+				if ( elem[ dataUser.expando ] ) {
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataUser.expando ] = undefined;
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each( function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				} );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: Android <=4.0 only, PhantomJS 1 only
+			// .get() because push.apply(_, arraylike) throws on ancient WebKit
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+var swap = function( elem, options, callback ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.call( elem );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
+
+
+
+( function() {
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computeStyleTests() {
+
+		// This is a singleton, we need to execute it only once
+		if ( !div ) {
+			return;
+		}
+
+		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
+			"margin-top:1px;padding:0;border:0";
+		div.style.cssText =
+			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"width:60%;top:1%";
+		documentElement.appendChild( container ).appendChild( div );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+
+		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
+
+		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.right = "60%";
+		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
+
+		// Support: IE 9 - 11 only
+		// Detect misreporting of content dimensions for box-sizing:border-box elements
+		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
+
+		// Support: IE 9 only
+		// Detect overflow:scroll screwiness (gh-3699)
+		// Support: Chrome <=64
+		// Don't get tricked when zoom affects offsetWidth (gh-4029)
+		div.style.position = "absolute";
+		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
+
+		documentElement.removeChild( container );
+
+		// Nullify the div so it wouldn't be stored in the memory and
+		// it will also be a sign that checks already performed
+		div = null;
+	}
+
+	function roundPixelMeasures( measure ) {
+		return Math.round( parseFloat( measure ) );
+	}
+
+	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
+		reliableTrDimensionsVal, reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE <=9 - 11 only
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	jQuery.extend( support, {
+		boxSizingReliable: function() {
+			computeStyleTests();
+			return boxSizingReliableVal;
+		},
+		pixelBoxStyles: function() {
+			computeStyleTests();
+			return pixelBoxStylesVal;
+		},
+		pixelPosition: function() {
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		reliableMarginLeft: function() {
+			computeStyleTests();
+			return reliableMarginLeftVal;
+		},
+		scrollboxSize: function() {
+			computeStyleTests();
+			return scrollboxSizeVal;
+		},
+
+		// Support: IE 9 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Behavior in IE 9 is more subtle than in newer versions & it passes
+		// some versions of this test; make sure not to make it pass there!
+		reliableTrDimensions: function() {
+			var table, tr, trChild, trStyle;
+			if ( reliableTrDimensionsVal == null ) {
+				table = document.createElement( "table" );
+				tr = document.createElement( "tr" );
+				trChild = document.createElement( "div" );
+
+				table.style.cssText = "position:absolute;left:-11111px";
+				tr.style.height = "1px";
+				trChild.style.height = "9px";
+
+				documentElement
+					.appendChild( table )
+					.appendChild( tr )
+					.appendChild( trChild );
+
+				trStyle = window.getComputedStyle( tr );
+				reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
+
+				documentElement.removeChild( table );
+			}
+			return reliableTrDimensionsVal;
+		}
+	} );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+
+		// Support: Firefox 51+
+		// Retrieving style before computed somehow
+		// fixes an issue with getting wrong values
+		// on detached elements
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+
+	// getPropertyValue is needed for:
+	//   .css('filter') (IE 9 only, #12537)
+	//   .css('--customProperty) (#3144)
+	if ( computed ) {
+		ret = computed.getPropertyValue( name ) || computed[ name ];
+
+		if ( ret === "" && !isAttached( elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// Android Browser returns percentage for some values,
+		// but width seems to be reliably pixels.
+		// This is against the CSSOM draft spec:
+		// https://drafts.csswg.org/cssom/#resolved-values
+		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+
+		// Support: IE <=9 - 11 only
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var cssPrefixes = [ "Webkit", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style,
+	vendorProps = {};
+
+// Return a vendor-prefixed property or undefined
+function vendorPropName( name ) {
+
+	// Check for vendor prefixed names
+	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
+function finalPropName( name ) {
+	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
+
+	if ( final ) {
+		return final;
+	}
+	if ( name in emptyStyle ) {
+		return name;
+	}
+	return vendorProps[ name ] = vendorPropName( name ) || name;
+}
+
+
+var
+
+	// Swappable if display is none or starts with table
+	// except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rcustomProp = /^--/,
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	};
+
+function setPositiveNumber( _elem, value, subtract ) {
+
+	// Any relative (+/-) values have already been
+	// normalized at this point
+	var matches = rcssNum.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+		value;
+}
+
+function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
+	var i = dimension === "width" ? 1 : 0,
+		extra = 0,
+		delta = 0;
+
+	// Adjustment may not be necessary
+	if ( box === ( isBorderBox ? "border" : "content" ) ) {
+		return 0;
+	}
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin
+		if ( box === "margin" ) {
+			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
+		}
+
+		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
+		if ( !isBorderBox ) {
+
+			// Add padding
+			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// For "border" or "margin", add border
+			if ( box !== "padding" ) {
+				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+
+			// But still keep track of it otherwise
+			} else {
+				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+
+		// If we get here with a border-box (content + padding + border), we're seeking "content" or
+		// "padding" or "margin"
+		} else {
+
+			// For "content", subtract padding
+			if ( box === "content" ) {
+				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// For "content" or "padding", subtract border
+			if ( box !== "margin" ) {
+				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	// Account for positive content-box scroll gutter when requested by providing computedVal
+	if ( !isBorderBox && computedVal >= 0 ) {
+
+		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
+		// Assuming integer scroll gutter, subtract the rest and round down
+		delta += Math.max( 0, Math.ceil(
+			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+			computedVal -
+			delta -
+			extra -
+			0.5
+
+		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
+		// Use an explicit zero to avoid NaN (gh-3964)
+		) ) || 0;
+	}
+
+	return delta;
+}
+
+function getWidthOrHeight( elem, dimension, extra ) {
+
+	// Start with computed style
+	var styles = getStyles( elem ),
+
+		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
+		// Fake content-box until we know it's needed to know the true value.
+		boxSizingNeeded = !support.boxSizingReliable() || extra,
+		isBorderBox = boxSizingNeeded &&
+			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+		valueIsBorderBox = isBorderBox,
+
+		val = curCSS( elem, dimension, styles ),
+		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
+
+	// Support: Firefox <=54
+	// Return a confounding non-pixel value or feign ignorance, as appropriate.
+	if ( rnumnonpx.test( val ) ) {
+		if ( !extra ) {
+			return val;
+		}
+		val = "auto";
+	}
+
+
+	// Support: IE 9 - 11 only
+	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
+	// In those cases, the computed value can be trusted to be border-box.
+	if ( ( !support.boxSizingReliable() && isBorderBox ||
+
+		// Support: IE 10 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
+		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
+
+		// Fall back to offsetWidth/offsetHeight when value is "auto"
+		// This happens for inline elements with no explicit setting (gh-3571)
+		val === "auto" ||
+
+		// Support: Android <=4.1 - 4.3 only
+		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
+		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
+
+		// Make sure the element is visible & connected
+		elem.getClientRects().length ) {
+
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
+		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
+		// retrieved value as a content box dimension.
+		valueIsBorderBox = offsetProp in elem;
+		if ( valueIsBorderBox ) {
+			val = elem[ offsetProp ];
+		}
+	}
+
+	// Normalize "" and auto
+	val = parseFloat( val ) || 0;
+
+	// Adjust for the element's box model
+	return ( val +
+		boxModelAdjustment(
+			elem,
+			dimension,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles,
+
+			// Provide the current computed size to request scroll gutter calculation (gh-3589)
+			val
+		)
+	) + "px";
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"gridArea": true,
+		"gridColumn": true,
+		"gridColumnEnd": true,
+		"gridColumnStart": true,
+		"gridRow": true,
+		"gridRowEnd": true,
+		"gridRowStart": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = camelCase( name ),
+			isCustomProp = rcustomProp.test( name ),
+			style = elem.style;
+
+		// Make sure that we're working with the right name. We don't
+		// want to query the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
+			// "px" to a few hardcoded values.
+			if ( type === "number" && !isCustomProp ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				if ( isCustomProp ) {
+					style.setProperty( name, value );
+				} else {
+					style[ name ] = value;
+				}
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = camelCase( name ),
+			isCustomProp = rcustomProp.test( name );
+
+		// Make sure that we're working with the right name. We don't
+		// want to modify the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( _i, dimension ) {
+	jQuery.cssHooks[ dimension ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+					// Support: Safari 8+
+					// Table columns in Safari have non-zero offsetWidth & zero
+					// getBoundingClientRect().width unless display is changed.
+					// Support: IE <=11 only
+					// Running getBoundingClientRect on a disconnected node
+					// in IE throws an error.
+					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, dimension, extra );
+						} ) :
+						getWidthOrHeight( elem, dimension, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = getStyles( elem ),
+
+				// Only read styles.position if the test has a chance to fail
+				// to avoid forcing a reflow.
+				scrollboxSizeBuggy = !support.scrollboxSize() &&
+					styles.position === "absolute",
+
+				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
+				boxSizingNeeded = scrollboxSizeBuggy || extra,
+				isBorderBox = boxSizingNeeded &&
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+				subtract = extra ?
+					boxModelAdjustment(
+						elem,
+						dimension,
+						extra,
+						isBorderBox,
+						styles
+					) :
+					0;
+
+			// Account for unreliable border-box dimensions by comparing offset* to computed and
+			// faking a content-box to get border and padding (gh-3699)
+			if ( isBorderBox && scrollboxSizeBuggy ) {
+				subtract -= Math.ceil(
+					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+					parseFloat( styles[ dimension ] ) -
+					boxModelAdjustment( elem, dimension, "border", false, styles ) -
+					0.5
+				);
+			}
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ dimension ] = value;
+				value = jQuery.css( elem, dimension );
+			}
+
+			return setPositiveNumber( elem, value, subtract );
+		}
+	};
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+				elem.getBoundingClientRect().left -
+					swap( elem, { marginLeft: 0 }, function() {
+						return elem.getBoundingClientRect().left;
+					} )
+				) + "px";
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( prefix !== "margin" ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( Array.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 && (
+					jQuery.cssHooks[ tween.prop ] ||
+					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, inProgress,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+function schedule() {
+	if ( inProgress ) {
+		if ( document.hidden === false && window.requestAnimationFrame ) {
+			window.requestAnimationFrame( schedule );
+		} else {
+			window.setTimeout( schedule, jQuery.fx.interval );
+		}
+
+		jQuery.fx.tick();
+	}
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = Date.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+		isBox = "width" in props || "height" in props,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHiddenWithinTree( elem ),
+		dataShow = dataPriv.get( elem, "fxshow" );
+
+	// Queue-skipping animations hijack the fx hooks
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// Ensure the complete handler is called before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// Detect show/hide animations
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.test( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// Pretend to be hidden if this is a "show" and
+				// there is still data from a stopped show/hide
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+
+				// Ignore all other no-op show/hide data
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+		}
+	}
+
+	// Bail out if this is a no-op like .hide().hide()
+	propTween = !jQuery.isEmptyObject( props );
+	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+		return;
+	}
+
+	// Restrict "overflow" and "display" styles during box animations
+	if ( isBox && elem.nodeType === 1 ) {
+
+		// Support: IE <=9 - 11, Edge 12 - 15
+		// Record all 3 overflow attributes because IE does not infer the shorthand
+		// from identically-valued overflowX and overflowY and Edge just mirrors
+		// the overflowX value there.
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Identify a display type, preferring old show/hide data over the CSS cascade
+		restoreDisplay = dataShow && dataShow.display;
+		if ( restoreDisplay == null ) {
+			restoreDisplay = dataPriv.get( elem, "display" );
+		}
+		display = jQuery.css( elem, "display" );
+		if ( display === "none" ) {
+			if ( restoreDisplay ) {
+				display = restoreDisplay;
+			} else {
+
+				// Get nonempty value(s) by temporarily forcing visibility
+				showHide( [ elem ], true );
+				restoreDisplay = elem.style.display || restoreDisplay;
+				display = jQuery.css( elem, "display" );
+				showHide( [ elem ] );
+			}
+		}
+
+		// Animate inline elements as inline-block
+		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+			if ( jQuery.css( elem, "float" ) === "none" ) {
+
+				// Restore the original display value at the end of pure show/hide animations
+				if ( !propTween ) {
+					anim.done( function() {
+						style.display = restoreDisplay;
+					} );
+					if ( restoreDisplay == null ) {
+						display = style.display;
+						restoreDisplay = display === "none" ? "" : display;
+					}
+				}
+				style.display = "inline-block";
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always( function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		} );
+	}
+
+	// Implement show/hide animations
+	propTween = false;
+	for ( prop in orig ) {
+
+		// General show/hide setup for this element animation
+		if ( !propTween ) {
+			if ( dataShow ) {
+				if ( "hidden" in dataShow ) {
+					hidden = dataShow.hidden;
+				}
+			} else {
+				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+			}
+
+			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+			if ( toggle ) {
+				dataShow.hidden = !hidden;
+			}
+
+			// Show elements before animating them
+			if ( hidden ) {
+				showHide( [ elem ], true );
+			}
+
+			/* eslint-disable no-loop-func */
+
+			anim.done( function() {
+
+			/* eslint-enable no-loop-func */
+
+				// The final step of a "hide" animation is actually hiding the element
+				if ( !hidden ) {
+					showHide( [ elem ] );
+				}
+				dataPriv.remove( elem, "fxshow" );
+				for ( prop in orig ) {
+					jQuery.style( elem, prop, orig[ prop ] );
+				}
+			} );
+		}
+
+		// Per-property setup
+		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+		if ( !( prop in dataShow ) ) {
+			dataShow[ prop ] = propTween.start;
+			if ( hidden ) {
+				propTween.end = propTween.start;
+				propTween.start = 0;
+			}
+		}
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( Array.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3 only
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			// If there's more to do, yield
+			if ( percent < 1 && length ) {
+				return remaining;
+			}
+
+			// If this was an empty animation, synthesize a final progress notification
+			if ( !length ) {
+				deferred.notifyWith( elem, [ animation, 1, 0 ] );
+			}
+
+			// Resolve the animation and report its conclusion
+			deferred.resolveWith( elem, [ animation ] );
+			return false;
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					result.stop.bind( result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	// Attach callbacks from options
+	animation
+		.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnothtmlwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !isFunction( easing ) && easing
+	};
+
+	// Go to the end state if fx are off
+	if ( jQuery.fx.off ) {
+		opt.duration = 0;
+
+	} else {
+		if ( typeof opt.duration !== "number" ) {
+			if ( opt.duration in jQuery.fx.speeds ) {
+				opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+			} else {
+				opt.duration = jQuery.fx.speeds._default;
+			}
+		}
+	}
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || dataPriv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = dataPriv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = dataPriv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = Date.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Run the timer and safely remove it when done (allowing for external removal)
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+	if ( inProgress ) {
+		return;
+	}
+
+	inProgress = true;
+	schedule();
+};
+
+jQuery.fx.stop = function() {
+	inProgress = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: Android <=4.3 only
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE <=11 only
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: IE <=11 only
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// Attribute hooks are determined by the lowercase version
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name,
+			i = 0,
+
+			// Attribute names can contain non-HTML whitespace characters
+			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+			attrNames = value && value.match( rnothtmlwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				elem.removeAttribute( name );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle,
+			lowercaseName = name.toLowerCase();
+
+		if ( !isXML ) {
+
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ lowercaseName ];
+			attrHandle[ lowercaseName ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				lowercaseName :
+				null;
+			attrHandle[ lowercaseName ] = handle;
+		}
+		return ret;
+	};
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each( function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// Support: IE <=9 - 11 only
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				if ( tabindex ) {
+					return parseInt( tabindex, 10 );
+				}
+
+				if (
+					rfocusable.test( elem.nodeName ) ||
+					rclickable.test( elem.nodeName ) &&
+					elem.href
+				) {
+					return 0;
+				}
+
+				return -1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		},
+		set: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent ) {
+				parent.selectedIndex;
+
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+	// Strip and collapse whitespace according to HTML spec
+	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
+	function stripAndCollapse( value ) {
+		var tokens = value.match( rnothtmlwhite ) || [];
+		return tokens.join( " " );
+	}
+
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+function classesToArray( value ) {
+	if ( Array.isArray( value ) ) {
+		return value;
+	}
+	if ( typeof value === "string" ) {
+		return value.match( rnothtmlwhite ) || [];
+	}
+	return [];
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isValidValue = type === "string" || Array.isArray( value );
+
+		if ( typeof stateVal === "boolean" && isValidValue ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( isValidValue ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = classesToArray( value );
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// Store className if set
+					dataPriv.set( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				if ( this.setAttribute ) {
+					this.setAttribute( "class",
+						className || value === false ?
+						"" :
+						dataPriv.get( this, "__className__" ) || ""
+					);
+				}
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+					return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, valueIsFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				// Handle most common string cases
+				if ( typeof ret === "string" ) {
+					return ret.replace( rreturn, "" );
+				}
+
+				// Handle cases where value is null/undef or number
+				return ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		valueIsFunction = isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( valueIsFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( Array.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE <=10 - 11 only
+					// option.text throws exceptions (#14686, #14858)
+					// Strip and collapse whitespace
+					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+					stripAndCollapse( jQuery.text( elem ) );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option, i,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one",
+					values = one ? null : [],
+					max = one ? index + 1 : options.length;
+
+				if ( index < 0 ) {
+					i = max;
+
+				} else {
+					i = one ? index : 0;
+				}
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// Support: IE <=9 only
+					// IE8-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							!option.disabled &&
+							( !option.parentNode.disabled ||
+								!nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+
+					/* eslint-disable no-cond-assign */
+
+					if ( option.selected =
+						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+					) {
+						optionSet = true;
+					}
+
+					/* eslint-enable no-cond-assign */
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( Array.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+support.focusin = "onfocusin" in window;
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	stopPropagationCallback = function( e ) {
+		e.stopPropagation();
+	};
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = lastElement = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+			lastElement = cur;
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = (
+					dataPriv.get( cur, "events" ) || Object.create( null )
+				)[ event.type ] &&
+				dataPriv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( ( !special._default ||
+				special._default.apply( eventPath.pop(), data ) === false ) &&
+				acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.addEventListener( type, stopPropagationCallback );
+					}
+
+					elem[ type ]();
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.removeEventListener( type, stopPropagationCallback );
+					}
+
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	// Used only for `focus(in | out)` events
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+	}
+
+} );
+
+jQuery.fn.extend( {
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+
+				// Handle: regular nodes (via `this.ownerDocument`), window
+				// (via `this.document`) & document (via `this`).
+				var doc = this.ownerDocument || this.document || this,
+					attaches = dataPriv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this.document || this,
+					attaches = dataPriv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					dataPriv.remove( doc, fix );
+
+				} else {
+					dataPriv.access( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+var location = window.location;
+
+var nonce = { guid: Date.now() };
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE 9 - 11 only
+	// IE throws on parseFromString with invalid input.
+	try {
+		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( Array.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && toType( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, valueOrFunction ) {
+
+			// If value is a function, invoke it and use its return value
+			var value = isFunction( valueOrFunction ) ?
+				valueOrFunction() :
+				valueOrFunction;
+
+			s[ s.length ] = encodeURIComponent( key ) + "=" +
+				encodeURIComponent( value == null ? "" : value );
+		};
+
+	if ( a == null ) {
+		return "";
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( _i, elem ) {
+			var val = jQuery( this ).val();
+
+			if ( val == null ) {
+				return null;
+			}
+
+			if ( Array.isArray( val ) ) {
+				return jQuery.map( val, function( val ) {
+					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+				} );
+			}
+
+			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+var
+	r20 = /%20/g,
+	rhash = /#.*$/,
+	rantiCache = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+		if ( isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+			// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": JSON.parse,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// Request state (becomes false upon send and true upon completion)
+			completed,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// uncached part of the url
+			uncached,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( completed ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
+									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
+										.concat( match[ 2 ] );
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() + " " ];
+					}
+					return match == null ? null : match.join( ", " );
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return completed ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( completed == null ) {
+						name = requestHeadersNames[ name.toLowerCase() ] =
+							requestHeadersNames[ name.toLowerCase() ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( completed == null ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( completed ) {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						} else {
+
+							// Lazy-add the new callbacks in a way that preserves old ones
+							for ( code in map ) {
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE <=8 - 11, Edge 12 - 15
+			// IE throws exception on accessing the href property if url is malformed,
+			// e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE <=8 - 11 only
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( completed ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		// Remove hash to simplify url manipulation
+		cacheURL = s.url.replace( rhash, "" );
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// Remember the hash so we can put it back
+			uncached = s.url.slice( cacheURL.length );
+
+			// If data is available and should be processed, append data to url
+			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
+				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add or update anti-cache param if needed
+			if ( s.cache === false ) {
+				cacheURL = cacheURL.replace( rantiCache, "$1" );
+				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
+					uncached;
+			}
+
+			// Put hash and anti-cache on the URL that will be requested (gh-1732)
+			s.url = cacheURL + uncached;
+
+		// Change '%20' to '+' if this is encoded form body content (gh-2658)
+		} else if ( s.data && s.processData &&
+			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+			s.data = s.data.replace( r20, "+" );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		completeDeferred.add( s.complete );
+		jqXHR.done( s.success );
+		jqXHR.fail( s.error );
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( completed ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				completed = false;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Rethrow post-completion exceptions
+				if ( completed ) {
+					throw e;
+				}
+
+				// Propagate others as results
+				done( -1, e );
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Ignore repeat invocations
+			if ( completed ) {
+				return;
+			}
+
+			completed = true;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Use a noop converter for missing script
+			if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
+				s.converters[ "text script" ] = function() {};
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( _i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+jQuery.ajaxPrefilter( function( s ) {
+	var i;
+	for ( i in s.headers ) {
+		if ( i.toLowerCase() === "content-type" ) {
+			s.contentType = s.headers[ i ] || "";
+		}
+	}
+} );
+
+
+jQuery._evalUrl = function( url, options, doc ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		cache: true,
+		async: false,
+		global: false,
+
+		// Only evaluate the response if it is successful (gh-4126)
+		// dataFilter is not invoked for failure responses, so using it instead
+		// of the default converter is kludgy but it works.
+		converters: {
+			"text script": function() {}
+		},
+		dataFilter: function( response ) {
+			jQuery.globalEval( response, options, doc );
+		}
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( this[ 0 ] ) {
+			if ( isFunction( html ) ) {
+				html = html.call( this[ 0 ] );
+			}
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var htmlIsFunction = isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function( selector ) {
+		this.parent( selector ).not( "body" ).each( function() {
+			jQuery( this ).replaceWith( this.childNodes );
+		} );
+		return this;
+	}
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+	return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+		// File protocol always yields status code 0, assume 200
+		0: 200,
+
+		// Support: IE <=9 only
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+	var callback, errorCallback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr();
+
+				xhr.open(
+					options.type,
+					options.url,
+					options.async,
+					options.username,
+					options.password
+				);
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+					headers[ "X-Requested-With" ] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							callback = errorCallback = xhr.onload =
+								xhr.onerror = xhr.onabort = xhr.ontimeout =
+									xhr.onreadystatechange = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+
+								// Support: IE <=9 only
+								// On a manual native abort, IE9 throws
+								// errors on any property access that is not readyState
+								if ( typeof xhr.status !== "number" ) {
+									complete( 0, "error" );
+								} else {
+									complete(
+
+										// File: protocol always yields status 0; see #8605, #14207
+										xhr.status,
+										xhr.statusText
+									);
+								}
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+
+									// Support: IE <=9 only
+									// IE9 has no XHR2 but throws on binary (trac-11426)
+									// For XHR2 non-text, let the caller handle it (gh-2498)
+									( xhr.responseType || "text" ) !== "text"  ||
+									typeof xhr.responseText !== "string" ?
+										{ binary: xhr.response } :
+										{ text: xhr.responseText },
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
+
+				// Support: IE 9 only
+				// Use onreadystatechange to replace onabort
+				// to handle uncaught aborts
+				if ( xhr.onabort !== undefined ) {
+					xhr.onabort = errorCallback;
+				} else {
+					xhr.onreadystatechange = function() {
+
+						// Check readyState before timeout as it changes
+						if ( xhr.readyState === 4 ) {
+
+							// Allow onerror to be called first,
+							// but that will not handle a native abort
+							// Also, save errorCallback to a variable
+							// as xhr.onerror cannot be accessed
+							window.setTimeout( function() {
+								if ( callback ) {
+									errorCallback();
+								}
+							} );
+						}
+					};
+				}
+
+				// Create the abort callback
+				callback = callback( "abort" );
+
+				try {
+
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+	if ( s.crossDomain ) {
+		s.contents.script = false;
+	}
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain or forced-by-attrs requests
+	if ( s.crossDomain || s.scriptAttrs ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery( "<script>" )
+					.attr( s.scriptAttrs || {} )
+					.prop( { charset: s.scriptCharset, src: s.url } )
+					.on( "load error", callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					} );
+
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+	var body = document.implementation.createHTMLDocument( "" ).body;
+	body.innerHTML = "<form></form><form></form>";
+	return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( typeof data !== "string" ) {
+		return [];
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+
+	var base, parsed, scripts;
+
+	if ( !context ) {
+
+		// Stop scripts or inline event handlers from being executed immediately
+		// by using document.implementation
+		if ( support.createHTMLDocument ) {
+			context = document.implementation.createHTMLDocument( "" );
+
+			// Set the base href for the created document
+			// so any parsed elements with URLs
+			// are based on the document's URL (gh-2965)
+			base = context.createElement( "base" );
+			base.href = document.location.href;
+			context.head.appendChild( base );
+		} else {
+			context = document;
+		}
+	}
+
+	parsed = rsingleTag.exec( data );
+	scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = stripAndCollapse( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			if ( typeof props.top === "number" ) {
+				props.top += "px";
+			}
+			if ( typeof props.left === "number" ) {
+				props.left += "px";
+			}
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+
+	// offset() relates an element's border box to the document origin
+	offset: function( options ) {
+
+		// Preserve chaining for setter
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var rect, win,
+			elem = this[ 0 ];
+
+		if ( !elem ) {
+			return;
+		}
+
+		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+		// Support: IE <=11 only
+		// Running getBoundingClientRect on a
+		// disconnected node in IE throws an error
+		if ( !elem.getClientRects().length ) {
+			return { top: 0, left: 0 };
+		}
+
+		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
+		rect = elem.getBoundingClientRect();
+		win = elem.ownerDocument.defaultView;
+		return {
+			top: rect.top + win.pageYOffset,
+			left: rect.left + win.pageXOffset
+		};
+	},
+
+	// position() relates an element's margin box to its offset parent's padding box
+	// This corresponds to the behavior of CSS absolute positioning
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset, doc,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// position:fixed elements are offset from the viewport, which itself always has zero offset
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume position:fixed implies availability of getBoundingClientRect
+			offset = elem.getBoundingClientRect();
+
+		} else {
+			offset = this.offset();
+
+			// Account for the *real* offset parent, which can be the document or its root element
+			// when a statically positioned element is identified
+			doc = elem.ownerDocument;
+			offsetParent = elem.offsetParent || doc.documentElement;
+			while ( offsetParent &&
+				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
+				jQuery.css( offsetParent, "position" ) === "static" ) {
+
+				offsetParent = offsetParent.parentNode;
+			}
+			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
+
+				// Incorporate borders into its offset, since they are outside its content origin
+				parentOffset = jQuery( offsetParent ).offset();
+				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
+				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
+			}
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	// This method will return documentElement in the following cases:
+	// 1) For the element inside the iframe without offsetParent, this method will return
+	//    documentElement of the parent window
+	// 2) For the hidden or detached element
+	// 3) For body or html element, i.e. in case of the html node - it will return itself
+	//
+	// but those exceptions were never presented as a real life use-cases
+	// and might be considered as more preferable results.
+	//
+	// This logic, however, is not guaranteed and can change at any point in the future
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+
+			// Coalesce documents and windows
+			var win;
+			if ( isWindow( elem ) ) {
+				win = elem;
+			} else if ( elem.nodeType === 9 ) {
+				win = elem.defaultView;
+			}
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : win.pageXOffset,
+					top ? val : win.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length );
+	};
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( _i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+		function( defaultExtra, funcName ) {
+
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( isWindow( elem ) ) {
+
+					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+					return funcName.indexOf( "outer" ) === 0 ?
+						elem[ "inner" + name ] :
+						elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable );
+		};
+	} );
+} );
+
+
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( _i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
+	function( _i, name ) {
+
+		// Handle event binding
+		jQuery.fn[ name ] = function( data, fn ) {
+			return arguments.length > 0 ?
+				this.on( name, null, data, fn ) :
+				this.trigger( name );
+		};
+	} );
+
+
+
+
+// Support: Android <=4.0 only
+// Make sure we trim BOM and NBSP
+var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
+// Bind a function to a context, optionally partially applying any
+// arguments.
+// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
+// However, it is not slated for removal any time soon
+jQuery.proxy = function( fn, context ) {
+	var tmp, args, proxy;
+
+	if ( typeof context === "string" ) {
+		tmp = fn[ context ];
+		context = fn;
+		fn = tmp;
+	}
+
+	// Quick check to determine if target is callable, in the spec
+	// this throws a TypeError, but we will just return undefined.
+	if ( !isFunction( fn ) ) {
+		return undefined;
+	}
+
+	// Simulated bind
+	args = slice.call( arguments, 2 );
+	proxy = function() {
+		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+	};
+
+	// Set the guid of unique handler to the same of original handler, so it can be removed
+	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+	return proxy;
+};
+
+jQuery.holdReady = function( hold ) {
+	if ( hold ) {
+		jQuery.readyWait++;
+	} else {
+		jQuery.ready( true );
+	}
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+jQuery.isFunction = isFunction;
+jQuery.isWindow = isWindow;
+jQuery.camelCase = camelCase;
+jQuery.type = toType;
+
+jQuery.now = Date.now;
+
+jQuery.isNumeric = function( obj ) {
+
+	// As of jQuery 3.0, isNumeric is limited to
+	// strings and numbers (primitives or objects)
+	// that can be coerced to finite numbers (gh-2662)
+	var type = jQuery.type( obj );
+	return ( type === "number" || type === "string" ) &&
+
+		// parseFloat NaNs numeric-cast false positives ("")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		!isNaN( obj - parseFloat( obj ) );
+};
+
+jQuery.trim = function( text ) {
+	return text == null ?
+		"" :
+		( text + "" ).replace( rtrim, "" );
+};
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( typeof noGlobal === "undefined" ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/jquery.js b/VimbaX/doc/VimbaX_Documentation/_static/jquery.js
new file mode 100644
index 0000000000000000000000000000000000000000..b0614034ad3a95e4ae9f53c2b015eeb3e8d68bde
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/jquery.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/js/badge_only.js b/VimbaX/doc/VimbaX_Documentation/_static/js/badge_only.js
new file mode 100644
index 0000000000000000000000000000000000000000..526d7234b6538603393d419ae2330b3fd6e57ee8
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/js/badge_only.js
@@ -0,0 +1 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/js/html5shiv-printshiv.min.js b/VimbaX/doc/VimbaX_Documentation/_static/js/html5shiv-printshiv.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b43bd062e9689f9f4016931d08e7143d555539d
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/js/html5shiv-printshiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/js/html5shiv.min.js b/VimbaX/doc/VimbaX_Documentation/_static/js/html5shiv.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd1c674f5e3a290a12386156500df3c50903a46b
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/js/html5shiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/js/theme.js b/VimbaX/doc/VimbaX_Documentation/_static/js/theme.js
new file mode 100644
index 0000000000000000000000000000000000000000..1fddb6ee4a60f30b4a4c4b3ad1f1604043f77981
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/js/theme.js
@@ -0,0 +1 @@
+!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),n("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),n("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n('<button class="toctree-expand" title="Open/close menu"></button>'),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e,t){var i=(new Date).getTime(),o=Math.max(0,16-(i-n)),r=window.setTimeout((function(){e(i+o)}),o);return n=i+o,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()}).call(window)},function(n,e){n.exports=jQuery},function(n,e,t){}]);
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/language_data.js b/VimbaX/doc/VimbaX_Documentation/_static/language_data.js
new file mode 100644
index 0000000000000000000000000000000000000000..ebe2f03bf03b7f72481f8f483039ef9b7013f062
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/language_data.js
@@ -0,0 +1,297 @@
+/*
+ * language_data.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * This script contains the language-specific data used by searchtools.js,
+ * namely the list of stopwords, stemmer, scorer and splitter.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
+
+
+/* Non-minified version is copied as a separate JS file, is available */
+
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
+
+
+
+var splitChars = (function() {
+    var result = {};
+    var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
+         1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
+         2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
+         2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
+         3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
+         3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
+         4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
+         8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
+         11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
+         43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
+    var i, j, start, end;
+    for (i = 0; i < singles.length; i++) {
+        result[singles[i]] = true;
+    }
+    var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
+         [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
+         [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
+         [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
+         [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
+         [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
+         [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
+         [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
+         [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
+         [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
+         [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
+         [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
+         [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
+         [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
+         [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
+         [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
+         [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
+         [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
+         [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
+         [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
+         [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
+         [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
+         [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
+         [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
+         [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
+         [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
+         [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
+         [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
+         [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
+         [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
+         [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
+         [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
+         [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
+         [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
+         [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
+         [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
+         [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
+         [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
+         [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
+         [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
+         [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
+         [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
+         [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
+         [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
+         [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
+         [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
+         [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
+         [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
+         [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
+    for (i = 0; i < ranges.length; i++) {
+        start = ranges[i][0];
+        end = ranges[i][1];
+        for (j = start; j <= end; j++) {
+            result[j] = true;
+        }
+    }
+    return result;
+})();
+
+function splitQuery(query) {
+    var result = [];
+    var start = -1;
+    for (var i = 0; i < query.length; i++) {
+        if (splitChars[query.charCodeAt(i)]) {
+            if (start !== -1) {
+                result.push(query.slice(start, i));
+                start = -1;
+            }
+        } else if (start === -1) {
+            start = i;
+        }
+    }
+    if (start !== -1) {
+        result.push(query.slice(start));
+    }
+    return result;
+}
+
+
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/minus.png b/VimbaX/doc/VimbaX_Documentation/_static/minus.png
new file mode 100644
index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/minus.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/plus.png b/VimbaX/doc/VimbaX_Documentation/_static/plus.png
new file mode 100644
index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/_static/plus.png differ
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/pygments.css b/VimbaX/doc/VimbaX_Documentation/_static/pygments.css
new file mode 100644
index 0000000000000000000000000000000000000000..08bec689d3306e6c13d1973f61a01bee9a307e87
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/pygments.css
@@ -0,0 +1,74 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #9C6500 } /* Comment.Preproc */
+.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #E40000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #008400 } /* Generic.Inserted */
+.highlight .go { color: #717171 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #687822 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #767600 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #666666 } /* Literal.Number.Bin */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0000FF } /* Name.Function.Magic */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .vm { color: #19177C } /* Name.Variable.Magic */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/pygments_new.css b/VimbaX/doc/VimbaX_Documentation/_static/pygments_new.css
new file mode 100644
index 0000000000000000000000000000000000000000..feced5a969a074d6abb8d67c0f279d43d1558bb3
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/pygments_new.css
@@ -0,0 +1,69 @@
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #f8f8f8; }
+.highlight .c { color: #308000; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #308000; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #308000; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
+.highlight .cpf { color: #308000; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #308000; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #308000; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #7D9029 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #A0A000 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #666666 } /* Literal.Number.Bin */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0000FF } /* Name.Function.Magic */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .vm { color: #19177C } /* Name.Variable.Magic */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/searchtools.js b/VimbaX/doc/VimbaX_Documentation/_static/searchtools.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a44e8582f6eda32047831d454c09eced81622d2
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/searchtools.js
@@ -0,0 +1,525 @@
+/*
+ * searchtools.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for the full-text search.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+if (!Scorer) {
+  /**
+   * Simple result scoring code.
+   */
+  var Scorer = {
+    // Implement the following function to further tweak the score for each result
+    // The function takes a result array [filename, title, anchor, descr, score]
+    // and returns the new score.
+    /*
+    score: function(result) {
+      return result[4];
+    },
+    */
+
+    // query matches the full name of an object
+    objNameMatch: 11,
+    // or matches in the last dotted part of the object name
+    objPartialMatch: 6,
+    // Additive scores depending on the priority of the object
+    objPrio: {0:  15,   // used to be importantResults
+              1:  5,   // used to be objectResults
+              2: -5},  // used to be unimportantResults
+    //  Used when the priority is not in the mapping.
+    objPrioDefault: 0,
+
+    // query found in title
+    title: 15,
+    partialTitle: 7,
+    // query found in terms
+    term: 5,
+    partialTerm: 2
+  };
+}
+
+if (!splitQuery) {
+  function splitQuery(query) {
+    return query.split(/\s+/);
+  }
+}
+
+/**
+ * Search Module
+ */
+var Search = {
+
+  _index : null,
+  _queued_query : null,
+  _pulse_status : -1,
+
+  htmlToText : function(htmlString) {
+      var virtualDocument = document.implementation.createHTMLDocument('virtual');
+      var htmlElement = $(htmlString, virtualDocument);
+      htmlElement.find('.headerlink').remove();
+      docContent = htmlElement.find('[role=main]')[0];
+      if(docContent === undefined) {
+          console.warn("Content block not found. Sphinx search tries to obtain it " +
+                       "via '[role=main]'. Could you check your theme or template.");
+          return "";
+      }
+      return docContent.textContent || docContent.innerText;
+  },
+
+  init : function() {
+      var params = $.getQueryParameters();
+      if (params.q) {
+          var query = params.q[0];
+          $('input[name="q"]')[0].value = query;
+          this.performSearch(query);
+      }
+  },
+
+  loadIndex : function(url) {
+    $.ajax({type: "GET", url: url, data: null,
+            dataType: "script", cache: true,
+            complete: function(jqxhr, textstatus) {
+              if (textstatus != "success") {
+                document.getElementById("searchindexloader").src = url;
+              }
+            }});
+  },
+
+  setIndex : function(index) {
+    var q;
+    this._index = index;
+    if ((q = this._queued_query) !== null) {
+      this._queued_query = null;
+      Search.query(q);
+    }
+  },
+
+  hasIndex : function() {
+      return this._index !== null;
+  },
+
+  deferQuery : function(query) {
+      this._queued_query = query;
+  },
+
+  stopPulse : function() {
+      this._pulse_status = 0;
+  },
+
+  startPulse : function() {
+    if (this._pulse_status >= 0)
+        return;
+    function pulse() {
+      var i;
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      var dotString = '';
+      for (i = 0; i < Search._pulse_status; i++)
+        dotString += '.';
+      Search.dots.text(dotString);
+      if (Search._pulse_status > -1)
+        window.setTimeout(pulse, 500);
+    }
+    pulse();
+  },
+
+  /**
+   * perform a search for something (or wait until index is loaded)
+   */
+  performSearch : function(query) {
+    // create the required interface elements
+    this.out = $('#search-results');
+    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
+    this.dots = $('<span></span>').appendTo(this.title);
+    this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
+    this.output = $('<ul class="search"/>').appendTo(this.out);
+
+    $('#search-progress').text(_('Preparing search...'));
+    this.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (this.hasIndex())
+      this.query(query);
+    else
+      this.deferQuery(query);
+  },
+
+  /**
+   * execute search (requires search index to be loaded)
+   */
+  query : function(query) {
+    var i;
+
+    // stem the searchterms and add them to the correct list
+    var stemmer = new Stemmer();
+    var searchterms = [];
+    var excluded = [];
+    var hlterms = [];
+    var tmp = splitQuery(query);
+    var objectterms = [];
+    for (i = 0; i < tmp.length; i++) {
+      if (tmp[i] !== "") {
+          objectterms.push(tmp[i].toLowerCase());
+      }
+
+      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
+        // skip this "word"
+        continue;
+      }
+      // stem the word
+      var word = stemmer.stemWord(tmp[i].toLowerCase());
+      var toAppend;
+      // select the correct list
+      if (word[0] == '-') {
+        toAppend = excluded;
+        word = word.substr(1);
+      }
+      else {
+        toAppend = searchterms;
+        hlterms.push(tmp[i].toLowerCase());
+      }
+      // only add if not already in the list
+      if (!$u.contains(toAppend, word))
+        toAppend.push(word);
+    }
+    var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
+
+    // console.debug('SEARCH: searching for:');
+    // console.info('required: ', searchterms);
+    // console.info('excluded: ', excluded);
+
+    // prepare search
+    var terms = this._index.terms;
+    var titleterms = this._index.titleterms;
+
+    // array of [filename, title, anchor, descr, score]
+    var results = [];
+    $('#search-progress').empty();
+
+    // lookup as object
+    for (i = 0; i < objectterms.length; i++) {
+      var others = [].concat(objectterms.slice(0, i),
+                             objectterms.slice(i+1, objectterms.length));
+      results = results.concat(this.performObjectSearch(objectterms[i], others));
+    }
+
+    // lookup as search terms in fulltext
+    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
+
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) {
+      for (i = 0; i < results.length; i++)
+        results[i][4] = Scorer.score(results[i]);
+    }
+
+    // now sort the results by score (in opposite order of appearance, since the
+    // display function below uses pop() to retrieve items) and then
+    // alphabetically
+    results.sort(function(a, b) {
+      var left = a[4];
+      var right = b[4];
+      if (left > right) {
+        return 1;
+      } else if (left < right) {
+        return -1;
+      } else {
+        // same score: sort alphabetically
+        left = a[1].toLowerCase();
+        right = b[1].toLowerCase();
+        return (left > right) ? -1 : ((left < right) ? 1 : 0);
+      }
+    });
+
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    //console.info('search results:', Search.lastresults);
+
+    // print the results
+    var resultCount = results.length;
+    function displayNextItem() {
+      // results left, load the summary and display it
+      if (results.length) {
+        var item = results.pop();
+        var listItem = $('<li></li>');
+        var requestUrl = "";
+        var linkUrl = "";
+        if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
+          // dirhtml builder
+          var dirname = item[0] + '/';
+          if (dirname.match(/\/index\/$/)) {
+            dirname = dirname.substring(0, dirname.length-6);
+          } else if (dirname == 'index/') {
+            dirname = '';
+          }
+          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
+          linkUrl = requestUrl;
+
+        } else {
+          // normal html builders
+          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+          linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
+        }
+        listItem.append($('<a/>').attr('href',
+            linkUrl +
+            highlightstring + item[2]).html(item[1]));
+        if (item[3]) {
+          listItem.append($('<span> (' + item[3] + ')</span>'));
+          Search.output.append(listItem);
+          setTimeout(function() {
+            displayNextItem();
+          }, 5);
+        } else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) {
+          $.ajax({url: requestUrl,
+                  dataType: "text",
+                  complete: function(jqxhr, textstatus) {
+                    var data = jqxhr.responseText;
+                    if (data !== '' && data !== undefined) {
+                      var summary = Search.makeSearchSummary(data, searchterms, hlterms);
+                      if (summary) {
+                        listItem.append(summary);
+                      }
+                    }
+                    Search.output.append(listItem);
+                    setTimeout(function() {
+                      displayNextItem();
+                    }, 5);
+                  }});
+        } else {
+          // just display title
+          Search.output.append(listItem);
+          setTimeout(function() {
+            displayNextItem();
+          }, 5);
+        }
+      }
+      // search finished, update title and status message
+      else {
+        Search.stopPulse();
+        Search.title.text(_('Search Results'));
+        if (!resultCount)
+          Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
+        else
+            Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
+        Search.status.fadeIn(500);
+      }
+    }
+    displayNextItem();
+  },
+
+  /**
+   * search for object names
+   */
+  performObjectSearch : function(object, otherterms) {
+    var filenames = this._index.filenames;
+    var docnames = this._index.docnames;
+    var objects = this._index.objects;
+    var objnames = this._index.objnames;
+    var titles = this._index.titles;
+
+    var i;
+    var results = [];
+
+    for (var prefix in objects) {
+      for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
+        var match = objects[prefix][iMatch];
+        var name = match[4];
+        var fullname = (prefix ? prefix + '.' : '') + name;
+        var fullnameLower = fullname.toLowerCase()
+        if (fullnameLower.indexOf(object) > -1) {
+          var score = 0;
+          var parts = fullnameLower.split('.');
+          // check for different match types: exact matches of full name or
+          // "last name" (i.e. last dotted part)
+          if (fullnameLower == object || parts[parts.length - 1] == object) {
+            score += Scorer.objNameMatch;
+          // matches in last name
+          } else if (parts[parts.length - 1].indexOf(object) > -1) {
+            score += Scorer.objPartialMatch;
+          }
+          var objname = objnames[match[1]][2];
+          var title = titles[match[0]];
+          // If more than one term searched for, we require other words to be
+          // found in the name/title/description
+          if (otherterms.length > 0) {
+            var haystack = (prefix + ' ' + name + ' ' +
+                            objname + ' ' + title).toLowerCase();
+            var allfound = true;
+            for (i = 0; i < otherterms.length; i++) {
+              if (haystack.indexOf(otherterms[i]) == -1) {
+                allfound = false;
+                break;
+              }
+            }
+            if (!allfound) {
+              continue;
+            }
+          }
+          var descr = objname + _(', in ') + title;
+
+          var anchor = match[3];
+          if (anchor === '')
+            anchor = fullname;
+          else if (anchor == '-')
+            anchor = objnames[match[1]][1] + '-' + fullname;
+          // add custom score for some objects according to scorer
+          if (Scorer.objPrio.hasOwnProperty(match[2])) {
+            score += Scorer.objPrio[match[2]];
+          } else {
+            score += Scorer.objPrioDefault;
+          }
+          results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
+        }
+      }
+    }
+
+    return results;
+  },
+
+  /**
+   * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+   */
+  escapeRegExp : function(string) {
+    return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+  },
+
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch : function(searchterms, excluded, terms, titleterms) {
+    var docnames = this._index.docnames;
+    var filenames = this._index.filenames;
+    var titles = this._index.titles;
+
+    var i, j, file;
+    var fileMap = {};
+    var scoreMap = {};
+    var results = [];
+
+    // perform the search on the required terms
+    for (i = 0; i < searchterms.length; i++) {
+      var word = searchterms[i];
+      var files = [];
+      var _o = [
+        {files: terms[word], score: Scorer.term},
+        {files: titleterms[word], score: Scorer.title}
+      ];
+      // add support for partial matches
+      if (word.length > 2) {
+        var word_regex = this.escapeRegExp(word);
+        for (var w in terms) {
+          if (w.match(word_regex) && !terms[word]) {
+            _o.push({files: terms[w], score: Scorer.partialTerm})
+          }
+        }
+        for (var w in titleterms) {
+          if (w.match(word_regex) && !titleterms[word]) {
+              _o.push({files: titleterms[w], score: Scorer.partialTitle})
+          }
+        }
+      }
+
+      // no match but word was a required one
+      if ($u.every(_o, function(o){return o.files === undefined;})) {
+        break;
+      }
+      // found search word in contents
+      $u.each(_o, function(o) {
+        var _files = o.files;
+        if (_files === undefined)
+          return
+
+        if (_files.length === undefined)
+          _files = [_files];
+        files = files.concat(_files);
+
+        // set score for the word in each file to Scorer.term
+        for (j = 0; j < _files.length; j++) {
+          file = _files[j];
+          if (!(file in scoreMap))
+            scoreMap[file] = {};
+          scoreMap[file][word] = o.score;
+        }
+      });
+
+      // create the mapping
+      for (j = 0; j < files.length; j++) {
+        file = files[j];
+        if (file in fileMap && fileMap[file].indexOf(word) === -1)
+          fileMap[file].push(word);
+        else
+          fileMap[file] = [word];
+      }
+    }
+
+    // now check if the files don't contain excluded terms
+    for (file in fileMap) {
+      var valid = true;
+
+      // check if all requirements are matched
+      var filteredTermCount = // as search terms with length < 3 are discarded: ignore
+        searchterms.filter(function(term){return term.length > 2}).length
+      if (
+        fileMap[file].length != searchterms.length &&
+        fileMap[file].length != filteredTermCount
+      ) continue;
+
+      // ensure that none of the excluded terms is in the search result
+      for (i = 0; i < excluded.length; i++) {
+        if (terms[excluded[i]] == file ||
+            titleterms[excluded[i]] == file ||
+            $u.contains(terms[excluded[i]] || [], file) ||
+            $u.contains(titleterms[excluded[i]] || [], file)) {
+          valid = false;
+          break;
+        }
+      }
+
+      // if we have still a valid result we can add it to the result list
+      if (valid) {
+        // select one (max) score for the file.
+        // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
+        var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
+        results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
+      }
+    }
+    return results;
+  },
+
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words, hlwords is the list of normal, unstemmed
+   * words. the first one is used to find the occurrence, the
+   * latter for highlighting it.
+   */
+  makeSearchSummary : function(htmlText, keywords, hlwords) {
+    var text = Search.htmlToText(htmlText);
+    if (text == "") {
+      return null;
+    }
+    var textLower = text.toLowerCase();
+    var start = 0;
+    $.each(keywords, function() {
+      var i = textLower.indexOf(this.toLowerCase());
+      if (i > -1)
+        start = i;
+    });
+    start = Math.max(start - 120, 0);
+    var excerpt = ((start > 0) ? '...' : '') +
+      $.trim(text.substr(start, 240)) +
+      ((start + 240 - text.length) ? '...' : '');
+    var rv = $('<p class="context"></p>').text(excerpt);
+    $.each(hlwords, function() {
+      rv = rv.highlightText(this, 'highlighted');
+    });
+    return rv;
+  }
+};
+
+$(document).ready(function() {
+  Search.init();
+});
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/tabs.css b/VimbaX/doc/VimbaX_Documentation/_static/tabs.css
new file mode 100644
index 0000000000000000000000000000000000000000..957ba60d6989db4103dd1d921ba291879b0544e1
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/tabs.css
@@ -0,0 +1,89 @@
+.sphinx-tabs {
+  margin-bottom: 1rem;
+}
+
+[role="tablist"] {
+  border-bottom: 1px solid #a0b3bf;
+}
+
+.sphinx-tabs-tab {
+  position: relative;
+  font-family: Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;
+  color: #1D5C87;
+  line-height: 24px;
+  margin: 0;
+  font-size: 16px;
+  font-weight: 400;
+  background-color: rgba(255, 255, 255, 0);
+  border-radius: 5px 5px 0 0;
+  border: 0;
+  padding: 1rem 1.5rem;
+  margin-bottom: 0;
+}
+
+.sphinx-tabs-tab[aria-selected="true"] {
+  font-weight: 700;
+  border: 1px solid #a0b3bf;
+  border-bottom: 1px solid white;
+  margin: -1px;
+  background-color: white;
+}
+
+.sphinx-tabs-tab:focus {
+  z-index: 1;
+  outline-offset: 1px;
+}
+
+.sphinx-tabs-panel {
+  position: relative;
+  padding: 1rem;
+  border: 1px solid #a0b3bf;
+  margin: 0px -1px -1px -1px;
+  border-radius: 0 0 5px 5px;
+  border-top: 0;
+  background: white;
+}
+
+.sphinx-tabs-panel.code-tab {
+  padding: 0.4rem;
+}
+
+.sphinx-tab img {
+	margin-bottom: 24 px;
+}
+
+/* Dark theme preference styling */
+
+@media (prefers-color-scheme: dark) {
+  body[data-theme="auto"] .sphinx-tabs-panel {
+    color: white;
+    background-color: rgb(50, 50, 50);
+  }
+
+  body[data-theme="auto"] .sphinx-tabs-tab {
+    color: white;
+    background-color: rgba(255, 255, 255, 0.05);
+  }
+
+  body[data-theme="auto"] .sphinx-tabs-tab[aria-selected="true"] {
+    border-bottom: 1px solid rgb(50, 50, 50);
+    background-color: rgb(50, 50, 50);
+  }
+}
+
+/* Explicit dark theme styling */
+
+body[data-theme="dark"] .sphinx-tabs-panel {
+  color: white;
+  background-color: rgb(50, 50, 50);
+}
+
+body[data-theme="dark"] .sphinx-tabs-tab {
+  color: white;
+  background-color: rgba(255, 255, 255, 0.05);
+}
+
+body[data-theme="dark"] .sphinx-tabs-tab[aria-selected="true"] {
+  border-bottom: 2px solid rgb(50, 50, 50);
+  background-color: rgb(50, 50, 50);
+}
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/tabs.js b/VimbaX/doc/VimbaX_Documentation/_static/tabs.js
new file mode 100644
index 0000000000000000000000000000000000000000..48dc303c8c0165f4c8735d84bb8e09132d0edb58
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/tabs.js
@@ -0,0 +1,145 @@
+try {
+  var session = window.sessionStorage || {};
+} catch (e) {
+  var session = {};
+}
+
+window.addEventListener("DOMContentLoaded", () => {
+  const allTabs = document.querySelectorAll('.sphinx-tabs-tab');
+  const tabLists = document.querySelectorAll('[role="tablist"]');
+
+  allTabs.forEach(tab => {
+    tab.addEventListener("click", changeTabs);
+  });
+
+  tabLists.forEach(tabList => {
+    tabList.addEventListener("keydown", keyTabs);
+  });
+
+  // Restore group tab selection from session
+  const lastSelected = session.getItem('sphinx-tabs-last-selected');
+  if (lastSelected != null) selectNamedTabs(lastSelected);
+});
+
+/**
+ * Key focus left and right between sibling elements using arrows
+ * @param  {Node} e the element in focus when key was pressed
+ */
+function keyTabs(e) {
+    const tab = e.target;
+    let nextTab = null;
+    if (e.keyCode === 39 || e.keyCode === 37) {
+      tab.setAttribute("tabindex", -1);
+      // Move right
+      if (e.keyCode === 39) {
+        nextTab = tab.nextElementSibling;
+        if (nextTab === null) {
+          nextTab = tab.parentNode.firstElementChild;
+        }
+      // Move left
+      } else if (e.keyCode === 37) {
+        nextTab = tab.previousElementSibling;
+        if (nextTab === null) {
+          nextTab = tab.parentNode.lastElementChild;
+        }
+      }
+    }
+
+    if (nextTab !== null) {
+      nextTab.setAttribute("tabindex", 0);
+      nextTab.focus();
+    }
+}
+
+/**
+ * Select or deselect clicked tab. If a group tab
+ * is selected, also select tab in other tabLists.
+ * @param  {Node} e the element that was clicked
+ */
+function changeTabs(e) {
+  // Use this instead of the element that was clicked, in case it's a child
+  const notSelected = this.getAttribute("aria-selected") === "false";
+  const positionBefore = this.parentNode.getBoundingClientRect().top;
+  const notClosable = !this.parentNode.classList.contains("closeable");
+
+  deselectTabList(this);
+
+  if (notSelected || notClosable) {
+    selectTab(this);
+    const name = this.getAttribute("name");
+    selectNamedTabs(name, this.id);
+
+    if (this.classList.contains("group-tab")) {
+      // Persist during session
+      session.setItem('sphinx-tabs-last-selected', name);
+    }
+  }
+
+  const positionAfter = this.parentNode.getBoundingClientRect().top;
+  const positionDelta = positionAfter - positionBefore;
+  // Scroll to offset content resizing
+  window.scrollTo(0, window.scrollY + positionDelta);
+}
+
+/**
+ * Select tab and show associated panel.
+ * @param  {Node} tab tab to select
+ */
+function selectTab(tab) {
+  tab.setAttribute("aria-selected", true);
+
+  // Show the associated panel
+  document
+    .getElementById(tab.getAttribute("aria-controls"))
+    .removeAttribute("hidden");
+}
+
+/**
+ * Hide the panels associated with all tabs within the
+ * tablist containing this tab.
+ * @param  {Node} tab a tab within the tablist to deselect
+ */
+function deselectTabList(tab) {
+  const parent = tab.parentNode;
+  const grandparent = parent.parentNode;
+
+  Array.from(parent.children)
+  .forEach(t => t.setAttribute("aria-selected", false));
+
+  Array.from(grandparent.children)
+    .slice(1)  // Skip tablist
+    .forEach(panel => panel.setAttribute("hidden", true));
+}
+
+/**
+ * Select grouped tabs with the same name, but no the tab
+ * with the given id.
+ * @param  {Node} name name of grouped tab to be selected
+ * @param  {Node} clickedId id of clicked tab
+ */
+function selectNamedTabs(name, clickedId=null) {
+  const groupedTabs = document.querySelectorAll(`.sphinx-tabs-tab[name="${name}"]`);
+  const tabLists = Array.from(groupedTabs).map(tab => tab.parentNode);
+
+  tabLists
+    .forEach(tabList => {
+      // Don't want to change the tabList containing the clicked tab
+      const clickedTab = tabList.querySelector(`[id="${clickedId}"]`);
+      if (clickedTab === null ) {
+        // Select first tab with matching name
+        const tab = tabList.querySelector(`.sphinx-tabs-tab[name="${name}"]`);
+        deselectTabList(tab);
+        selectTab(tab);
+      }
+    })
+}
+
+if (typeof exports === 'undefined') {
+  exports = {};
+}
+
+exports.keyTabs = keyTabs;
+exports.changeTabs = changeTabs;
+exports.selectTab = selectTab;
+exports.deselectTabList = deselectTabList;
+exports.selectNamedTabs = selectNamedTabs;
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/underscore-1.13.1.js b/VimbaX/doc/VimbaX_Documentation/_static/underscore-1.13.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..ffd77af9648a47d389f2d6976d4aa1c44d7ce7ce
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/underscore-1.13.1.js
@@ -0,0 +1,2042 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define('underscore', factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
+    var current = global._;
+    var exports = global._ = factory();
+    exports.noConflict = function () { global._ = current; return exports; };
+  }()));
+}(this, (function () {
+  //     Underscore.js 1.13.1
+  //     https://underscorejs.org
+  //     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
+  //     Underscore may be freely distributed under the MIT license.
+
+  // Current version.
+  var VERSION = '1.13.1';
+
+  // Establish the root object, `window` (`self`) in the browser, `global`
+  // on the server, or `this` in some virtual machines. We use `self`
+  // instead of `window` for `WebWorker` support.
+  var root = typeof self == 'object' && self.self === self && self ||
+            typeof global == 'object' && global.global === global && global ||
+            Function('return this')() ||
+            {};
+
+  // Save bytes in the minified (but not gzipped) version:
+  var ArrayProto = Array.prototype, ObjProto = Object.prototype;
+  var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
+
+  // Create quick reference variables for speed access to core prototypes.
+  var push = ArrayProto.push,
+      slice = ArrayProto.slice,
+      toString = ObjProto.toString,
+      hasOwnProperty = ObjProto.hasOwnProperty;
+
+  // Modern feature detection.
+  var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
+      supportsDataView = typeof DataView !== 'undefined';
+
+  // All **ECMAScript 5+** native function implementations that we hope to use
+  // are declared here.
+  var nativeIsArray = Array.isArray,
+      nativeKeys = Object.keys,
+      nativeCreate = Object.create,
+      nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;
+
+  // Create references to these builtin functions because we override them.
+  var _isNaN = isNaN,
+      _isFinite = isFinite;
+
+  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
+  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
+    'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
+
+  // The largest integer that can be represented exactly.
+  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
+
+  // Some functions take a variable number of arguments, or a few expected
+  // arguments at the beginning and then a variable number of values to operate
+  // on. This helper accumulates all remaining arguments past the function’s
+  // argument length (or an explicit `startIndex`), into an array that becomes
+  // the last argument. Similar to ES6’s "rest parameter".
+  function restArguments(func, startIndex) {
+    startIndex = startIndex == null ? func.length - 1 : +startIndex;
+    return function() {
+      var length = Math.max(arguments.length - startIndex, 0),
+          rest = Array(length),
+          index = 0;
+      for (; index < length; index++) {
+        rest[index] = arguments[index + startIndex];
+      }
+      switch (startIndex) {
+        case 0: return func.call(this, rest);
+        case 1: return func.call(this, arguments[0], rest);
+        case 2: return func.call(this, arguments[0], arguments[1], rest);
+      }
+      var args = Array(startIndex + 1);
+      for (index = 0; index < startIndex; index++) {
+        args[index] = arguments[index];
+      }
+      args[startIndex] = rest;
+      return func.apply(this, args);
+    };
+  }
+
+  // Is a given variable an object?
+  function isObject(obj) {
+    var type = typeof obj;
+    return type === 'function' || type === 'object' && !!obj;
+  }
+
+  // Is a given value equal to null?
+  function isNull(obj) {
+    return obj === null;
+  }
+
+  // Is a given variable undefined?
+  function isUndefined(obj) {
+    return obj === void 0;
+  }
+
+  // Is a given value a boolean?
+  function isBoolean(obj) {
+    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+  }
+
+  // Is a given value a DOM element?
+  function isElement(obj) {
+    return !!(obj && obj.nodeType === 1);
+  }
+
+  // Internal function for creating a `toString`-based type tester.
+  function tagTester(name) {
+    var tag = '[object ' + name + ']';
+    return function(obj) {
+      return toString.call(obj) === tag;
+    };
+  }
+
+  var isString = tagTester('String');
+
+  var isNumber = tagTester('Number');
+
+  var isDate = tagTester('Date');
+
+  var isRegExp = tagTester('RegExp');
+
+  var isError = tagTester('Error');
+
+  var isSymbol = tagTester('Symbol');
+
+  var isArrayBuffer = tagTester('ArrayBuffer');
+
+  var isFunction = tagTester('Function');
+
+  // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old
+  // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
+  var nodelist = root.document && root.document.childNodes;
+  if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
+    isFunction = function(obj) {
+      return typeof obj == 'function' || false;
+    };
+  }
+
+  var isFunction$1 = isFunction;
+
+  var hasObjectTag = tagTester('Object');
+
+  // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.
+  // In IE 11, the most common among them, this problem also applies to
+  // `Map`, `WeakMap` and `Set`.
+  var hasStringTagBug = (
+        supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))
+      ),
+      isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));
+
+  var isDataView = tagTester('DataView');
+
+  // In IE 10 - Edge 13, we need a different heuristic
+  // to determine whether an object is a `DataView`.
+  function ie10IsDataView(obj) {
+    return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);
+  }
+
+  var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);
+
+  // Is a given value an array?
+  // Delegates to ECMA5's native `Array.isArray`.
+  var isArray = nativeIsArray || tagTester('Array');
+
+  // Internal function to check whether `key` is an own property name of `obj`.
+  function has$1(obj, key) {
+    return obj != null && hasOwnProperty.call(obj, key);
+  }
+
+  var isArguments = tagTester('Arguments');
+
+  // Define a fallback version of the method in browsers (ahem, IE < 9), where
+  // there isn't any inspectable "Arguments" type.
+  (function() {
+    if (!isArguments(arguments)) {
+      isArguments = function(obj) {
+        return has$1(obj, 'callee');
+      };
+    }
+  }());
+
+  var isArguments$1 = isArguments;
+
+  // Is a given object a finite number?
+  function isFinite$1(obj) {
+    return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));
+  }
+
+  // Is the given value `NaN`?
+  function isNaN$1(obj) {
+    return isNumber(obj) && _isNaN(obj);
+  }
+
+  // Predicate-generating function. Often useful outside of Underscore.
+  function constant(value) {
+    return function() {
+      return value;
+    };
+  }
+
+  // Common internal logic for `isArrayLike` and `isBufferLike`.
+  function createSizePropertyCheck(getSizeProperty) {
+    return function(collection) {
+      var sizeProperty = getSizeProperty(collection);
+      return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;
+    }
+  }
+
+  // Internal helper to generate a function to obtain property `key` from `obj`.
+  function shallowProperty(key) {
+    return function(obj) {
+      return obj == null ? void 0 : obj[key];
+    };
+  }
+
+  // Internal helper to obtain the `byteLength` property of an object.
+  var getByteLength = shallowProperty('byteLength');
+
+  // Internal helper to determine whether we should spend extensive checks against
+  // `ArrayBuffer` et al.
+  var isBufferLike = createSizePropertyCheck(getByteLength);
+
+  // Is a given value a typed array?
+  var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;
+  function isTypedArray(obj) {
+    // `ArrayBuffer.isView` is the most future-proof, so use it when available.
+    // Otherwise, fall back on the above regular expression.
+    return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :
+                  isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));
+  }
+
+  var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);
+
+  // Internal helper to obtain the `length` property of an object.
+  var getLength = shallowProperty('length');
+
+  // Internal helper to create a simple lookup structure.
+  // `collectNonEnumProps` used to depend on `_.contains`, but this led to
+  // circular imports. `emulatedSet` is a one-off solution that only works for
+  // arrays of strings.
+  function emulatedSet(keys) {
+    var hash = {};
+    for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;
+    return {
+      contains: function(key) { return hash[key]; },
+      push: function(key) {
+        hash[key] = true;
+        return keys.push(key);
+      }
+    };
+  }
+
+  // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
+  // be iterated by `for key in ...` and thus missed. Extends `keys` in place if
+  // needed.
+  function collectNonEnumProps(obj, keys) {
+    keys = emulatedSet(keys);
+    var nonEnumIdx = nonEnumerableProps.length;
+    var constructor = obj.constructor;
+    var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;
+
+    // Constructor is a special case.
+    var prop = 'constructor';
+    if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);
+
+    while (nonEnumIdx--) {
+      prop = nonEnumerableProps[nonEnumIdx];
+      if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {
+        keys.push(prop);
+      }
+    }
+  }
+
+  // Retrieve the names of an object's own properties.
+  // Delegates to **ECMAScript 5**'s native `Object.keys`.
+  function keys(obj) {
+    if (!isObject(obj)) return [];
+    if (nativeKeys) return nativeKeys(obj);
+    var keys = [];
+    for (var key in obj) if (has$1(obj, key)) keys.push(key);
+    // Ahem, IE < 9.
+    if (hasEnumBug) collectNonEnumProps(obj, keys);
+    return keys;
+  }
+
+  // Is a given array, string, or object empty?
+  // An "empty" object has no enumerable own-properties.
+  function isEmpty(obj) {
+    if (obj == null) return true;
+    // Skip the more expensive `toString`-based type checks if `obj` has no
+    // `.length`.
+    var length = getLength(obj);
+    if (typeof length == 'number' && (
+      isArray(obj) || isString(obj) || isArguments$1(obj)
+    )) return length === 0;
+    return getLength(keys(obj)) === 0;
+  }
+
+  // Returns whether an object has a given set of `key:value` pairs.
+  function isMatch(object, attrs) {
+    var _keys = keys(attrs), length = _keys.length;
+    if (object == null) return !length;
+    var obj = Object(object);
+    for (var i = 0; i < length; i++) {
+      var key = _keys[i];
+      if (attrs[key] !== obj[key] || !(key in obj)) return false;
+    }
+    return true;
+  }
+
+  // If Underscore is called as a function, it returns a wrapped object that can
+  // be used OO-style. This wrapper holds altered versions of all functions added
+  // through `_.mixin`. Wrapped objects may be chained.
+  function _$1(obj) {
+    if (obj instanceof _$1) return obj;
+    if (!(this instanceof _$1)) return new _$1(obj);
+    this._wrapped = obj;
+  }
+
+  _$1.VERSION = VERSION;
+
+  // Extracts the result from a wrapped and chained object.
+  _$1.prototype.value = function() {
+    return this._wrapped;
+  };
+
+  // Provide unwrapping proxies for some methods used in engine operations
+  // such as arithmetic and JSON stringification.
+  _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;
+
+  _$1.prototype.toString = function() {
+    return String(this._wrapped);
+  };
+
+  // Internal function to wrap or shallow-copy an ArrayBuffer,
+  // typed array or DataView to a new view, reusing the buffer.
+  function toBufferView(bufferSource) {
+    return new Uint8Array(
+      bufferSource.buffer || bufferSource,
+      bufferSource.byteOffset || 0,
+      getByteLength(bufferSource)
+    );
+  }
+
+  // We use this string twice, so give it a name for minification.
+  var tagDataView = '[object DataView]';
+
+  // Internal recursive comparison function for `_.isEqual`.
+  function eq(a, b, aStack, bStack) {
+    // Identical objects are equal. `0 === -0`, but they aren't identical.
+    // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
+    if (a === b) return a !== 0 || 1 / a === 1 / b;
+    // `null` or `undefined` only equal to itself (strict comparison).
+    if (a == null || b == null) return false;
+    // `NaN`s are equivalent, but non-reflexive.
+    if (a !== a) return b !== b;
+    // Exhaust primitive checks
+    var type = typeof a;
+    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
+    return deepEq(a, b, aStack, bStack);
+  }
+
+  // Internal recursive comparison function for `_.isEqual`.
+  function deepEq(a, b, aStack, bStack) {
+    // Unwrap any wrapped objects.
+    if (a instanceof _$1) a = a._wrapped;
+    if (b instanceof _$1) b = b._wrapped;
+    // Compare `[[Class]]` names.
+    var className = toString.call(a);
+    if (className !== toString.call(b)) return false;
+    // Work around a bug in IE 10 - Edge 13.
+    if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {
+      if (!isDataView$1(b)) return false;
+      className = tagDataView;
+    }
+    switch (className) {
+      // These types are compared by value.
+      case '[object RegExp]':
+        // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+      case '[object String]':
+        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+        // equivalent to `new String("5")`.
+        return '' + a === '' + b;
+      case '[object Number]':
+        // `NaN`s are equivalent, but non-reflexive.
+        // Object(NaN) is equivalent to NaN.
+        if (+a !== +a) return +b !== +b;
+        // An `egal` comparison is performed for other numeric values.
+        return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+      case '[object Date]':
+      case '[object Boolean]':
+        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+        // millisecond representations. Note that invalid dates with millisecond representations
+        // of `NaN` are not equivalent.
+        return +a === +b;
+      case '[object Symbol]':
+        return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
+      case '[object ArrayBuffer]':
+      case tagDataView:
+        // Coerce to typed array so we can fall through.
+        return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);
+    }
+
+    var areArrays = className === '[object Array]';
+    if (!areArrays && isTypedArray$1(a)) {
+        var byteLength = getByteLength(a);
+        if (byteLength !== getByteLength(b)) return false;
+        if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;
+        areArrays = true;
+    }
+    if (!areArrays) {
+      if (typeof a != 'object' || typeof b != 'object') return false;
+
+      // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+      // from different frames are.
+      var aCtor = a.constructor, bCtor = b.constructor;
+      if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&
+                               isFunction$1(bCtor) && bCtor instanceof bCtor)
+                          && ('constructor' in a && 'constructor' in b)) {
+        return false;
+      }
+    }
+    // Assume equality for cyclic structures. The algorithm for detecting cyclic
+    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+
+    // Initializing stack of traversed objects.
+    // It's done here since we only need them for objects and arrays comparison.
+    aStack = aStack || [];
+    bStack = bStack || [];
+    var length = aStack.length;
+    while (length--) {
+      // Linear search. Performance is inversely proportional to the number of
+      // unique nested structures.
+      if (aStack[length] === a) return bStack[length] === b;
+    }
+
+    // Add the first object to the stack of traversed objects.
+    aStack.push(a);
+    bStack.push(b);
+
+    // Recursively compare objects and arrays.
+    if (areArrays) {
+      // Compare array lengths to determine if a deep comparison is necessary.
+      length = a.length;
+      if (length !== b.length) return false;
+      // Deep compare the contents, ignoring non-numeric properties.
+      while (length--) {
+        if (!eq(a[length], b[length], aStack, bStack)) return false;
+      }
+    } else {
+      // Deep compare objects.
+      var _keys = keys(a), key;
+      length = _keys.length;
+      // Ensure that both objects contain the same number of properties before comparing deep equality.
+      if (keys(b).length !== length) return false;
+      while (length--) {
+        // Deep compare each member
+        key = _keys[length];
+        if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
+      }
+    }
+    // Remove the first object from the stack of traversed objects.
+    aStack.pop();
+    bStack.pop();
+    return true;
+  }
+
+  // Perform a deep comparison to check if two objects are equal.
+  function isEqual(a, b) {
+    return eq(a, b);
+  }
+
+  // Retrieve all the enumerable property names of an object.
+  function allKeys(obj) {
+    if (!isObject(obj)) return [];
+    var keys = [];
+    for (var key in obj) keys.push(key);
+    // Ahem, IE < 9.
+    if (hasEnumBug) collectNonEnumProps(obj, keys);
+    return keys;
+  }
+
+  // Since the regular `Object.prototype.toString` type tests don't work for
+  // some types in IE 11, we use a fingerprinting heuristic instead, based
+  // on the methods. It's not great, but it's the best we got.
+  // The fingerprint method lists are defined below.
+  function ie11fingerprint(methods) {
+    var length = getLength(methods);
+    return function(obj) {
+      if (obj == null) return false;
+      // `Map`, `WeakMap` and `Set` have no enumerable keys.
+      var keys = allKeys(obj);
+      if (getLength(keys)) return false;
+      for (var i = 0; i < length; i++) {
+        if (!isFunction$1(obj[methods[i]])) return false;
+      }
+      // If we are testing against `WeakMap`, we need to ensure that
+      // `obj` doesn't have a `forEach` method in order to distinguish
+      // it from a regular `Map`.
+      return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);
+    };
+  }
+
+  // In the interest of compact minification, we write
+  // each string in the fingerprints only once.
+  var forEachName = 'forEach',
+      hasName = 'has',
+      commonInit = ['clear', 'delete'],
+      mapTail = ['get', hasName, 'set'];
+
+  // `Map`, `WeakMap` and `Set` each have slightly different
+  // combinations of the above sublists.
+  var mapMethods = commonInit.concat(forEachName, mapTail),
+      weakMapMethods = commonInit.concat(mapTail),
+      setMethods = ['add'].concat(commonInit, forEachName, hasName);
+
+  var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');
+
+  var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');
+
+  var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');
+
+  var isWeakSet = tagTester('WeakSet');
+
+  // Retrieve the values of an object's properties.
+  function values(obj) {
+    var _keys = keys(obj);
+    var length = _keys.length;
+    var values = Array(length);
+    for (var i = 0; i < length; i++) {
+      values[i] = obj[_keys[i]];
+    }
+    return values;
+  }
+
+  // Convert an object into a list of `[key, value]` pairs.
+  // The opposite of `_.object` with one argument.
+  function pairs(obj) {
+    var _keys = keys(obj);
+    var length = _keys.length;
+    var pairs = Array(length);
+    for (var i = 0; i < length; i++) {
+      pairs[i] = [_keys[i], obj[_keys[i]]];
+    }
+    return pairs;
+  }
+
+  // Invert the keys and values of an object. The values must be serializable.
+  function invert(obj) {
+    var result = {};
+    var _keys = keys(obj);
+    for (var i = 0, length = _keys.length; i < length; i++) {
+      result[obj[_keys[i]]] = _keys[i];
+    }
+    return result;
+  }
+
+  // Return a sorted list of the function names available on the object.
+  function functions(obj) {
+    var names = [];
+    for (var key in obj) {
+      if (isFunction$1(obj[key])) names.push(key);
+    }
+    return names.sort();
+  }
+
+  // An internal function for creating assigner functions.
+  function createAssigner(keysFunc, defaults) {
+    return function(obj) {
+      var length = arguments.length;
+      if (defaults) obj = Object(obj);
+      if (length < 2 || obj == null) return obj;
+      for (var index = 1; index < length; index++) {
+        var source = arguments[index],
+            keys = keysFunc(source),
+            l = keys.length;
+        for (var i = 0; i < l; i++) {
+          var key = keys[i];
+          if (!defaults || obj[key] === void 0) obj[key] = source[key];
+        }
+      }
+      return obj;
+    };
+  }
+
+  // Extend a given object with all the properties in passed-in object(s).
+  var extend = createAssigner(allKeys);
+
+  // Assigns a given object with all the own properties in the passed-in
+  // object(s).
+  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+  var extendOwn = createAssigner(keys);
+
+  // Fill in a given object with default properties.
+  var defaults = createAssigner(allKeys, true);
+
+  // Create a naked function reference for surrogate-prototype-swapping.
+  function ctor() {
+    return function(){};
+  }
+
+  // An internal function for creating a new object that inherits from another.
+  function baseCreate(prototype) {
+    if (!isObject(prototype)) return {};
+    if (nativeCreate) return nativeCreate(prototype);
+    var Ctor = ctor();
+    Ctor.prototype = prototype;
+    var result = new Ctor;
+    Ctor.prototype = null;
+    return result;
+  }
+
+  // Creates an object that inherits from the given prototype object.
+  // If additional properties are provided then they will be added to the
+  // created object.
+  function create(prototype, props) {
+    var result = baseCreate(prototype);
+    if (props) extendOwn(result, props);
+    return result;
+  }
+
+  // Create a (shallow-cloned) duplicate of an object.
+  function clone(obj) {
+    if (!isObject(obj)) return obj;
+    return isArray(obj) ? obj.slice() : extend({}, obj);
+  }
+
+  // Invokes `interceptor` with the `obj` and then returns `obj`.
+  // The primary purpose of this method is to "tap into" a method chain, in
+  // order to perform operations on intermediate results within the chain.
+  function tap(obj, interceptor) {
+    interceptor(obj);
+    return obj;
+  }
+
+  // Normalize a (deep) property `path` to array.
+  // Like `_.iteratee`, this function can be customized.
+  function toPath$1(path) {
+    return isArray(path) ? path : [path];
+  }
+  _$1.toPath = toPath$1;
+
+  // Internal wrapper for `_.toPath` to enable minification.
+  // Similar to `cb` for `_.iteratee`.
+  function toPath(path) {
+    return _$1.toPath(path);
+  }
+
+  // Internal function to obtain a nested property in `obj` along `path`.
+  function deepGet(obj, path) {
+    var length = path.length;
+    for (var i = 0; i < length; i++) {
+      if (obj == null) return void 0;
+      obj = obj[path[i]];
+    }
+    return length ? obj : void 0;
+  }
+
+  // Get the value of the (deep) property on `path` from `object`.
+  // If any property in `path` does not exist or if the value is
+  // `undefined`, return `defaultValue` instead.
+  // The `path` is normalized through `_.toPath`.
+  function get(object, path, defaultValue) {
+    var value = deepGet(object, toPath(path));
+    return isUndefined(value) ? defaultValue : value;
+  }
+
+  // Shortcut function for checking if an object has a given property directly on
+  // itself (in other words, not on a prototype). Unlike the internal `has`
+  // function, this public version can also traverse nested properties.
+  function has(obj, path) {
+    path = toPath(path);
+    var length = path.length;
+    for (var i = 0; i < length; i++) {
+      var key = path[i];
+      if (!has$1(obj, key)) return false;
+      obj = obj[key];
+    }
+    return !!length;
+  }
+
+  // Keep the identity function around for default iteratees.
+  function identity(value) {
+    return value;
+  }
+
+  // Returns a predicate for checking whether an object has a given set of
+  // `key:value` pairs.
+  function matcher(attrs) {
+    attrs = extendOwn({}, attrs);
+    return function(obj) {
+      return isMatch(obj, attrs);
+    };
+  }
+
+  // Creates a function that, when passed an object, will traverse that object’s
+  // properties down the given `path`, specified as an array of keys or indices.
+  function property(path) {
+    path = toPath(path);
+    return function(obj) {
+      return deepGet(obj, path);
+    };
+  }
+
+  // Internal function that returns an efficient (for current engines) version
+  // of the passed-in callback, to be repeatedly applied in other Underscore
+  // functions.
+  function optimizeCb(func, context, argCount) {
+    if (context === void 0) return func;
+    switch (argCount == null ? 3 : argCount) {
+      case 1: return function(value) {
+        return func.call(context, value);
+      };
+      // The 2-argument case is omitted because we’re not using it.
+      case 3: return function(value, index, collection) {
+        return func.call(context, value, index, collection);
+      };
+      case 4: return function(accumulator, value, index, collection) {
+        return func.call(context, accumulator, value, index, collection);
+      };
+    }
+    return function() {
+      return func.apply(context, arguments);
+    };
+  }
+
+  // An internal function to generate callbacks that can be applied to each
+  // element in a collection, returning the desired result — either `_.identity`,
+  // an arbitrary callback, a property matcher, or a property accessor.
+  function baseIteratee(value, context, argCount) {
+    if (value == null) return identity;
+    if (isFunction$1(value)) return optimizeCb(value, context, argCount);
+    if (isObject(value) && !isArray(value)) return matcher(value);
+    return property(value);
+  }
+
+  // External wrapper for our callback generator. Users may customize
+  // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
+  // This abstraction hides the internal-only `argCount` argument.
+  function iteratee(value, context) {
+    return baseIteratee(value, context, Infinity);
+  }
+  _$1.iteratee = iteratee;
+
+  // The function we call internally to generate a callback. It invokes
+  // `_.iteratee` if overridden, otherwise `baseIteratee`.
+  function cb(value, context, argCount) {
+    if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);
+    return baseIteratee(value, context, argCount);
+  }
+
+  // Returns the results of applying the `iteratee` to each element of `obj`.
+  // In contrast to `_.map` it returns an object.
+  function mapObject(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    var _keys = keys(obj),
+        length = _keys.length,
+        results = {};
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys[index];
+      results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
+    }
+    return results;
+  }
+
+  // Predicate-generating function. Often useful outside of Underscore.
+  function noop(){}
+
+  // Generates a function for a given object that returns a given property.
+  function propertyOf(obj) {
+    if (obj == null) return noop;
+    return function(path) {
+      return get(obj, path);
+    };
+  }
+
+  // Run a function **n** times.
+  function times(n, iteratee, context) {
+    var accum = Array(Math.max(0, n));
+    iteratee = optimizeCb(iteratee, context, 1);
+    for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+    return accum;
+  }
+
+  // Return a random integer between `min` and `max` (inclusive).
+  function random(min, max) {
+    if (max == null) {
+      max = min;
+      min = 0;
+    }
+    return min + Math.floor(Math.random() * (max - min + 1));
+  }
+
+  // A (possibly faster) way to get the current timestamp as an integer.
+  var now = Date.now || function() {
+    return new Date().getTime();
+  };
+
+  // Internal helper to generate functions for escaping and unescaping strings
+  // to/from HTML interpolation.
+  function createEscaper(map) {
+    var escaper = function(match) {
+      return map[match];
+    };
+    // Regexes for identifying a key that needs to be escaped.
+    var source = '(?:' + keys(map).join('|') + ')';
+    var testRegexp = RegExp(source);
+    var replaceRegexp = RegExp(source, 'g');
+    return function(string) {
+      string = string == null ? '' : '' + string;
+      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+    };
+  }
+
+  // Internal list of HTML entities for escaping.
+  var escapeMap = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#x27;',
+    '`': '&#x60;'
+  };
+
+  // Function for escaping strings to HTML interpolation.
+  var _escape = createEscaper(escapeMap);
+
+  // Internal list of HTML entities for unescaping.
+  var unescapeMap = invert(escapeMap);
+
+  // Function for unescaping strings from HTML interpolation.
+  var _unescape = createEscaper(unescapeMap);
+
+  // By default, Underscore uses ERB-style template delimiters. Change the
+  // following template settings to use alternative delimiters.
+  var templateSettings = _$1.templateSettings = {
+    evaluate: /<%([\s\S]+?)%>/g,
+    interpolate: /<%=([\s\S]+?)%>/g,
+    escape: /<%-([\s\S]+?)%>/g
+  };
+
+  // When customizing `_.templateSettings`, if you don't want to define an
+  // interpolation, evaluation or escaping regex, we need one that is
+  // guaranteed not to match.
+  var noMatch = /(.)^/;
+
+  // Certain characters need to be escaped so that they can be put into a
+  // string literal.
+  var escapes = {
+    "'": "'",
+    '\\': '\\',
+    '\r': 'r',
+    '\n': 'n',
+    '\u2028': 'u2028',
+    '\u2029': 'u2029'
+  };
+
+  var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
+
+  function escapeChar(match) {
+    return '\\' + escapes[match];
+  }
+
+  // In order to prevent third-party code injection through
+  // `_.templateSettings.variable`, we test it against the following regular
+  // expression. It is intentionally a bit more liberal than just matching valid
+  // identifiers, but still prevents possible loopholes through defaults or
+  // destructuring assignment.
+  var bareIdentifier = /^\s*(\w|\$)+\s*$/;
+
+  // JavaScript micro-templating, similar to John Resig's implementation.
+  // Underscore templating handles arbitrary delimiters, preserves whitespace,
+  // and correctly escapes quotes within interpolated code.
+  // NB: `oldSettings` only exists for backwards compatibility.
+  function template(text, settings, oldSettings) {
+    if (!settings && oldSettings) settings = oldSettings;
+    settings = defaults({}, settings, _$1.templateSettings);
+
+    // Combine delimiters into one regular expression via alternation.
+    var matcher = RegExp([
+      (settings.escape || noMatch).source,
+      (settings.interpolate || noMatch).source,
+      (settings.evaluate || noMatch).source
+    ].join('|') + '|$', 'g');
+
+    // Compile the template source, escaping string literals appropriately.
+    var index = 0;
+    var source = "__p+='";
+    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+      source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
+      index = offset + match.length;
+
+      if (escape) {
+        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+      } else if (interpolate) {
+        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+      } else if (evaluate) {
+        source += "';\n" + evaluate + "\n__p+='";
+      }
+
+      // Adobe VMs need the match returned to produce the correct offset.
+      return match;
+    });
+    source += "';\n";
+
+    var argument = settings.variable;
+    if (argument) {
+      // Insure against third-party code injection. (CVE-2021-23358)
+      if (!bareIdentifier.test(argument)) throw new Error(
+        'variable is not a bare identifier: ' + argument
+      );
+    } else {
+      // If a variable is not specified, place data values in local scope.
+      source = 'with(obj||{}){\n' + source + '}\n';
+      argument = 'obj';
+    }
+
+    source = "var __t,__p='',__j=Array.prototype.join," +
+      "print=function(){__p+=__j.call(arguments,'');};\n" +
+      source + 'return __p;\n';
+
+    var render;
+    try {
+      render = new Function(argument, '_', source);
+    } catch (e) {
+      e.source = source;
+      throw e;
+    }
+
+    var template = function(data) {
+      return render.call(this, data, _$1);
+    };
+
+    // Provide the compiled source as a convenience for precompilation.
+    template.source = 'function(' + argument + '){\n' + source + '}';
+
+    return template;
+  }
+
+  // Traverses the children of `obj` along `path`. If a child is a function, it
+  // is invoked with its parent as context. Returns the value of the final
+  // child, or `fallback` if any child is undefined.
+  function result(obj, path, fallback) {
+    path = toPath(path);
+    var length = path.length;
+    if (!length) {
+      return isFunction$1(fallback) ? fallback.call(obj) : fallback;
+    }
+    for (var i = 0; i < length; i++) {
+      var prop = obj == null ? void 0 : obj[path[i]];
+      if (prop === void 0) {
+        prop = fallback;
+        i = length; // Ensure we don't continue iterating.
+      }
+      obj = isFunction$1(prop) ? prop.call(obj) : prop;
+    }
+    return obj;
+  }
+
+  // Generate a unique integer id (unique within the entire client session).
+  // Useful for temporary DOM ids.
+  var idCounter = 0;
+  function uniqueId(prefix) {
+    var id = ++idCounter + '';
+    return prefix ? prefix + id : id;
+  }
+
+  // Start chaining a wrapped Underscore object.
+  function chain(obj) {
+    var instance = _$1(obj);
+    instance._chain = true;
+    return instance;
+  }
+
+  // Internal function to execute `sourceFunc` bound to `context` with optional
+  // `args`. Determines whether to execute a function as a constructor or as a
+  // normal function.
+  function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
+    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
+    var self = baseCreate(sourceFunc.prototype);
+    var result = sourceFunc.apply(self, args);
+    if (isObject(result)) return result;
+    return self;
+  }
+
+  // Partially apply a function by creating a version that has had some of its
+  // arguments pre-filled, without changing its dynamic `this` context. `_` acts
+  // as a placeholder by default, allowing any combination of arguments to be
+  // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
+  var partial = restArguments(function(func, boundArgs) {
+    var placeholder = partial.placeholder;
+    var bound = function() {
+      var position = 0, length = boundArgs.length;
+      var args = Array(length);
+      for (var i = 0; i < length; i++) {
+        args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
+      }
+      while (position < arguments.length) args.push(arguments[position++]);
+      return executeBound(func, bound, this, this, args);
+    };
+    return bound;
+  });
+
+  partial.placeholder = _$1;
+
+  // Create a function bound to a given object (assigning `this`, and arguments,
+  // optionally).
+  var bind = restArguments(function(func, context, args) {
+    if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');
+    var bound = restArguments(function(callArgs) {
+      return executeBound(func, bound, context, this, args.concat(callArgs));
+    });
+    return bound;
+  });
+
+  // Internal helper for collection methods to determine whether a collection
+  // should be iterated as an array or as an object.
+  // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
+  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
+  var isArrayLike = createSizePropertyCheck(getLength);
+
+  // Internal implementation of a recursive `flatten` function.
+  function flatten$1(input, depth, strict, output) {
+    output = output || [];
+    if (!depth && depth !== 0) {
+      depth = Infinity;
+    } else if (depth <= 0) {
+      return output.concat(input);
+    }
+    var idx = output.length;
+    for (var i = 0, length = getLength(input); i < length; i++) {
+      var value = input[i];
+      if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
+        // Flatten current level of array or arguments object.
+        if (depth > 1) {
+          flatten$1(value, depth - 1, strict, output);
+          idx = output.length;
+        } else {
+          var j = 0, len = value.length;
+          while (j < len) output[idx++] = value[j++];
+        }
+      } else if (!strict) {
+        output[idx++] = value;
+      }
+    }
+    return output;
+  }
+
+  // Bind a number of an object's methods to that object. Remaining arguments
+  // are the method names to be bound. Useful for ensuring that all callbacks
+  // defined on an object belong to it.
+  var bindAll = restArguments(function(obj, keys) {
+    keys = flatten$1(keys, false, false);
+    var index = keys.length;
+    if (index < 1) throw new Error('bindAll must be passed function names');
+    while (index--) {
+      var key = keys[index];
+      obj[key] = bind(obj[key], obj);
+    }
+    return obj;
+  });
+
+  // Memoize an expensive function by storing its results.
+  function memoize(func, hasher) {
+    var memoize = function(key) {
+      var cache = memoize.cache;
+      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+      if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);
+      return cache[address];
+    };
+    memoize.cache = {};
+    return memoize;
+  }
+
+  // Delays a function for the given number of milliseconds, and then calls
+  // it with the arguments supplied.
+  var delay = restArguments(function(func, wait, args) {
+    return setTimeout(function() {
+      return func.apply(null, args);
+    }, wait);
+  });
+
+  // Defers a function, scheduling it to run after the current call stack has
+  // cleared.
+  var defer = partial(delay, _$1, 1);
+
+  // Returns a function, that, when invoked, will only be triggered at most once
+  // during a given window of time. Normally, the throttled function will run
+  // as much as it can, without ever going more than once per `wait` duration;
+  // but if you'd like to disable the execution on the leading edge, pass
+  // `{leading: false}`. To disable execution on the trailing edge, ditto.
+  function throttle(func, wait, options) {
+    var timeout, context, args, result;
+    var previous = 0;
+    if (!options) options = {};
+
+    var later = function() {
+      previous = options.leading === false ? 0 : now();
+      timeout = null;
+      result = func.apply(context, args);
+      if (!timeout) context = args = null;
+    };
+
+    var throttled = function() {
+      var _now = now();
+      if (!previous && options.leading === false) previous = _now;
+      var remaining = wait - (_now - previous);
+      context = this;
+      args = arguments;
+      if (remaining <= 0 || remaining > wait) {
+        if (timeout) {
+          clearTimeout(timeout);
+          timeout = null;
+        }
+        previous = _now;
+        result = func.apply(context, args);
+        if (!timeout) context = args = null;
+      } else if (!timeout && options.trailing !== false) {
+        timeout = setTimeout(later, remaining);
+      }
+      return result;
+    };
+
+    throttled.cancel = function() {
+      clearTimeout(timeout);
+      previous = 0;
+      timeout = context = args = null;
+    };
+
+    return throttled;
+  }
+
+  // When a sequence of calls of the returned function ends, the argument
+  // function is triggered. The end of a sequence is defined by the `wait`
+  // parameter. If `immediate` is passed, the argument function will be
+  // triggered at the beginning of the sequence instead of at the end.
+  function debounce(func, wait, immediate) {
+    var timeout, previous, args, result, context;
+
+    var later = function() {
+      var passed = now() - previous;
+      if (wait > passed) {
+        timeout = setTimeout(later, wait - passed);
+      } else {
+        timeout = null;
+        if (!immediate) result = func.apply(context, args);
+        // This check is needed because `func` can recursively invoke `debounced`.
+        if (!timeout) args = context = null;
+      }
+    };
+
+    var debounced = restArguments(function(_args) {
+      context = this;
+      args = _args;
+      previous = now();
+      if (!timeout) {
+        timeout = setTimeout(later, wait);
+        if (immediate) result = func.apply(context, args);
+      }
+      return result;
+    });
+
+    debounced.cancel = function() {
+      clearTimeout(timeout);
+      timeout = args = context = null;
+    };
+
+    return debounced;
+  }
+
+  // Returns the first function passed as an argument to the second,
+  // allowing you to adjust arguments, run code before and after, and
+  // conditionally execute the original function.
+  function wrap(func, wrapper) {
+    return partial(wrapper, func);
+  }
+
+  // Returns a negated version of the passed-in predicate.
+  function negate(predicate) {
+    return function() {
+      return !predicate.apply(this, arguments);
+    };
+  }
+
+  // Returns a function that is the composition of a list of functions, each
+  // consuming the return value of the function that follows.
+  function compose() {
+    var args = arguments;
+    var start = args.length - 1;
+    return function() {
+      var i = start;
+      var result = args[start].apply(this, arguments);
+      while (i--) result = args[i].call(this, result);
+      return result;
+    };
+  }
+
+  // Returns a function that will only be executed on and after the Nth call.
+  function after(times, func) {
+    return function() {
+      if (--times < 1) {
+        return func.apply(this, arguments);
+      }
+    };
+  }
+
+  // Returns a function that will only be executed up to (but not including) the
+  // Nth call.
+  function before(times, func) {
+    var memo;
+    return function() {
+      if (--times > 0) {
+        memo = func.apply(this, arguments);
+      }
+      if (times <= 1) func = null;
+      return memo;
+    };
+  }
+
+  // Returns a function that will be executed at most one time, no matter how
+  // often you call it. Useful for lazy initialization.
+  var once = partial(before, 2);
+
+  // Returns the first key on an object that passes a truth test.
+  function findKey(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = keys(obj), key;
+    for (var i = 0, length = _keys.length; i < length; i++) {
+      key = _keys[i];
+      if (predicate(obj[key], key, obj)) return key;
+    }
+  }
+
+  // Internal function to generate `_.findIndex` and `_.findLastIndex`.
+  function createPredicateIndexFinder(dir) {
+    return function(array, predicate, context) {
+      predicate = cb(predicate, context);
+      var length = getLength(array);
+      var index = dir > 0 ? 0 : length - 1;
+      for (; index >= 0 && index < length; index += dir) {
+        if (predicate(array[index], index, array)) return index;
+      }
+      return -1;
+    };
+  }
+
+  // Returns the first index on an array-like that passes a truth test.
+  var findIndex = createPredicateIndexFinder(1);
+
+  // Returns the last index on an array-like that passes a truth test.
+  var findLastIndex = createPredicateIndexFinder(-1);
+
+  // Use a comparator function to figure out the smallest index at which
+  // an object should be inserted so as to maintain order. Uses binary search.
+  function sortedIndex(array, obj, iteratee, context) {
+    iteratee = cb(iteratee, context, 1);
+    var value = iteratee(obj);
+    var low = 0, high = getLength(array);
+    while (low < high) {
+      var mid = Math.floor((low + high) / 2);
+      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
+    }
+    return low;
+  }
+
+  // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.
+  function createIndexFinder(dir, predicateFind, sortedIndex) {
+    return function(array, item, idx) {
+      var i = 0, length = getLength(array);
+      if (typeof idx == 'number') {
+        if (dir > 0) {
+          i = idx >= 0 ? idx : Math.max(idx + length, i);
+        } else {
+          length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
+        }
+      } else if (sortedIndex && idx && length) {
+        idx = sortedIndex(array, item);
+        return array[idx] === item ? idx : -1;
+      }
+      if (item !== item) {
+        idx = predicateFind(slice.call(array, i, length), isNaN$1);
+        return idx >= 0 ? idx + i : -1;
+      }
+      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
+        if (array[idx] === item) return idx;
+      }
+      return -1;
+    };
+  }
+
+  // Return the position of the first occurrence of an item in an array,
+  // or -1 if the item is not included in the array.
+  // If the array is large and already in sort order, pass `true`
+  // for **isSorted** to use binary search.
+  var indexOf = createIndexFinder(1, findIndex, sortedIndex);
+
+  // Return the position of the last occurrence of an item in an array,
+  // or -1 if the item is not included in the array.
+  var lastIndexOf = createIndexFinder(-1, findLastIndex);
+
+  // Return the first value which passes a truth test.
+  function find(obj, predicate, context) {
+    var keyFinder = isArrayLike(obj) ? findIndex : findKey;
+    var key = keyFinder(obj, predicate, context);
+    if (key !== void 0 && key !== -1) return obj[key];
+  }
+
+  // Convenience version of a common use case of `_.find`: getting the first
+  // object containing specific `key:value` pairs.
+  function findWhere(obj, attrs) {
+    return find(obj, matcher(attrs));
+  }
+
+  // The cornerstone for collection functions, an `each`
+  // implementation, aka `forEach`.
+  // Handles raw objects in addition to array-likes. Treats all
+  // sparse array-likes as if they were dense.
+  function each(obj, iteratee, context) {
+    iteratee = optimizeCb(iteratee, context);
+    var i, length;
+    if (isArrayLike(obj)) {
+      for (i = 0, length = obj.length; i < length; i++) {
+        iteratee(obj[i], i, obj);
+      }
+    } else {
+      var _keys = keys(obj);
+      for (i = 0, length = _keys.length; i < length; i++) {
+        iteratee(obj[_keys[i]], _keys[i], obj);
+      }
+    }
+    return obj;
+  }
+
+  // Return the results of applying the iteratee to each element.
+  function map(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length,
+        results = Array(length);
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      results[index] = iteratee(obj[currentKey], currentKey, obj);
+    }
+    return results;
+  }
+
+  // Internal helper to create a reducing function, iterating left or right.
+  function createReduce(dir) {
+    // Wrap code that reassigns argument variables in a separate function than
+    // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
+    var reducer = function(obj, iteratee, memo, initial) {
+      var _keys = !isArrayLike(obj) && keys(obj),
+          length = (_keys || obj).length,
+          index = dir > 0 ? 0 : length - 1;
+      if (!initial) {
+        memo = obj[_keys ? _keys[index] : index];
+        index += dir;
+      }
+      for (; index >= 0 && index < length; index += dir) {
+        var currentKey = _keys ? _keys[index] : index;
+        memo = iteratee(memo, obj[currentKey], currentKey, obj);
+      }
+      return memo;
+    };
+
+    return function(obj, iteratee, memo, context) {
+      var initial = arguments.length >= 3;
+      return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
+    };
+  }
+
+  // **Reduce** builds up a single result from a list of values, aka `inject`,
+  // or `foldl`.
+  var reduce = createReduce(1);
+
+  // The right-associative version of reduce, also known as `foldr`.
+  var reduceRight = createReduce(-1);
+
+  // Return all the elements that pass a truth test.
+  function filter(obj, predicate, context) {
+    var results = [];
+    predicate = cb(predicate, context);
+    each(obj, function(value, index, list) {
+      if (predicate(value, index, list)) results.push(value);
+    });
+    return results;
+  }
+
+  // Return all the elements for which a truth test fails.
+  function reject(obj, predicate, context) {
+    return filter(obj, negate(cb(predicate)), context);
+  }
+
+  // Determine whether all of the elements pass a truth test.
+  function every(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length;
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      if (!predicate(obj[currentKey], currentKey, obj)) return false;
+    }
+    return true;
+  }
+
+  // Determine if at least one element in the object passes a truth test.
+  function some(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length;
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      if (predicate(obj[currentKey], currentKey, obj)) return true;
+    }
+    return false;
+  }
+
+  // Determine if the array or object contains a given item (using `===`).
+  function contains(obj, item, fromIndex, guard) {
+    if (!isArrayLike(obj)) obj = values(obj);
+    if (typeof fromIndex != 'number' || guard) fromIndex = 0;
+    return indexOf(obj, item, fromIndex) >= 0;
+  }
+
+  // Invoke a method (with arguments) on every item in a collection.
+  var invoke = restArguments(function(obj, path, args) {
+    var contextPath, func;
+    if (isFunction$1(path)) {
+      func = path;
+    } else {
+      path = toPath(path);
+      contextPath = path.slice(0, -1);
+      path = path[path.length - 1];
+    }
+    return map(obj, function(context) {
+      var method = func;
+      if (!method) {
+        if (contextPath && contextPath.length) {
+          context = deepGet(context, contextPath);
+        }
+        if (context == null) return void 0;
+        method = context[path];
+      }
+      return method == null ? method : method.apply(context, args);
+    });
+  });
+
+  // Convenience version of a common use case of `_.map`: fetching a property.
+  function pluck(obj, key) {
+    return map(obj, property(key));
+  }
+
+  // Convenience version of a common use case of `_.filter`: selecting only
+  // objects containing specific `key:value` pairs.
+  function where(obj, attrs) {
+    return filter(obj, matcher(attrs));
+  }
+
+  // Return the maximum element (or element-based computation).
+  function max(obj, iteratee, context) {
+    var result = -Infinity, lastComputed = -Infinity,
+        value, computed;
+    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+      obj = isArrayLike(obj) ? obj : values(obj);
+      for (var i = 0, length = obj.length; i < length; i++) {
+        value = obj[i];
+        if (value != null && value > result) {
+          result = value;
+        }
+      }
+    } else {
+      iteratee = cb(iteratee, context);
+      each(obj, function(v, index, list) {
+        computed = iteratee(v, index, list);
+        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+          result = v;
+          lastComputed = computed;
+        }
+      });
+    }
+    return result;
+  }
+
+  // Return the minimum element (or element-based computation).
+  function min(obj, iteratee, context) {
+    var result = Infinity, lastComputed = Infinity,
+        value, computed;
+    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+      obj = isArrayLike(obj) ? obj : values(obj);
+      for (var i = 0, length = obj.length; i < length; i++) {
+        value = obj[i];
+        if (value != null && value < result) {
+          result = value;
+        }
+      }
+    } else {
+      iteratee = cb(iteratee, context);
+      each(obj, function(v, index, list) {
+        computed = iteratee(v, index, list);
+        if (computed < lastComputed || computed === Infinity && result === Infinity) {
+          result = v;
+          lastComputed = computed;
+        }
+      });
+    }
+    return result;
+  }
+
+  // Sample **n** random values from a collection using the modern version of the
+  // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+  // If **n** is not specified, returns a single random element.
+  // The internal `guard` argument allows it to work with `_.map`.
+  function sample(obj, n, guard) {
+    if (n == null || guard) {
+      if (!isArrayLike(obj)) obj = values(obj);
+      return obj[random(obj.length - 1)];
+    }
+    var sample = isArrayLike(obj) ? clone(obj) : values(obj);
+    var length = getLength(sample);
+    n = Math.max(Math.min(n, length), 0);
+    var last = length - 1;
+    for (var index = 0; index < n; index++) {
+      var rand = random(index, last);
+      var temp = sample[index];
+      sample[index] = sample[rand];
+      sample[rand] = temp;
+    }
+    return sample.slice(0, n);
+  }
+
+  // Shuffle a collection.
+  function shuffle(obj) {
+    return sample(obj, Infinity);
+  }
+
+  // Sort the object's values by a criterion produced by an iteratee.
+  function sortBy(obj, iteratee, context) {
+    var index = 0;
+    iteratee = cb(iteratee, context);
+    return pluck(map(obj, function(value, key, list) {
+      return {
+        value: value,
+        index: index++,
+        criteria: iteratee(value, key, list)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria;
+      var b = right.criteria;
+      if (a !== b) {
+        if (a > b || a === void 0) return 1;
+        if (a < b || b === void 0) return -1;
+      }
+      return left.index - right.index;
+    }), 'value');
+  }
+
+  // An internal function used for aggregate "group by" operations.
+  function group(behavior, partition) {
+    return function(obj, iteratee, context) {
+      var result = partition ? [[], []] : {};
+      iteratee = cb(iteratee, context);
+      each(obj, function(value, index) {
+        var key = iteratee(value, index, obj);
+        behavior(result, value, key);
+      });
+      return result;
+    };
+  }
+
+  // Groups the object's values by a criterion. Pass either a string attribute
+  // to group by, or a function that returns the criterion.
+  var groupBy = group(function(result, value, key) {
+    if (has$1(result, key)) result[key].push(value); else result[key] = [value];
+  });
+
+  // Indexes the object's values by a criterion, similar to `_.groupBy`, but for
+  // when you know that your index values will be unique.
+  var indexBy = group(function(result, value, key) {
+    result[key] = value;
+  });
+
+  // Counts instances of an object that group by a certain criterion. Pass
+  // either a string attribute to count by, or a function that returns the
+  // criterion.
+  var countBy = group(function(result, value, key) {
+    if (has$1(result, key)) result[key]++; else result[key] = 1;
+  });
+
+  // Split a collection into two arrays: one whose elements all pass the given
+  // truth test, and one whose elements all do not pass the truth test.
+  var partition = group(function(result, value, pass) {
+    result[pass ? 0 : 1].push(value);
+  }, true);
+
+  // Safely create a real, live array from anything iterable.
+  var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
+  function toArray(obj) {
+    if (!obj) return [];
+    if (isArray(obj)) return slice.call(obj);
+    if (isString(obj)) {
+      // Keep surrogate pair characters together.
+      return obj.match(reStrSymbol);
+    }
+    if (isArrayLike(obj)) return map(obj, identity);
+    return values(obj);
+  }
+
+  // Return the number of elements in a collection.
+  function size(obj) {
+    if (obj == null) return 0;
+    return isArrayLike(obj) ? obj.length : keys(obj).length;
+  }
+
+  // Internal `_.pick` helper function to determine whether `key` is an enumerable
+  // property name of `obj`.
+  function keyInObj(value, key, obj) {
+    return key in obj;
+  }
+
+  // Return a copy of the object only containing the allowed properties.
+  var pick = restArguments(function(obj, keys) {
+    var result = {}, iteratee = keys[0];
+    if (obj == null) return result;
+    if (isFunction$1(iteratee)) {
+      if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
+      keys = allKeys(obj);
+    } else {
+      iteratee = keyInObj;
+      keys = flatten$1(keys, false, false);
+      obj = Object(obj);
+    }
+    for (var i = 0, length = keys.length; i < length; i++) {
+      var key = keys[i];
+      var value = obj[key];
+      if (iteratee(value, key, obj)) result[key] = value;
+    }
+    return result;
+  });
+
+  // Return a copy of the object without the disallowed properties.
+  var omit = restArguments(function(obj, keys) {
+    var iteratee = keys[0], context;
+    if (isFunction$1(iteratee)) {
+      iteratee = negate(iteratee);
+      if (keys.length > 1) context = keys[1];
+    } else {
+      keys = map(flatten$1(keys, false, false), String);
+      iteratee = function(value, key) {
+        return !contains(keys, key);
+      };
+    }
+    return pick(obj, iteratee, context);
+  });
+
+  // Returns everything but the last entry of the array. Especially useful on
+  // the arguments object. Passing **n** will return all the values in
+  // the array, excluding the last N.
+  function initial(array, n, guard) {
+    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+  }
+
+  // Get the first element of an array. Passing **n** will return the first N
+  // values in the array. The **guard** check allows it to work with `_.map`.
+  function first(array, n, guard) {
+    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
+    if (n == null || guard) return array[0];
+    return initial(array, array.length - n);
+  }
+
+  // Returns everything but the first entry of the `array`. Especially useful on
+  // the `arguments` object. Passing an **n** will return the rest N values in the
+  // `array`.
+  function rest(array, n, guard) {
+    return slice.call(array, n == null || guard ? 1 : n);
+  }
+
+  // Get the last element of an array. Passing **n** will return the last N
+  // values in the array.
+  function last(array, n, guard) {
+    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
+    if (n == null || guard) return array[array.length - 1];
+    return rest(array, Math.max(0, array.length - n));
+  }
+
+  // Trim out all falsy values from an array.
+  function compact(array) {
+    return filter(array, Boolean);
+  }
+
+  // Flatten out an array, either recursively (by default), or up to `depth`.
+  // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
+  function flatten(array, depth) {
+    return flatten$1(array, depth, false);
+  }
+
+  // Take the difference between one array and a number of other arrays.
+  // Only the elements present in just the first array will remain.
+  var difference = restArguments(function(array, rest) {
+    rest = flatten$1(rest, true, true);
+    return filter(array, function(value){
+      return !contains(rest, value);
+    });
+  });
+
+  // Return a version of the array that does not contain the specified value(s).
+  var without = restArguments(function(array, otherArrays) {
+    return difference(array, otherArrays);
+  });
+
+  // Produce a duplicate-free version of the array. If the array has already
+  // been sorted, you have the option of using a faster algorithm.
+  // The faster algorithm will not work with an iteratee if the iteratee
+  // is not a one-to-one function, so providing an iteratee will disable
+  // the faster algorithm.
+  function uniq(array, isSorted, iteratee, context) {
+    if (!isBoolean(isSorted)) {
+      context = iteratee;
+      iteratee = isSorted;
+      isSorted = false;
+    }
+    if (iteratee != null) iteratee = cb(iteratee, context);
+    var result = [];
+    var seen = [];
+    for (var i = 0, length = getLength(array); i < length; i++) {
+      var value = array[i],
+          computed = iteratee ? iteratee(value, i, array) : value;
+      if (isSorted && !iteratee) {
+        if (!i || seen !== computed) result.push(value);
+        seen = computed;
+      } else if (iteratee) {
+        if (!contains(seen, computed)) {
+          seen.push(computed);
+          result.push(value);
+        }
+      } else if (!contains(result, value)) {
+        result.push(value);
+      }
+    }
+    return result;
+  }
+
+  // Produce an array that contains the union: each distinct element from all of
+  // the passed-in arrays.
+  var union = restArguments(function(arrays) {
+    return uniq(flatten$1(arrays, true, true));
+  });
+
+  // Produce an array that contains every item shared between all the
+  // passed-in arrays.
+  function intersection(array) {
+    var result = [];
+    var argsLength = arguments.length;
+    for (var i = 0, length = getLength(array); i < length; i++) {
+      var item = array[i];
+      if (contains(result, item)) continue;
+      var j;
+      for (j = 1; j < argsLength; j++) {
+        if (!contains(arguments[j], item)) break;
+      }
+      if (j === argsLength) result.push(item);
+    }
+    return result;
+  }
+
+  // Complement of zip. Unzip accepts an array of arrays and groups
+  // each array's elements on shared indices.
+  function unzip(array) {
+    var length = array && max(array, getLength).length || 0;
+    var result = Array(length);
+
+    for (var index = 0; index < length; index++) {
+      result[index] = pluck(array, index);
+    }
+    return result;
+  }
+
+  // Zip together multiple lists into a single array -- elements that share
+  // an index go together.
+  var zip = restArguments(unzip);
+
+  // Converts lists into objects. Pass either a single array of `[key, value]`
+  // pairs, or two parallel arrays of the same length -- one of keys, and one of
+  // the corresponding values. Passing by pairs is the reverse of `_.pairs`.
+  function object(list, values) {
+    var result = {};
+    for (var i = 0, length = getLength(list); i < length; i++) {
+      if (values) {
+        result[list[i]] = values[i];
+      } else {
+        result[list[i][0]] = list[i][1];
+      }
+    }
+    return result;
+  }
+
+  // Generate an integer Array containing an arithmetic progression. A port of
+  // the native Python `range()` function. See
+  // [the Python documentation](https://docs.python.org/library/functions.html#range).
+  function range(start, stop, step) {
+    if (stop == null) {
+      stop = start || 0;
+      start = 0;
+    }
+    if (!step) {
+      step = stop < start ? -1 : 1;
+    }
+
+    var length = Math.max(Math.ceil((stop - start) / step), 0);
+    var range = Array(length);
+
+    for (var idx = 0; idx < length; idx++, start += step) {
+      range[idx] = start;
+    }
+
+    return range;
+  }
+
+  // Chunk a single array into multiple arrays, each containing `count` or fewer
+  // items.
+  function chunk(array, count) {
+    if (count == null || count < 1) return [];
+    var result = [];
+    var i = 0, length = array.length;
+    while (i < length) {
+      result.push(slice.call(array, i, i += count));
+    }
+    return result;
+  }
+
+  // Helper function to continue chaining intermediate results.
+  function chainResult(instance, obj) {
+    return instance._chain ? _$1(obj).chain() : obj;
+  }
+
+  // Add your own custom functions to the Underscore object.
+  function mixin(obj) {
+    each(functions(obj), function(name) {
+      var func = _$1[name] = obj[name];
+      _$1.prototype[name] = function() {
+        var args = [this._wrapped];
+        push.apply(args, arguments);
+        return chainResult(this, func.apply(_$1, args));
+      };
+    });
+    return _$1;
+  }
+
+  // Add all mutator `Array` functions to the wrapper.
+  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+    var method = ArrayProto[name];
+    _$1.prototype[name] = function() {
+      var obj = this._wrapped;
+      if (obj != null) {
+        method.apply(obj, arguments);
+        if ((name === 'shift' || name === 'splice') && obj.length === 0) {
+          delete obj[0];
+        }
+      }
+      return chainResult(this, obj);
+    };
+  });
+
+  // Add all accessor `Array` functions to the wrapper.
+  each(['concat', 'join', 'slice'], function(name) {
+    var method = ArrayProto[name];
+    _$1.prototype[name] = function() {
+      var obj = this._wrapped;
+      if (obj != null) obj = method.apply(obj, arguments);
+      return chainResult(this, obj);
+    };
+  });
+
+  // Named Exports
+
+  var allExports = {
+    __proto__: null,
+    VERSION: VERSION,
+    restArguments: restArguments,
+    isObject: isObject,
+    isNull: isNull,
+    isUndefined: isUndefined,
+    isBoolean: isBoolean,
+    isElement: isElement,
+    isString: isString,
+    isNumber: isNumber,
+    isDate: isDate,
+    isRegExp: isRegExp,
+    isError: isError,
+    isSymbol: isSymbol,
+    isArrayBuffer: isArrayBuffer,
+    isDataView: isDataView$1,
+    isArray: isArray,
+    isFunction: isFunction$1,
+    isArguments: isArguments$1,
+    isFinite: isFinite$1,
+    isNaN: isNaN$1,
+    isTypedArray: isTypedArray$1,
+    isEmpty: isEmpty,
+    isMatch: isMatch,
+    isEqual: isEqual,
+    isMap: isMap,
+    isWeakMap: isWeakMap,
+    isSet: isSet,
+    isWeakSet: isWeakSet,
+    keys: keys,
+    allKeys: allKeys,
+    values: values,
+    pairs: pairs,
+    invert: invert,
+    functions: functions,
+    methods: functions,
+    extend: extend,
+    extendOwn: extendOwn,
+    assign: extendOwn,
+    defaults: defaults,
+    create: create,
+    clone: clone,
+    tap: tap,
+    get: get,
+    has: has,
+    mapObject: mapObject,
+    identity: identity,
+    constant: constant,
+    noop: noop,
+    toPath: toPath$1,
+    property: property,
+    propertyOf: propertyOf,
+    matcher: matcher,
+    matches: matcher,
+    times: times,
+    random: random,
+    now: now,
+    escape: _escape,
+    unescape: _unescape,
+    templateSettings: templateSettings,
+    template: template,
+    result: result,
+    uniqueId: uniqueId,
+    chain: chain,
+    iteratee: iteratee,
+    partial: partial,
+    bind: bind,
+    bindAll: bindAll,
+    memoize: memoize,
+    delay: delay,
+    defer: defer,
+    throttle: throttle,
+    debounce: debounce,
+    wrap: wrap,
+    negate: negate,
+    compose: compose,
+    after: after,
+    before: before,
+    once: once,
+    findKey: findKey,
+    findIndex: findIndex,
+    findLastIndex: findLastIndex,
+    sortedIndex: sortedIndex,
+    indexOf: indexOf,
+    lastIndexOf: lastIndexOf,
+    find: find,
+    detect: find,
+    findWhere: findWhere,
+    each: each,
+    forEach: each,
+    map: map,
+    collect: map,
+    reduce: reduce,
+    foldl: reduce,
+    inject: reduce,
+    reduceRight: reduceRight,
+    foldr: reduceRight,
+    filter: filter,
+    select: filter,
+    reject: reject,
+    every: every,
+    all: every,
+    some: some,
+    any: some,
+    contains: contains,
+    includes: contains,
+    include: contains,
+    invoke: invoke,
+    pluck: pluck,
+    where: where,
+    max: max,
+    min: min,
+    shuffle: shuffle,
+    sample: sample,
+    sortBy: sortBy,
+    groupBy: groupBy,
+    indexBy: indexBy,
+    countBy: countBy,
+    partition: partition,
+    toArray: toArray,
+    size: size,
+    pick: pick,
+    omit: omit,
+    first: first,
+    head: first,
+    take: first,
+    initial: initial,
+    last: last,
+    rest: rest,
+    tail: rest,
+    drop: rest,
+    compact: compact,
+    flatten: flatten,
+    without: without,
+    uniq: uniq,
+    unique: uniq,
+    union: union,
+    intersection: intersection,
+    difference: difference,
+    unzip: unzip,
+    transpose: unzip,
+    zip: zip,
+    object: object,
+    range: range,
+    chunk: chunk,
+    mixin: mixin,
+    'default': _$1
+  };
+
+  // Default Export
+
+  // Add all of the Underscore functions to the wrapper object.
+  var _ = mixin(allExports);
+  // Legacy Node.js API.
+  _._ = _;
+
+  return _;
+
+})));
+//# sourceMappingURL=underscore-umd.js.map
diff --git a/VimbaX/doc/VimbaX_Documentation/_static/underscore.js b/VimbaX/doc/VimbaX_Documentation/_static/underscore.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf177d4285ab55fbc16406a5ec827b80e7eecd53
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/_static/underscore.js
@@ -0,0 +1,6 @@
+!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){
+//     Underscore.js 1.13.1
+//     https://underscorejs.org
+//     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
+//     Underscore may be freely distributed under the MIT license.
+var n="1.13.1",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u<t;u++)e[u]=arguments[u+r];switch(r){case 0:return n.call(this,e);case 1:return n.call(this,arguments[0],e);case 2:return n.call(this,arguments[0],arguments[1],e)}var o=Array(r+1);for(u=0;u<r;u++)o[u]=arguments[u];return o[r]=e,n.apply(this,o)}}function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}function w(n){return void 0===n}function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}function x(n){var r="[object "+n+"]";return function(n){return a.call(n)===r}}var S=x("String"),O=x("Number"),M=x("Date"),E=x("RegExp"),B=x("Error"),N=x("Symbol"),I=x("ArrayBuffer"),T=x("Function"),k=r.document&&r.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof k&&(T=function(n){return"function"==typeof n||!1});var D=T,R=x("Object"),F=l&&R(new DataView(new ArrayBuffer(8))),V="undefined"!=typeof Map&&R(new Map),P=x("DataView");var q=F?function(n){return null!=n&&D(n.getInt8)&&I(n.buffer)}:P,U=s||x("Array");function W(n,r){return null!=n&&f.call(n,r)}var z=x("Arguments");!function(){z(arguments)||(z=function(n){return W(n,"callee")})}();var L=z;function $(n){return O(n)&&y(n)}function C(n){return function(){return n}}function K(n){return function(r){var t=n(r);return"number"==typeof t&&t>=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]]=!0;return{contains:function(n){return r[n]},push:function(t){return r[t]=!0,n.push(t)}}}(r);var t=b.length,u=n.constructor,o=D(u)&&u.prototype||e,i="constructor";for(W(n,i)&&!r.contains(i)&&r.push(i);t--;)(i=b[t])in n&&n[i]!==o[i]&&!r.contains(i)&&r.push(i)}function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in n)W(n,t)&&r.push(t);return g&&Z(n,r),r}function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wrapped=n):new tn(n)}function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}tn.VERSION=n,tn.prototype.value=function(){return this._wrapped},tn.prototype.valueOf=tn.prototype.toJSON=tn.prototype.value,tn.prototype.toString=function(){return String(this._wrapped)};var un="[object DataView]";function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var o=typeof n;return("function"===o||"object"===o||"object"==typeof r)&&function n(r,t,e,o){r instanceof tn&&(r=r._wrapped);t instanceof tn&&(t=t._wrapped);var i=a.call(r);if(i!==a.call(t))return!1;if(F&&"[object Object]"==i&&q(r)){if(!q(t))return!1;i=un}switch(i){case"[object RegExp]":case"[object String]":return""+r==""+t;case"[object Number]":return+r!=+r?+t!=+t:0==+r?1/+r==1/t:+r==+t;case"[object Date]":case"[object Boolean]":return+r==+t;case"[object Symbol]":return u.valueOf.call(r)===u.valueOf.call(t);case"[object ArrayBuffer]":case un:return n(en(r),en(t),e,o)}var f="[object Array]"===i;if(!f&&X(r)){if(G(r)!==G(t))return!1;if(r.buffer===t.buffer&&r.byteOffset===t.byteOffset)return!0;f=!0}if(!f){if("object"!=typeof r||"object"!=typeof t)return!1;var c=r.constructor,l=t.constructor;if(c!==l&&!(D(c)&&c instanceof c&&D(l)&&l instanceof l)&&"constructor"in r&&"constructor"in t)return!1}o=o||[];var s=(e=e||[]).length;for(;s--;)if(e[s]===r)return o[s]===t;if(e.push(r),o.push(t),f){if((s=r.length)!==t.length)return!1;for(;s--;)if(!on(r[s],t[s],e,o))return!1}else{var p,v=nn(r);if(s=v.length,nn(t).length!==s)return!1;for(;s--;)if(p=v[s],!W(t,p)||!on(r[p],t[p],e,o))return!1}return e.pop(),o.pop(),!0}(n,r,t,e)}function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);return g&&Z(n,r),r}function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=an(t);if(Y(e))return!1;for(var u=0;u<r;u++)if(!D(t[n[u]]))return!1;return n!==hn||!D(t[cn])}}var cn="forEach",ln="has",sn=["clear","delete"],pn=["get",ln,"set"],vn=sn.concat(cn,pn),hn=sn.concat(pn),yn=["add"].concat(sn,cn,ln),dn=V?fn(vn):x("Map"),gn=V?fn(hn):x("WeakMap"),bn=V?fn(yn):x("Set"),mn=x("WeakSet");function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Object(t)),e<2||null==t)return t;for(var u=1;u<e;u++)for(var o=arguments[u],i=n(o),a=i.length,f=0;f<a;f++){var c=i[f];r&&void 0!==t[c]||(t[c]=o[c])}return t}}var xn=An(an),Sn=An(nn),On=An(an,!0);function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.prototype=n;var t=new r;return r.prototype=null,t}function En(n){return _(n)?U(n)?n.slice():xn({},n):n}function Bn(n){return U(n)?n:[n]}function Nn(n){return tn.toPath(n)}function In(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function Tn(n,r,t){var e=In(n,Nn(r));return w(e)?t:e}function kn(n){return n}function Dn(n){return n=Sn({},n),function(r){return rn(r,n)}}function Rn(n){return n=Nn(n),function(r){return In(r,n)}}function Fn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:return function(t){return n.call(r,t)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return function(){return n.apply(r,arguments)}}function Vn(n,r,t){return null==n?kn:D(n)?Fn(n,r,t):_(n)&&!U(n)?Dn(n):Rn(n)}function Pn(n,r){return Vn(n,r,1/0)}function qn(n,r,t){return tn.iteratee!==Pn?tn.iteratee(n,r):Vn(n,r,t)}function Un(){}function Wn(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}tn.toPath=Bn,tn.iteratee=Pn;var zn=Date.now||function(){return(new Date).getTime()};function Ln(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")",e=RegExp(t),u=RegExp(t,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,r):n}}var $n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a<o;a++)i[a]=r[a]===t?arguments[u++]:r[a];for(;u<arguments.length;)i.push(arguments[u++]);return nr(n,e,this,this,i)};return e}));rr.placeholder=tn;var tr=j((function(n,r,t){if(!D(n))throw new TypeError("Bind must be called on a function");var e=j((function(u){return nr(n,e,r,this,t.concat(u))}));return e})),er=K(Y);function ur(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}else r=1/0;for(var u=e.length,o=0,i=Y(n);o<i;o++){var a=n[o];if(er(a)&&(U(a)||L(a)))if(r>1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else t||(e[u++]=a)}return e}var or=j((function(n,r){var t=(r=ur(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=tr(n[e],n)}return n}));var ir=j((function(n,r,t){return setTimeout((function(){return n.apply(null,t)}),r)})),ar=rr(ir,tn,1);function fr(n){return function(){return!n.apply(this,arguments)}}function cr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function pr(n){return function(r,t,e){t=qn(t,e);for(var u=Y(r),o=n>0?0:u-1;o>=0&&o<u;o+=n)if(t(r[o],o,r))return o;return-1}}var vr=pr(1),hr=pr(-1);function yr(n,r,t,e){for(var u=(t=qn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function dr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==typeof o)n>0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o<f;o+=n)if(e[o]===u)return o;return-1}}var gr=dr(1,vr,yr),br=dr(-1,hr);function mr(n,r,t){var e=(er(n)?vr:sr)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function jr(n,r,t){var e,u;if(r=Fn(r,t),er(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=nn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function _r(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function wr(n){var r=function(r,t,e,u){var o=!er(r)&&nn(r),i=(o||r).length,a=n>0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a<i;a+=n){var f=o?o[a]:a;e=t(e,r[f],f,r)}return e};return function(n,t,e,u){var o=arguments.length>=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function Mr(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function Er(n,r,t,e){return er(n)||(n=jn(n)),("number"!=typeof t||e)&&(t=0),gr(n,r,t)>=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e>o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=Wn(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function kr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=qn(e,u),jr(t,(function(r,u){var i=e(r,u,t);n(o,r,i)})),o}}var Dr=kr((function(n,r,t){W(n,t)?n[t].push(r):n[t]=[r]})),Rr=kr((function(n,r,t){n[t]=r})),Fr=kr((function(n,r,t){W(n,t)?n[t]++:n[t]=1})),Vr=kr((function(n,r,t){n[t?0:1].push(r)}),!0),Pr=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function qr(n,r,t){return r in t}var Ur=j((function(n,r){var t={},e=r[0];if(null==n)return t;D(e)?(r.length>1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t})),Wr=j((function(n,r){var t,e=r[0];return D(e)?(e=fr(e),r.length>1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?Er(o,c)||(o.push(c),u.push(f)):Er(u,f)||u.push(f)}return u}var Gr=j((function(n){return Jr(ur(n,!0,!0))}));function Hr(n){for(var r=n&&Ir(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e]=Nr(n,e);return t}var Qr=j(Hr);function Xr(n,r){return n._chain?tn(r).chain():r}function Yr(n){return jr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototype[r]=function(){var n=[this._wrapped];return o.apply(n,arguments),Xr(this,t.apply(tn,n))}})),tn}jr(["pop","push","reverse","shift","sort","splice","unshift"],(function(n){var r=t[n];tn.prototype[n]=function(){var t=this._wrapped;return null!=t&&(r.apply(t,arguments),"shift"!==n&&"splice"!==n||0!==t.length||delete t[0]),Xr(this,t)}})),jr(["concat","join","slice"],(function(n){var r=t[n];tn.prototype[n]=function(){var n=this._wrapped;return null!=n&&(n=r.apply(n,arguments)),Xr(this,n)}}));var Zr=Yr({__proto__:null,VERSION:n,restArguments:j,isObject:_,isNull:function(n){return null===n},isUndefined:w,isBoolean:A,isElement:function(n){return!(!n||1!==n.nodeType)},isString:S,isNumber:O,isDate:M,isRegExp:E,isError:B,isSymbol:N,isArrayBuffer:I,isDataView:q,isArray:U,isFunction:D,isArguments:L,isFinite:function(n){return!N(n)&&d(n)&&!isNaN(parseFloat(n))},isNaN:$,isTypedArray:X,isEmpty:function(n){if(null==n)return!0;var r=Y(n);return"number"==typeof r&&(U(n)||S(n)||L(n))?0===r:0===Y(nn(n))},isMatch:rn,isEqual:function(n,r){return on(n,r)},isMap:dn,isWeakMap:gn,isSet:bn,isWeakSet:mn,keys:nn,allKeys:an,values:jn,pairs:function(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:_n,functions:wn,methods:wn,extend:xn,extendOwn:Sn,assign:Sn,defaults:On,create:function(n,r){var t=Mn(n);return r&&Sn(t,r),t},clone:En,tap:function(n,r){return r(n),n},get:Tn,has:function(n,r){for(var t=(r=Nn(r)).length,e=0;e<t;e++){var u=r[e];if(!W(n,u))return!1;n=n[u]}return!!t},mapObject:function(n,r,t){r=qn(r,t);for(var e=nn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},identity:kn,constant:C,noop:Un,toPath:Bn,property:Rn,propertyOf:function(n){return null==n?Un:function(r){return Tn(n,r)}},matcher:Dn,matches:Dn,times:function(n,r,t){var e=Array(Math.max(0,n));r=Fn(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:Wn,now:zn,escape:Cn,unescape:Kn,templateSettings:Jn,template:function(n,r,t){!r&&t&&(r=t),r=On({},r,tn.templateSettings);var e=RegExp([(r.escape||Gn).source,(r.interpolate||Gn).source,(r.evaluate||Gn).source].join("|")+"|$","g"),u=0,o="__p+='";n.replace(e,(function(r,t,e,i,a){return o+=n.slice(u,a).replace(Qn,Xn),u=a+r.length,t?o+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?o+="'+\n((__t=("+e+"))==null?'':__t)+\n'":i&&(o+="';\n"+i+"\n__p+='"),r})),o+="';\n";var i,a=r.variable;if(a){if(!Yn.test(a))throw new Error("variable is not a bare identifier: "+a)}else o="with(obj||{}){\n"+o+"}\n",a="obj";o="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{i=new Function(a,"_",o)}catch(n){throw n.source=o,n}var f=function(n){return i.call(this,n,tn)};return f.source="function("+a+"){\n"+o+"}",f},result:function(n,r,t){var e=(r=Nn(r)).length;if(!e)return D(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=D(o)?o.call(n):o}return n},uniqueId:function(n){var r=++Zn+"";return n?n+r:r},chain:function(n){var r=tn(n);return r._chain=!0,r},iteratee:Pn,partial:rr,bind:tr,bindAll:or,memoize:function(n,r){var t=function(e){var u=t.cache,o=""+(r?r.apply(this,arguments):e);return W(u,o)||(u[o]=n.apply(this,arguments)),u[o]};return t.cache={},t},delay:ir,defer:ar,throttle:function(n,r,t){var e,u,o,i,a=0;t||(t={});var f=function(){a=!1===t.leading?0:zn(),e=null,i=n.apply(u,o),e||(u=o=null)},c=function(){var c=zn();a||!1!==t.leading||(a=c);var l=r-(c-a);return u=this,o=arguments,l<=0||l>r?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e<o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))<i||u===1/0&&o===1/0)&&(o=n,i=u)}));return o},shuffle:function(n){return Tr(n,1/0)},sample:Tr,sortBy:function(n,r,t){var e=0;return r=qn(r,t),Nr(_r(n,(function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}})).sort((function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(t>e||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index})),"value")},groupBy:Dr,indexBy:Rr,countBy:Fr,partition:Vr,toArray:function(n){return n?U(n)?i.call(n):S(n)?n.match(Pr):er(n)?_r(n,kn):jn(n):[]},size:function(n){return null==n?0:er(n)?n.length:nn(n).length},pick:Ur,omit:Wr,first:Lr,head:Lr,take:Lr,initial:zr,last:function(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[n.length-1]:$r(n,Math.max(0,n.length-r))},rest:$r,tail:$r,drop:$r,compact:function(n){return Sr(n,Boolean)},flatten:function(n,r){return ur(n,r,!1)},without:Kr,uniq:Jr,unique:Jr,union:Gr,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=Y(n);e<u;e++){var o=n[e];if(!Er(r,o)){var i;for(i=1;i<t&&Er(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:Cr,unzip:Hr,transpose:Hr,zip:Qr,object:function(n,r){for(var t={},e=0,u=Y(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(i.call(n,e,e+=r));return t},mixin:Yr,default:tn});return Zr._=Zr,Zr}));
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/about.html b/VimbaX/doc/VimbaX_Documentation/about.html
new file mode 100644
index 0000000000000000000000000000000000000000..5e848937a8fa95ba399947f5d3b6b123433dd963
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/about.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>About Vimba X &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="#" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Migration Guide" href="migrationGuide.html" />
+    <link rel="prev" title="Vimba X Developer Guide" href="index.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">About Vimba X</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#compatibility">Compatibility</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#supported-features">Supported features</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#windows">Windows</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#linux">Linux</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>About Vimba X</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="about-vimba-x">
+<h1>About Vimba X<a class="headerlink" href="#about-vimba-x" title="Permalink to this headline"></a></h1>
+<p>Vimba X is a new fully GenICam-compliant SDK. As the successor of Vimba, it offers
+extended functionalities:</p>
+<ul class="simple">
+<li><p>You can use GenICam-compliant cameras and transport layers
+for all camera interfaces from all manufacturers.</p></li>
+<li><p>Usage with cameras and TLs from third-party vendors is free of charge.
+You don’t need any additional licenses.</p></li>
+<li><p>Advanced configuration of devices such as frame grabbers and
+of the TLs is possible (separate access to all cameras and
+transport layers, no more feature merging of camera and TL).</p></li>
+<li><p>Extended capabilities for saving and loading settings</p></li>
+</ul>
+<section id="compatibility">
+<span id="index-0"></span><h2>Compatibility<a class="headerlink" href="#compatibility" title="Permalink to this headline"></a></h2>
+<p>Tested operating systems and cameras are listed in the release notes.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Alvium MIPI camera users: The camera driver must be installed before
+using Vimba. It is available at:</p>
+<p><a class="reference external" href="https://github.com/alliedvision">https://github.com/alliedvision</a></p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>FireWire (IEEE 1394) is not supported because this interface is not GenICam-compliant.</p>
+</div>
+</section>
+<section id="supported-features">
+<h2>Supported features<a class="headerlink" href="#supported-features" title="Permalink to this headline"></a></h2>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Please note that only GenICam-compliant features are supported.
+Features of the camera, transport layer, or frame grabber that are not
+compliant are not supported.</p>
+</div>
+<span class="target" id="index-1"></span><div class="admonition note" id="index-2">
+<p class="admonition-title">Note</p>
+<p>Allied Vision’s legacy cameras: Chunk and Events are not implemented in a GenICam-compliant way.</p>
+</div>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>By default, TLs contained in the Vimba X installation are activated. To use
+other TLs, see the SDK Manual, chapter <a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation"><span class="std std-ref">TL activation and deactivation</span></a>.</p>
+</div>
+</section>
+<section id="installation">
+<span id="index-3"></span><h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
+<section id="windows">
+<h3>Windows<a class="headerlink" href="#windows" title="Permalink to this headline"></a></h3>
+<p>To automatically install the USB driver, onnect your USB camera before starting the Vimba X installation.
+After the installation, you can always use Vimba Driver Installer, see <a class="reference internal" href="driverInstaller.html"><span class="doc">Driver Installer Manual</span></a>.</p>
+<p>Silent installation: The VimbaX_Install*.exe can be called with the the following command line options:</p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">/S</span></code> : Silent install</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">/D</span></code> : Sets the default installation directory</p></li>
+</ul>
+<p>The VimbaX_Uninstall.exe can be called with the following command line options:</p>
+<p><code class="docutils literal notranslate"><span class="pre">/S</span></code> : Silent uninstall</p>
+</section>
+<section id="linux">
+<h3>Linux<a class="headerlink" href="#linux" title="Permalink to this headline"></a></h3>
+<p>Installation instructions are listed in the release notes for your operating system.
+If you have issues, see <a class="reference internal" href="troubleshooting.html"><span class="doc">Troubleshooting</span></a>.</p>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="index.html" class="btn btn-neutral float-left" title="Vimba X Developer Guide" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="migrationGuide.html" class="btn btn-neutral float-right" title="Migration Guide" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/cAPIManual.html b/VimbaX/doc/VimbaX_Documentation/cAPIManual.html
new file mode 100644
index 0000000000000000000000000000000000000000..086701e02840ff7e359dcc0f57a447fbaeed246d
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/cAPIManual.html
@@ -0,0 +1,1988 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>C API Manual &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="CPP API Manual" href="cppAPIManual.html" />
+    <link rel="prev" title="SDK Manual" href="sdkManual.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">C API Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#introduction-to-the-api">Introduction to the API</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#api-usage">API usage</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#api-version">API version</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#api-startup-and-shutdown">API startup and shutdown</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#listing-cameras">Listing cameras</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#extended-id">Extended ID</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#gige-cameras">GigE cameras</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#usb-cameras">USB cameras</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#camera-link-cameras">Camera Link cameras</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#mipi-csi-cameras">MIPI CSI cameras</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#struct-vmbcamerainfo-t">Struct VmbCameraInfo_t</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#enabling-notifications-of-changed-camera-states">Enabling notifications of changed camera states</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#opening-and-closing-a-camera">Opening and closing a camera</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#listing-transport-layers">Listing transport layers</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#struct-vmbtransportlayerinfo-t">Struct VmbTransportLayerInfo_t</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#accessing-features">Accessing features</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#feature-types">Feature types</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#struct-vmbfeatureinfo-t">Struct VmbFeatureInfo_t</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#camera-features">Camera features</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#struct-vmbfeatureenumentry-t">Struct VmbFeatureEnumEntry_t</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#acquiring-images">Acquiring images</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#image-capture-vs-image-acquisition">Image Capture vs. Image Acquisition</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#image-capture">Image Capture</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#image-acquisition">Image Acquisition</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#struct-vmbframe-t">Struct VmbFrame_t</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#transforming-images">Transforming images</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#using-events">Using Events</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#chunk">Chunk</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#saving-and-loading-settings">Saving and loading settings</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#triggering">Triggering</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#external-trigger">External trigger</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#trigger-over-ethernet-action-commands">Trigger over Ethernet – Action Commands</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#listing-interfaces">Listing interfaces</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#struct-vmbinterfaceinfo-t">Struct VmbInterfaceInfo_t</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#enabling-notifications-of-changed-interface-states">Enabling notifications of changed interface states</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#tl-enumerations">TL enumerations</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#error-codes">Error codes</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>C API Manual</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="c-api-manual">
+<h1>C API Manual<a class="headerlink" href="#c-api-manual" title="Permalink to this headline"></a></h1>
+<section id="introduction-to-the-api">
+<h2>Introduction to the API<a class="headerlink" href="#introduction-to-the-api" title="Permalink to this headline"></a></h2>
+<p>The C API is the underlying API of Vimba X.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>To understand the API, read the <a class="reference internal" href="sdkManual.html"><span class="doc">SDK Manual</span></a> first:
+It contains essential information.
+For a quick start, use the examples.</p>
+</div>
+</section>
+<section id="api-usage">
+<h2>API usage<a class="headerlink" href="#api-usage" title="Permalink to this headline"></a></h2>
+<section id="api-version">
+<span id="index-0"></span><h3>API version<a class="headerlink" href="#api-version" title="Permalink to this headline"></a></h3>
+<p>Even if new features are introduced to the C API, your software
+remains backward compatible. Use <code class="docutils literal notranslate"><span class="pre">VmbVersionQuery()</span></code> to check
+the version number of the C API. You can run this function without
+initializing the API.</p>
+</section>
+<section id="api-startup-and-shutdown">
+<h3>API startup and shutdown<a class="headerlink" href="#api-startup-and-shutdown" title="Permalink to this headline"></a></h3>
+<p>To start and shut down the API, use these paired functions:</p>
+<ul class="simple">
+<li><p>The function <code class="docutils literal notranslate"><span class="pre">VmbStartup()</span></code>:</p>
+<ul>
+<li><p>Initializes the API.</p></li>
+<li><p>Enumerates interfaces and cameras and retrieves the Camera handle.</p></li>
+<li><p>Has an optional parameter. You can use this parameter to select which transport layers are used.</p></li>
+</ul>
+</li>
+<li><p>The function <code class="docutils literal notranslate"><span class="pre">VmbShutdown()</span></code>:</p>
+<ul>
+<li><p>Blocks until all callbacks have finished execution.</p></li>
+<li><p>Shuts down the API as soon as all callbacks are finished.</p></li>
+</ul>
+</li>
+</ul>
+<p>The functions <code class="docutils literal notranslate"><span class="pre">VmbStartup()</span></code> and <code class="docutils literal notranslate"><span class="pre">VmbShutdown()</span></code> must always be paired.
+Calling the pair several times within the same program is possible,
+but not recommended.
+To free resources, shut down the API when you don’t use it. Shutting down
+the API closes all opened cameras.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For details about the optional parameter, see the SDK Manual,
+chapter <a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation"><span class="std std-ref">TL activation and deactivation</span></a> and the
+<em>ListCameras</em> example.</p>
+</div>
+</section>
+<section id="listing-cameras">
+<span id="index-1"></span><h3>Listing cameras<a class="headerlink" href="#listing-cameras" title="Permalink to this headline"></a></h3>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a quick start, see the <em>ListCameras</em> example.</p>
+</div>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbCamerasList()</span></code> enumerates all cameras recognized by
+the underlying transport layers. With this command, you can
+fetch all static details of a camera such as:</p>
+<ul class="simple">
+<li><p>Camera ID or extended ID</p></li>
+<li><p>Camera model</p></li>
+<li><p>Name or ID of the connected interface (for example, the NIC)</p></li>
+</ul>
+<section id="extended-id">
+<span id="index-2"></span><h4>Extended ID<a class="headerlink" href="#extended-id" title="Permalink to this headline"></a></h4>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>In most cases, the Extended ID is not needed. You can use it as needed.</p>
+</div>
+<p>If several TLs are available for one camera, the camera is listed several times.
+To avoid potential conflicts, the SDK automatically creates an extended ID string for each camera.
+extended ID string is provided in the struct <code class="docutils literal notranslate"><span class="pre">VmbCameraInfo_t:</span> <span class="pre">cameraIdStringExtended</span></code>.</p>
+<p>Extended IDs use the following grammar:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>extended_id : &lt;tl_identifier-char-count&gt; separator tl_identifier &lt;interface_id-char-count&gt;
+separator interface_id &lt;camera_id-char-count&gt; separator camera_id separator   : &#39;:&#39;`
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Extended IDs always overwrite other ids. A non-extended ID may be unusable after other cameras
+are discovered.</p>
+</div>
+<table class="docutils align-default" id="id1">
+<caption><span class="caption-text">Extended IDs</span><a class="headerlink" href="#id1" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 30%" />
+<col style="width: 70%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Placeholder</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>tl_identifier</p></td>
+<td><p>File path of the transport layer</p></td>
+</tr>
+<tr class="row-odd"><td><p>interface_id</p></td>
+<td><p>ID of the interface as reported by the transport layer</p></td>
+</tr>
+<tr class="row-even"><td><p>camera_id</p></td>
+<td><p>Camera (non-extended) ID as reported by the interface</p></td>
+</tr>
+<tr class="row-odd"><td><p>&lt;tl_identifier-char-count&gt;</p></td>
+<td><p>Number of characters (TL ID) encoded as decimal integer</p></td>
+</tr>
+<tr class="row-even"><td><p>&lt;interface_id-char-count&gt;</p></td>
+<td><p>Number of characters (interface ID) encoded as decimal integer</p></td>
+</tr>
+<tr class="row-odd"><td><p>&lt;camera_id-char-count&gt;</p></td>
+<td><p>Number of characters encoded as decimal integer</p></td>
+</tr>
+</tbody>
+</table>
+<p>The order in which the detected cameras are listed is determined by
+the order of camera discovery and therefore not deterministic.
+Moreover, the order may change depending on your system configuration and the
+accessories (for example, hubs or long cables).</p>
+</section>
+<section id="gige-cameras">
+<h4>GigE cameras<a class="headerlink" href="#gige-cameras" title="Permalink to this headline"></a></h4>
+<p>Listing GigE cameras requires a certain amount of time. By default, <code class="docutils literal notranslate"><span class="pre">GeVDiscoveryAllAuto()</span></code>.
+is enabled. You can easily enable <code class="docutils literal notranslate"><span class="pre">GeVDiscoveryAllOnce()</span></code> in VmbC.xml if you want to
+reduce bandwidth.</p>
+</section>
+<section id="usb-cameras">
+<h4>USB cameras<a class="headerlink" href="#usb-cameras" title="Permalink to this headline"></a></h4>
+<p>Changes to the plugged cameras are detected automatically. Therefore, all
+changes to the camera list are announced via discovery event.
+All listed commands are applied to all network interfaces,
+see the code snippet below.</p>
+</section>
+<section id="camera-link-cameras">
+<h4>Camera Link cameras<a class="headerlink" href="#camera-link-cameras" title="Permalink to this headline"></a></h4>
+<p>The specifications of Camera Link and GenCP do not support plug &amp; play or
+discovery events. To detect changes to the camera list, shutdown and startup
+the API by calling <code class="docutils literal notranslate"><span class="pre">VmbSystem::Shutdown</span></code> and <code class="docutils literal notranslate"><span class="pre">VmbSystem::Startup</span></code> consecutively.</p>
+</section>
+<section id="mipi-csi-cameras">
+<h4>MIPI CSI cameras<a class="headerlink" href="#mipi-csi-cameras" title="Permalink to this headline"></a></h4>
+<p>Cameras with MIPI CSI-2 interface are detected when the board is booted.
+To avoid damage to the hardware, do not plug in or out a camera while the board is powered.</p>
+<div class="literal-block-wrapper docutils container" id="id2">
+<span id="index-3"></span><div class="code-block-caption"><span class="caption-text">List cameras code snippet</span><a class="headerlink" href="#id2" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">VmbUint32_t</span><span class="w"> </span><span class="n">nCount</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbCameraInfo_t</span><span class="o">*</span><span class="w"> </span><span class="n">pCameras</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Get the number of connected cameras</span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbCamerasList</span><span class="p">(</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">nCount</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="o">*</span><span class="n">pCameras</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">err</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="c1">// Allocate accordingly</span>
+<span class="w">   </span><span class="n">pCameras</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">VmbCameraInfo_t</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">malloc</span><span class="p">(</span><span class="w"> </span><span class="n">nCount</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="o">*</span><span class="n">pCameras</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="w">       </span><span class="c1">// Get the cameras</span>
+<span class="w">   </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbCamerasList</span><span class="p">(</span><span class="w"> </span><span class="n">pCameras</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="n">nCount</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">nCount</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="o">*</span><span class="n">pCameras</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="w">   </span><span class="c1">// Print out each camera&#39;s name</span>
+<span class="w">   </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbUint32_t</span><span class="w"> </span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">&lt;</span><span class="n">nCount</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">   </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">&quot; %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pCameras</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="w"> </span><span class="n">cameraName</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+</section>
+<section id="struct-vmbcamerainfo-t">
+<span id="index-4"></span><h4>Struct VmbCameraInfo_t<a class="headerlink" href="#struct-vmbcamerainfo-t" title="Permalink to this headline"></a></h4>
+<p>Struct <em>VmbCameraInfo_t</em> provides the entries listed in the table below
+for obtaining information about a camera. You can query the struct with
+the functions <code class="docutils literal notranslate"><span class="pre">VmbCamerasList()</span></code> and <code class="docutils literal notranslate"><span class="pre">VmbCameraInfoQuery()</span></code>.</p>
+<p>To access all GenTL modules via this struct:</p>
+<ul class="simple">
+<li><p>To access all GenTL modules via this struct, first open the camera and
+call <code class="docutils literal notranslate"><span class="pre">VmbCameraInfoQuery()</span></code>.</p></li>
+<li><p>Alternatively, use <code class="docutils literal notranslate"><span class="pre">VmbFeatureIntValidValueSetQuery()</span></code>, which uses a local or remote device handle.
+This function returns an error if the handle is invalid or the camera associated with the handle
+is no longer open.</p></li>
+</ul>
+<table class="docutils align-default" id="id3">
+<caption><span class="caption-text">VmbCameraInfo_t</span><a class="headerlink" href="#id3" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 20%" />
+<col style="width: 29%" />
+<col style="width: 52%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Type</p></th>
+<th class="head"><p>Field</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>const char*</p></td>
+<td><p>cameraIdString</p></td>
+<td><p>Unique identifier for each camera</p></td>
+</tr>
+<tr class="row-odd"><td><p>const char*</p></td>
+<td><p>cameraIdStringExtended</p></td>
+<td><p>Extended unique identifier for each camera</p></td>
+</tr>
+<tr class="row-even"><td><p>const char*</p></td>
+<td><p>cameraName</p></td>
+<td><p>Name of the camera</p></td>
+</tr>
+<tr class="row-odd"><td><p>const char*</p></td>
+<td><p>modelName</p></td>
+<td><p>The model name</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbAccessMode_t</p></td>
+<td><p>permittedAccess</p></td>
+<td><p>See VmbAccessModeType</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbHandle_t</p></td>
+<td><p>transportLayerHandle</p></td>
+<td><p>Handle for the transport layer (system) module</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbHandle_t</p></td>
+<td><p>interfaceHandle</p></td>
+<td><p>Handle for the interface module</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbHandle_t</p></td>
+<td><p>localDeviceHandle</p></td>
+<td><p>Handle for the local device (camera) module</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbHandle_t</p></td>
+<td><p>streamHandles</p></td>
+<td><p>Array of handles for the stream modules</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbHandle_t</p></td>
+<td><p>streamCount</p></td>
+<td><p>Number of entries in the streamHandles array</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+</section>
+<section id="enabling-notifications-of-changed-camera-states">
+<span id="index-5"></span><h3>Enabling notifications of changed camera states<a class="headerlink" href="#enabling-notifications-of-changed-camera-states" title="Permalink to this headline"></a></h3>
+<p>To get notified whenever a camera is detected, disconnected, or changes
+its open state:</p>
+<ul class="simple">
+<li><p>Use <code class="docutils literal notranslate"><span class="pre">VmbFeatureInvalidationRegister()</span></code> to register a callback with the
+gVmbHandle that gets executed on the according event. The function pointer to the
+callback function has to be of type
+<code class="docutils literal notranslate"><span class="pre">VmbInvalidationCallback</span></code>.</p></li>
+</ul>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Functions that must not be called within the camera notification callback:</p>
+<ul class="simple">
+<li><p>VmbStartup</p></li>
+<li><p>VmbShutdown</p></li>
+<li><p>VmbCameraOpen</p></li>
+<li><p>VmbCameraClose</p></li>
+<li><p>VmbFeatureIntSet (and any other VmbFeature*Set function)</p></li>
+<li><p>VmbFeatureCommandRun</p></li>
+</ul>
+</div>
+<span class="target" id="index-6"></span><span class="target" id="index-7"></span></section>
+<section id="opening-and-closing-a-camera">
+<span id="index-8"></span><h3>Opening and closing a camera<a class="headerlink" href="#opening-and-closing-a-camera" title="Permalink to this headline"></a></h3>
+<p>A camera must be opened to control it and to capture images.
+Call <code class="docutils literal notranslate"><span class="pre">VmbCameraOpen()</span></code> and provide the ID of the camera and the desired access mode.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbCameraOpen()</span></code> returns a handle to the camera only.</p>
+</div>
+<p>The API provides several access modes:</p>
+<ul class="simple">
+<li><p>VmbAccessModeFull: read and write access. Use this mode to configure the camera
+features and to acquire images (Goldeye CL cameras: configuration only).</p></li>
+<li><p>VmbAccessModeRead: read-only access. Setting features is not possible.
+However, for GigE cameras that are already in use by another application,
+the acquired images can be transferred to the API (Multicast).</p></li>
+</ul>
+<p>The enumerations are defined in VmbAccessModeType (or its VmbUint32_t representation
+VmbAccessMode_t).</p>
+<table class="docutils align-default" id="id4">
+<caption><span class="caption-text">Access modes</span><a class="headerlink" href="#id4" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 39%" />
+<col style="width: 20%" />
+<col style="width: 41%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Enumeration Integer   Value</p></th>
+<th class="head"><p>Integer Value</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbAccessModeNone</p></td>
+<td><p>0</p></td>
+<td><p>No access</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbAccessModeFull</p></td>
+<td><p>1</p></td>
+<td><p>Read and write access</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbAccessModeRead</p></td>
+<td><p>2</p></td>
+<td><p>Read-only access</p></td>
+</tr>
+</tbody>
+</table>
+<p>When a camera has been opened successfully, a handle for further access is returned.</p>
+<p>An example for opening a camera retrieved from the camera list is shown in
+the code snippet below.</p>
+<div class="literal-block-wrapper docutils container" id="id5">
+<span id="index-9"></span><div class="code-block-caption"><span class="caption-text">Open cameras code snippet</span><a class="headerlink" href="#id5" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">VmbCameraInfo_t</span><span class="w"> </span><span class="o">*</span><span class="n">pCameras</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">hCamera</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Get all known cameras as described in chapter &quot;Listing available cameras&quot;</span>
+<span class="c1">// Open the first camera</span>
+<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">VmbCameraOpen</span><span class="p">(</span><span class="w"> </span><span class="n">pCameras</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="w"> </span><span class="n">cameraIdString</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">     </span><span class="n">VmbAccessModeFull</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Camera opened , handle [0x%p] retrieved .</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<p>The code snippet below shows how to close a camera using <code class="docutils literal notranslate"><span class="pre">VmbCameraClose()</span></code>
+and the previously retrieved handle.</p>
+<div class="literal-block-wrapper docutils container" id="id6">
+<span id="index-10"></span><div class="code-block-caption"><span class="caption-text">Closing a camera code snippet</span><a class="headerlink" href="#id6" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">VmbCameraClose</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Camera closed .</span><span class="se">\n</span><span class="s">&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+</section>
+<section id="listing-transport-layers">
+<h3>Listing transport layers<a class="headerlink" href="#listing-transport-layers" title="Permalink to this headline"></a></h3>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbTransportLayersList()</span></code> enumerates all found TLs.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>To control which TLs are loaded or ignored, see <a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation"><span class="std std-ref">TL activation and deactivation</span></a>.</p>
+</div>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>The AsynchrounousGrab example lists all loaded TLs.</p>
+</div>
+<section id="struct-vmbtransportlayerinfo-t">
+<span id="index-11"></span><h4>Struct VmbTransportLayerInfo_t<a class="headerlink" href="#struct-vmbtransportlayerinfo-t" title="Permalink to this headline"></a></h4>
+<p>The struct <em>VmbTransportLayerInfo_t</em> holds read-only information about a transport layer.
+You can use it to retrieve a handle to the transport layer.
+You can query the struct with the function <code class="docutils literal notranslate"><span class="pre">VmbTransportLayersList()</span></code>.</p>
+<table class="docutils align-default" id="id7">
+<caption><span class="caption-text">Struct VmbTransportLayerInfo_t</span><a class="headerlink" href="#id7" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 46%" />
+<col style="width: 54%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Type</p></th>
+<th class="head"><p>Field</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>const char*</p></td>
+<td><p>transportLayerIdString</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbInterface_t</p></td>
+<td><p>transportLayerType</p></td>
+</tr>
+<tr class="row-even"><td><p>const char*</p></td>
+<td><p>transportLayerName</p></td>
+</tr>
+<tr class="row-odd"><td><p>const char*</p></td>
+<td><p>transportLayerPath</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbHandle_t</p></td>
+<td><p>transportLayerHandle</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+</section>
+<section id="accessing-features">
+<span id="index-12"></span><h3>Accessing features<a class="headerlink" href="#accessing-features" title="Permalink to this headline"></a></h3>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>To quickly learn how to list features of the GenTL modules, see the <em>ListFeatures</em> example.</p>
+</div>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbCameraOpen()</span></code> returns a handle to the camera, which can be used
+for accessing the camera features. The features of the other GenTL modules
+(system, interface, device, stream) can be accessed with the corresponding handle.
+These handles are part of the following structs:</p>
+<ul class="simple">
+<li><p>VmbCameraInfo_t</p></li>
+<li><p>VmbInterfaceInfo_t</p></li>
+<li><p>VmbSystemInfo_t</p></li>
+</ul>
+<section id="feature-types">
+<span id="index-13"></span><h4>Feature types<a class="headerlink" href="#feature-types" title="Permalink to this headline"></a></h4>
+<p>The C API provides several feature types, which all have their specific
+properties and functionalities.
+The  API provides its own set of access functions for every feature data type.</p>
+<table class="docutils align-default" id="id8">
+<caption><span class="caption-text">Feature types and functions for reading and writing features</span><a class="headerlink" href="#id8" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 25%" />
+<col style="width: 20%" />
+<col style="width: 54%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Feature Type</p></th>
+<th class="head"><p>Operation</p></th>
+<th class="head"><p>Function</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td rowspan="2"><p>Enumeration</p></td>
+<td><p>Set</p></td>
+<td><p>VmbFeatureEnumSet</p></td>
+</tr>
+<tr class="row-odd"><td><p>Get</p></td>
+<td><p>Get VmbFeatureEnumGet</p></td>
+</tr>
+<tr class="row-even"><td><p>Range</p></td>
+<td><p>Range</p></td>
+<td><p>VmbFeatureEnumRangeQuery</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2" rowspan="4"><p>Other</p></td>
+<td><p>VmbFeatureEnumIsAvailable</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFeatureEnumAsInt</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFeatureEnumAsString</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFeatureEnumEntryGet</p></td>
+</tr>
+<tr class="row-odd"><td rowspan="4"><p>Integer</p></td>
+<td><p>Set</p></td>
+<td><p>VmbFeatureIntSet</p></td>
+</tr>
+<tr class="row-even"><td><p>Get</p></td>
+<td><p>VmbFeatureIntGet</p></td>
+</tr>
+<tr class="row-odd"><td><p>Range</p></td>
+<td><p>VmbFeatureIntRangeQuery</p></td>
+</tr>
+<tr class="row-even"><td><p>Other</p></td>
+<td><p>VmbFeatureIntIncrementQuery</p></td>
+</tr>
+<tr class="row-odd"><td rowspan="2"><p>Float</p></td>
+<td><p>Set</p></td>
+<td><p>VmbFeatureFloatSet</p></td>
+</tr>
+<tr class="row-even"><td><p>Get</p></td>
+<td><p>VmbFeatureFloatGet</p></td>
+</tr>
+<tr class="row-odd"><td rowspan="3"><p>String</p></td>
+<td><p>Set</p></td>
+<td><p>VmbFeatureStringSet</p></td>
+</tr>
+<tr class="row-even"><td><p>Get</p></td>
+<td><p>VmbFeatureStringGet</p></td>
+</tr>
+<tr class="row-odd"><td><p>Range</p></td>
+<td><p>VmbFeatureStringMaxlengthQuery</p></td>
+</tr>
+<tr class="row-even"><td rowspan="2"><p>Boolean</p></td>
+<td><p>Set</p></td>
+<td><p>VmbFeatureBoolSet</p></td>
+</tr>
+<tr class="row-odd"><td><p>Get</p></td>
+<td><p>VmbFeatureBoolGet</p></td>
+</tr>
+<tr class="row-even"><td rowspan="2"><p>Command</p></td>
+<td><p>Set</p></td>
+<td><p>VmbFeatureCommandRun</p></td>
+</tr>
+<tr class="row-odd"><td><p>Get</p></td>
+<td><p>VmbFeatureCommandIsDone</p></td>
+</tr>
+<tr class="row-even"><td rowspan="3"><p>Raw data</p></td>
+<td><p>Set</p></td>
+<td><p>VmbFeatureRawSet</p></td>
+</tr>
+<tr class="row-odd"><td><p>Get</p></td>
+<td><p>VmbFeatureRawGet</p></td>
+</tr>
+<tr class="row-even"><td><p>Range</p></td>
+<td><p>VmbFeatureRawLengthQuery</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="struct-vmbfeatureinfo-t">
+<span id="index-14"></span><h4>Struct VmbFeatureInfo_t<a class="headerlink" href="#struct-vmbfeatureinfo-t" title="Permalink to this headline"></a></h4>
+<table class="docutils align-default" id="id9">
+<caption><span class="caption-text">Struct VmbFeatureInfo_t</span><a class="headerlink" href="#id9" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 46%" />
+<col style="width: 54%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Struct Entry</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>const char* name</p></td>
+<td><p>Name used in the API</p></td>
+</tr>
+<tr class="row-odd"><td><p>const char* displayName</p></td>
+<td><p>Enumeration entry name to be used in GUIs</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFeatureVisibility_t visibility</p></td>
+<td><p>GUI visibility</p></td>
+</tr>
+<tr class="row-odd"><td><p>const char* tooltip</p></td>
+<td><p>Short description, e.g. for a tooltip</p></td>
+</tr>
+<tr class="row-even"><td><p>const char* description</p></td>
+<td><p>Longer description</p></td>
+</tr>
+<tr class="row-odd"><td><p>const char* sfncNamespace n</p></td>
+<td><p>Namespace this feature resides in</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbInt64_t intValue</p></td>
+<td><p>Integer value of this enumeration entry</p></td>
+</tr>
+</tbody>
+</table>
+<span id="index-15"></span><table class="docutils align-default" id="id10">
+<caption><span class="caption-text">Enum VmbFeatureDataType is represented as VmbUint32_t through VmbFeatureData_t</span><a class="headerlink" href="#id10" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 33%" />
+<col style="width: 33%" />
+<col style="width: 33%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Enumeration</p></th>
+<th class="head"><p>Integer Value</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbFeatureDataInt</p></td>
+<td><p>1</p></td>
+<td><p>64-bit integer feature</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFeatureDataFloat</p></td>
+<td><p>2</p></td>
+<td><p>64-bit floating point feature</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFeatureDataEnum</p></td>
+<td><p>3</p></td>
+<td><p>Enumeration feature</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFeatureDataString</p></td>
+<td><p>4</p></td>
+<td><p>String feature</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFeatureDataBool</p></td>
+<td><p>5</p></td>
+<td><p>Boolean feature</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFeatureDataCommand</p></td>
+<td><p>6</p></td>
+<td><p>Command feature</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFeatureDataRaw</p></td>
+<td><p>7</p></td>
+<td><p>Raw (direct register access) feature</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFeatureDataNone</p></td>
+<td><p>8</p></td>
+<td><p>Feature with no data</p></td>
+</tr>
+</tbody>
+</table>
+<span id="index-16"></span><table class="docutils align-default" id="id11">
+<caption><span class="caption-text">Enum VmbFeatureFlagsType is represented as VmbUint32_t through VmbFeatureFlags_t</span><a class="headerlink" href="#id11" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 28%" />
+<col style="width: 15%" />
+<col style="width: 57%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Enumeration</p></th>
+<th class="head"><p>Integer Value</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbFeatureFlagsRead</p></td>
+<td><p>1</p></td>
+<td><p>Static info about read access. Current status depends <br>
+on access mode, check with VmbFeatureAccessQuery()</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFeatureFlagsWrite</p></td>
+<td><p>2</p></td>
+<td><p>Static info about write access. Current status depends <br>
+on access mode, check with VmbFeatureAccessQuery()</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFeatureFlagsVolatile</p></td>
+<td><p>8</p></td>
+<td><p>Value may change at any time</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFeatureFlagsModifyWrite</p></td>
+<td><p>16</p></td>
+<td><p>Value may change after a write</p></td>
+</tr>
+</tbody>
+</table>
+<span id="index-17"></span><table class="docutils align-default" id="id12">
+<caption><span class="caption-text">Enum VmbFeatureVisibilityType is represented as VmbUint32_t through VmbFeatureVisibility_t</span><a class="headerlink" href="#id12" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 33%" />
+<col style="width: 15%" />
+<col style="width: 52%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Enumeration</p></th>
+<th class="head"><p>Integer value</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbFeatureVisibilityUnknown</p></td>
+<td><p>0</p></td>
+<td><p>Feature visibility is not known</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFeatureVisibilityBeginner</p></td>
+<td><p>1</p></td>
+<td><p>Feature is visible in feature list (beginner)</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFeatureVisibilityExpert</p></td>
+<td><p>2</p></td>
+<td><p>Feature is visible in feature list (expert level)</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFeatureVisibilityGuru</p></td>
+<td><p>3</p></td>
+<td><p>Feature is visible in feature list (guru level)</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFeatureVisibilityInvisible</p></td>
+<td><p>4</p></td>
+<td><p>Feature is hidden</p></td>
+</tr>
+</tbody>
+</table>
+<div class="literal-block-wrapper docutils container" id="id13">
+<span id="index-18"></span><div class="code-block-caption"><span class="caption-text">Get features code snippet</span><a class="headerlink" href="#id13" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">VmbFeatureInfo_t</span><span class="w"> </span><span class="o">*</span><span class="n">pFeatures</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbUint32_t</span><span class="w"> </span><span class="n">nCount</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">hCamera</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Open the camera as shown in chapter &quot;Opening and closing a camera&quot;</span>
+
+<span class="c1">// Get the number of features</span>
+<span class="n">VmbError_t</span><span class="w"> </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbFeaturesList</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">nCount</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="o">*</span><span class="n">pFeatures</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">err</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">nCount</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="c1">// Allocate accordingly</span>
+<span class="w">   </span><span class="n">pFeatures</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">VmbFeatureInfo_t</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">malloc</span><span class="p">(</span><span class="w"> </span><span class="n">nCount</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="o">*</span><span class="n">pFeatures</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="w">   </span><span class="c1">// Get the features</span>
+<span class="w">   </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbFeaturesList</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="n">pFeatures</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="n">nCount</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">nCount</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">   </span><span class="k">sizeof</span><span class="w"> </span><span class="o">*</span><span class="n">pFeatures</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="w">   </span><span class="c1">// Print out their name and data type</span>
+<span class="w">   </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">&lt;</span><span class="n">nCount</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">   </span><span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Feature &#39;%s&#39; of type: %d</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeatures</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">name</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeatures</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="w"> </span><span class="n">featureDataType</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<div class="literal-block-wrapper docutils container" id="id14">
+<span id="index-19"></span><div class="code-block-caption"><span class="caption-text">Reading a camera feature code snippet</span><a class="headerlink" href="#id14" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">hCamera</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Open the camera as shown in chapter &quot;Opening a camera&quot;</span>
+<span class="n">VmbInt64_t</span><span class="w"> </span><span class="n">nWidth</span><span class="p">;</span><span class="w"></span>
+<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">VmbFeatureIntGet</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Width&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">nWidth</span><span class="w"> </span><span class="p">))</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Width: %ld</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">nWidth</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<div class="literal-block-wrapper docutils container" id="id15">
+<div class="code-block-caption"><span class="caption-text">Writing features and running command features</span><a class="headerlink" href="#id15" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">hCamera</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Open the camera as shown in chapter &quot;Opening a camera&quot;</span>
+<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">VmbFeatureEnumSet</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;AcquisitionMode&quot;</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                           </span><span class="s">&quot;Continuous&quot;</span><span class="w"> </span><span class="p">))</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbFeatureCommandRun</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;AcquisitionStart&quot;</span><span class="w"> </span><span class="p">))</span><span class="w"></span>
+<span class="w">   </span><span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Acquisition successfully started</span><span class="se">\n</span><span class="s">&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+</section>
+<section id="camera-features">
+<h4>Camera features<a class="headerlink" href="#camera-features" title="Permalink to this headline"></a></h4>
+<p id="index-20">To query all available features of a camera, use <code class="docutils literal notranslate"><span class="pre">VmbFeaturesList()</span></code>.
+This list does not change while the camera is opened.
+Information about enumeration features, such as string and integer representation,
+is held in struct <em>VmbFeatureEnumEntry_t</em>.</p>
+</section>
+<section id="struct-vmbfeatureenumentry-t">
+<span id="index-21"></span><h4>Struct VmbFeatureEnumEntry_t<a class="headerlink" href="#struct-vmbfeatureenumentry-t" title="Permalink to this headline"></a></h4>
+<table class="docutils align-default" id="id16">
+<caption><span class="caption-text">Struct VmbFeatureEnumEntry_t</span><a class="headerlink" href="#id16" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 50%" />
+<col style="width: 50%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Struct entry</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>const char* name</p></td>
+<td><p>Name used in the API</p></td>
+</tr>
+<tr class="row-odd"><td><p>const char* displayName</p></td>
+<td><p>Enumeration entry name to be used in GUIs</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFeatureVisibility_t visibility</p></td>
+<td><p>GUI visibility</p></td>
+</tr>
+<tr class="row-odd"><td><p>const char* tooltip</p></td>
+<td><p>Short description, e.g. for a tooltip</p></td>
+</tr>
+<tr class="row-even"><td><p>const char* description</p></td>
+<td><p>Longer description</p></td>
+</tr>
+<tr class="row-odd"><td><p>const char* sfncNamespace</p></td>
+<td><p>Namespace this feature resides in</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbInt64_t intValue</p></td>
+<td><p>Integer value of this enumeration entry</p></td>
+</tr>
+</tbody>
+</table>
+<p>The C API provides separate access to the feature lists of all GenTL modules.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Some features aren’t always available. For example, some features
+cannot be accessed while the camera is acquiring images. To query the
+current accessibility of a feature, call <code class="docutils literal notranslate"><span class="pre">VmbFeatureAccessQuery()</span></code>.</p>
+</div>
+<p>The following table shows basic features of all cameras. A feature has a name, a type, and access flags such
+as read-permitted and write-permitted.</p>
+<table class="docutils align-default" id="id17">
+<caption><span class="caption-text">Basic features on all cameras</span><a class="headerlink" href="#id17" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 21%" />
+<col style="width: 15%" />
+<col style="width: 15%" />
+<col style="width: 49%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Feature Type</p></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Access flags</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>AcquisitionMode</p></td>
+<td><p>Enumeration</p></td>
+<td><p>R/W</p></td>
+<td><p>Acquisition mode of the camera. Value <br>
+set: Continuous, SingleFrame, MultiFrame.</p></td>
+</tr>
+<tr class="row-odd"><td><p>AcquisitionStart</p></td>
+<td><p>Command</p></td>
+<td></td>
+<td><p>Start acquiring images.</p></td>
+</tr>
+<tr class="row-even"><td><p>AcquisitionStop</p></td>
+<td><p>Command</p></td>
+<td></td>
+<td><p>Stop acquiring images.</p></td>
+</tr>
+<tr class="row-odd"><td><p>PixelFormat</p></td>
+<td><p>Enumeration</p></td>
+<td><p>R/W</p></td>
+<td><p>The image format (Mono8 etc.)</p></td>
+</tr>
+<tr class="row-even"><td><p>Width</p></td>
+<td></td>
+<td><p>Uint32</p></td>
+<td><p>Image width, in pixels.</p></td>
+</tr>
+<tr class="row-odd"><td><p>Height</p></td>
+<td></td>
+<td><p>Uint32</p></td>
+<td><p>Image height, in pixels.</p></td>
+</tr>
+<tr class="row-even"><td><p>PayloadSize <br>
+(do not use)</p></td>
+<td></td>
+<td><p>Uint32</p></td>
+<td><p>Recommendation: Use VmbPayloadSizeGet() <br>
+instead of this feature <br></p></td>
+</tr>
+</tbody>
+</table>
+<p>To get notified whenever a feature value changes, use <code class="docutils literal notranslate"><span class="pre">VmbFeatureInvalidationRegister()</span></code> to
+register a callback that gets executed on the according event. For camera features, use the camera
+handle for registration. The function pointer to the callback function has to be of type
+<code class="docutils literal notranslate"><span class="pre">VmbInvalidationCallback*()</span></code>.</p>
+</section>
+</section>
+<section id="acquiring-images">
+<span id="index-22"></span><h3>Acquiring images<a class="headerlink" href="#acquiring-images" title="Permalink to this headline"></a></h3>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>The <a class="reference internal" href="sdkManual.html"><span class="doc">SDK Manual</span></a> describes synchronous and asynchronous image acquisition.</p>
+</div>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a quick start, see the <em>SynchronousGrab</em> example.</p>
+</div>
+<section id="image-capture-vs-image-acquisition">
+<h4>Image Capture vs. Image Acquisition<a class="headerlink" href="#image-capture-vs-image-acquisition" title="Permalink to this headline"></a></h4>
+<p>Image capture and image acquisition are two independent operations:
+The API captures images, the camera acquires images. To obtain an image
+from your camera, setup the API to capture images
+before starting the acquisition on the camera:</p>
+<figure class="align-default" id="id18">
+<a class="reference internal image-reference" href="_images/VmbC_asynchronous.png"><img alt="Typical asynchronous application using VmbC" src="_images/VmbC_asynchronous.png" style="width: 1000px;" /></a>
+<figcaption>
+<p><span class="caption-text">Typical asynchronous application using VmbC</span><a class="headerlink" href="#id18" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+<section id="image-capture">
+<h4>Image Capture<a class="headerlink" href="#image-capture" title="Permalink to this headline"></a></h4>
+<p>To enable image capture, frame buffers must be allocated and the API must
+be prepared for incoming frames.</p>
+<p>Optionally, you can activate the <em>alloc and announce</em> functionality for more efficient buffer allocation.
+To do this, use the optional parameter /x.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p><strong>CSI-2 cameras only</strong>:</p>
+<p>We recommend using <em>alloc and announce</em>. If you want to use the <em>announce mode</em> with the CSI TL,
+you must take care of the buffer alignment (which is not necessary when using
+<em>alloc and announce</em>). To do this:</p>
+<ol class="arabic simple">
+<li><p>Query the required buffer alignment using the <em>StreamBufferAlignment</em>
+feature of the Stream module.</p></li>
+<li><p>Use the returned value for buffer allocation, for example, with the function
+<code class="docutils literal notranslate"><span class="pre">aligned_alloc</span></code>.</p></li>
+<li><p>Announce buffers as usual, see the description below.</p></li>
+</ol>
+</div>
+<p>To capture images sent by the camera, follow these steps:</p>
+<ol class="arabic simple">
+<li><p>Open the camera as described in chapter Opening and closing a camera.</p></li>
+<li><p>Query the necessary buffer size through the convenience function <code class="docutils literal notranslate"><span class="pre">VmbPayloadSizeGet()</span></code>
+(to avoid errors, do not use the <code class="docutils literal notranslate"><span class="pre">PayloadSize()</span></code> function).</p></li>
+<li><p>Announce the frame buffers. If you announce NULL buffers, the TL announces buffers with a suitable value.</p></li>
+<li><p>Start the capture engine.</p></li>
+<li><p>Queue the frame you have just created with <code class="docutils literal notranslate"><span class="pre">VmbCaptureFrameQueue()</span></code>,
+so that the buffer can be filled when the acquisition has started.</p></li>
+</ol>
+<p>The API is now ready. Start and stop image acquisition on the camera as
+described in chapter Image Acquisition. How you
+proceed depends on the acquisition model you need:</p>
+<ul class="simple">
+<li><p>Synchronous: Use VmbCaptureFrameWait to receive an image frame while
+blocking your execution thread.</p></li>
+<li><p>Asynchronous: Register a callback that gets executed when capturing
+is complete. Use the camera handle for registration. The function pointer
+to the callback function has to be of type <code class="docutils literal notranslate"><span class="pre">VmbFrameCallback*`()</span></code>.
+Within the callback routine, queue the frame again after you have processed it.</p></li>
+</ul>
+<ol class="arabic simple" start="6">
+<li><p>Stop the capture engine and discard all pending callbacks with <code class="docutils literal notranslate"><span class="pre">VmbCaptureEnd()</span></code>.</p></li>
+<li><p>Call <code class="docutils literal notranslate"><span class="pre">VmbCaptureQueueFlush()</span></code> to cancel all frames on the queue.</p></li>
+<li><p>Revoke the frames with <code class="docutils literal notranslate"><span class="pre">VmbFrameRevokeAll()</span></code> to clear the buffers.</p></li>
+</ol>
+<p>To assure correct continuous image capture, queue at least two or three frames.
+The appropriate number of frames to be queued in your application depends on
+the frames per second the camera delivers and on the speed with which you are
+able to re-queue frames (also depending on the load of your operating system).
+The image frames are filled in the same order in which they were queued.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Always check that <em>VmbFrame_t.receiveStatus</em> equals
+<em>VmbFrameStatusComplete</em> when a frame is returned to ensure
+the data is valid.</p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Functions that must not be called within the Frame callback routine:</p>
+<ul class="simple">
+<li><p>VmbStartup</p></li>
+<li><p>VmbShutdown</p></li>
+<li><p>VmbCameraOpen</p></li>
+<li><p>VmbCameraClose</p></li>
+<li><p>VmbFrameAnnounce</p></li>
+<li><p>VmbFrameRevoke</p></li>
+<li><p>VmbFrameRevokeAll</p></li>
+<li><p>VmbCaptureStart</p></li>
+<li><p>VmbCaptureEnd</p></li>
+</ul>
+</div>
+</section>
+<section id="image-acquisition">
+<h4>Image Acquisition<a class="headerlink" href="#image-acquisition" title="Permalink to this headline"></a></h4>
+<p>As soon as the API is prepared (see <a class="reference internal" href="#image-capture"><span class="std std-ref">Image Capture</span></a>, you can start
+image acquisition on your camera:</p>
+<ol class="arabic simple">
+<li><p>Set the feature <em>AcquisitionMode</em> (for example, Continuous).</p></li>
+<li><p>Run the command <strong class="command">AcquisitionStart</strong>.</p></li>
+<li><p>To stop image acquisition, run command <strong class="command">AcquisitionStop</strong>.</p></li>
+</ol>
+<div class="literal-block-wrapper docutils container" id="id19">
+<span id="index-23"></span><div class="code-block-caption"><span class="caption-text">Image streaming code snippet</span><a class="headerlink" href="#id19" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define FRAME_COUNT 3 </span><span class="c1">// We choose to use 3 frames</span>
+<span class="n">VmbError_t</span><span class="w"> </span><span class="n">err</span><span class="p">;</span><span class="w">                  </span><span class="c1">// Functions return an error code to</span>
+<span class="w">                                 </span><span class="c1">// check for VmbErrorSuccess</span>
+<span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">hCamera</span><span class="w">              </span><span class="c1">// A handle to our opened camera</span>
+<span class="n">VmbFrame_t</span><span class="w"> </span><span class="n">frames</span><span class="p">[</span><span class="n">FRAME_COUNT</span><span class="w"> </span><span class="p">];</span><span class="w"> </span><span class="c1">// A list of frames for streaming</span>
+<span class="n">VmbUInt64_t</span><span class="w"> </span><span class="n">nPLS</span><span class="p">;</span><span class="w">                </span><span class="c1">// The payload size of one frame</span>
+
+<span class="c1">// The callback that gets executed on every filled frame</span>
+<span class="c1">// For smooth image acquisition, perform the callback as fast as possible</span>
+<span class="kt">void</span><span class="w"> </span><span class="n">VMB_CALL</span><span class="w"> </span><span class="nf">FrameDoneCallback</span><span class="p">(</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">hCamera</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">hStream</span><span class="p">,</span><span class="w"> </span><span class="n">VmbFrame_t</span><span class="w"> </span><span class="o">*</span><span class="n">pFrame</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbFrameStatusComplete</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">pFrame</span><span class="w"> </span><span class="o">-&gt;</span><span class="n">receiveStatus</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">   </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Frame successfully received</span><span class="se">\n</span><span class="s">&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">}</span><span class="w"></span>
+<span class="w">   </span><span class="k">else</span><span class="w"></span>
+<span class="w">   </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Error receiving frame</span><span class="se">\n</span><span class="s">&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">}</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbCaptureFrameQueue</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="n">pFrame</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="n">FrameDoneCallback</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+
+<span class="c1">// Get all known cameras, see chapter &quot;List available cameras&quot;</span>
+<span class="c1">// and open the camera as shown in chapter &quot;Opening a camera&quot;</span>
+
+<span class="c1">// Get the required size for one image</span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbPayloadSizeGet</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">nPLS</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">&lt;</span><span class="n">FRAME_COUNT</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="c1">// Allocate accordingly</span>
+<span class="w">   </span><span class="n">frames</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="w"> </span><span class="n">buffer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">malloc</span><span class="p">(</span><span class="w"> </span><span class="n">nPLS</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="p">(</span><span class="n">B</span><span class="p">)</span><span class="w"></span>
+<span class="w">   </span><span class="n">frames</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="w"> </span><span class="n">bufferSize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">nPLS</span><span class="p">;</span><span class="w"> </span><span class="p">(</span><span class="n">B</span><span class="p">)</span><span class="w"></span>
+<span class="w">   </span><span class="c1">// Anounce the frame</span>
+<span class="w">   </span><span class="n">VmbFrameAnnounce</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="n">frames</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">VmbFrame_t</span><span class="p">)</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+
+<span class="c1">// Start capture engine on the host</span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbCaptureStart</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Queue frames and register callback</span>
+<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">&lt;</span><span class="n">FRAME_COUNT</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbCaptureFrameQueue</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="n">frames</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"></span>
+<span class="w">                         </span><span class="n">FrameDoneCallback</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+
+<span class="c1">// Start acquisition on the camera</span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbFeatureCommandRun</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;AcquisitionStart&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Program runtime ...</span>
+
+<span class="c1">// When finished , tear down the acquisition chain , close the camera and Vimba X.</span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbFeatureCommandRun</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;AcquisitionStop&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbCaptureEnd</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbCaptureQueueFlush</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbFrameRevokeAll</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbCameraClose</span><span class="p">(</span><span class="w"> </span><span class="n">hCamera</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbShutdown</span><span class="w"> </span><span class="p">();</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+</section>
+<section id="struct-vmbframe-t">
+<span id="index-24"></span><h4>Struct VmbFrame_t<a class="headerlink" href="#struct-vmbframe-t" title="Permalink to this headline"></a></h4>
+<p>The struct <em>VmbFrame_t</em> represents not only the actual image data, but also
+additional information. You can find the referenced data types in the tables
+below.</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>The field “void* buffer” of the struct can be NULL when the struct ist passed to
+<code class="docutils literal notranslate"><span class="pre">VmbFrameAnnounce</span></code>. In this case, the “alloc and announce” function of the TL
+allocates buffer memory.</p>
+</div>
+<table class="docutils align-default" id="id20">
+<caption><span class="caption-text">VmbFrame_t</span><a class="headerlink" href="#id20" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 39%" />
+<col style="width: 61%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Struct entry</p></th>
+<th class="head"><p>Type</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>void* buffer</p></td>
+<td><p>Pointer to the actual image data <br>
+including chunk data. Can be NULL.</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbUint32_t bufferSize</p></td>
+<td><p>Size of the data buffer</p></td>
+</tr>
+<tr class="row-even"><td><p>void* context[4]</p></td>
+<td><p>4 void pointers that can be employed by the <br>
+user (e.g., for storing handles)</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFrameStatus_t receiveStatus</p></td>
+<td><p>Resulting status of the receive operation</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFrameFlags_t receiveFlags</p></td>
+<td><p>Flags indicating which additional frame <br>
+information is available</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbUint32_t chunkSize</p></td>
+<td><p>Size of the chunk data inside the data buffer</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbPixelFormat_t pixelFormat</p></td>
+<td><p>Pixel format of the image</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbUint32_t width</p></td>
+<td><p>Width of an image</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbUint32_t height</p></td>
+<td><p>Height of an image</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbUint32_t offsetX</p></td>
+<td><p>Horizontal offset of an image</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbUint32_t offsetY</p></td>
+<td><p>Vertical offset of an image</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbUint64_t frameID</p></td>
+<td><p>Unique ID of this frame in this stream</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbUint64_t timestamp</p></td>
+<td><p>Timestamp set by the camera</p></td>
+</tr>
+</tbody>
+</table>
+<table class="docutils align-default" id="id21">
+<caption><span class="caption-text">Enum <em>VmbFrameStatusType</em> is represented as VmbInt32_t through VmbFrameStatus_t</span><a class="headerlink" href="#id21" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 33%" />
+<col style="width: 20%" />
+<col style="width: 48%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Enumeration</p></th>
+<th class="head"><p>Integer Value</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbFrameStatusComplete</p></td>
+<td><p>0</p></td>
+<td><p>Frame was completed without errors</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFrameStatusIncomplete</p></td>
+<td><p>-1</p></td>
+<td><p>Frame could not be filled to the end</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFrameStatusInvalid</p></td>
+<td><p>-3</p></td>
+<td><p>Frame buffer was invalid</p></td>
+</tr>
+</tbody>
+</table>
+<table class="docutils align-default" id="id22">
+<caption><span class="caption-text">Enum VmbFrameFlagsType is represented as VmbUint32_t through VmbFrameFlags_t</span><a class="headerlink" href="#id22" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 31%" />
+<col style="width: 20%" />
+<col style="width: 49%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Enumeration</p></th>
+<th class="head"><p>Integer Value</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbFrameFlagsNone</p></td>
+<td><p>0</p></td>
+<td><p>No additional information is provided</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFrameFlagsDimension</p></td>
+<td><p>1</p></td>
+<td><p>Frame’s dimension is provided</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFrameFlagsOffset</p></td>
+<td><p>2</p></td>
+<td><p>Frame’s offset is provided (ROI)</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFrameFlagsFrameID</p></td>
+<td><p>4</p></td>
+<td><p>Frame’s ID is provided</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbFrameFlagsTimestamp</p></td>
+<td><p>8</p></td>
+<td><p>Frame’s timestamp is provided</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+</section>
+<section id="transforming-images">
+<h3>Transforming images<a class="headerlink" href="#transforming-images" title="Permalink to this headline"></a></h3>
+<p>To transform images received via the API into
+common image formats, use the Image Transform Library.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a quick start, see the <em>AsynchrounousGrab</em> example,
+which contains an image transformation.</p>
+</div>
+</section>
+<section id="using-events">
+<span id="index-25"></span><h3>Using Events<a class="headerlink" href="#using-events" title="Permalink to this headline"></a></h3>
+<p>Events serve many purposes and can have several origins such as generic
+camera events or just feature changes.
+All of these cases are handled in the C API uniformly with the same
+mechanism: You simply register a notification callback with
+<code class="docutils literal notranslate"><span class="pre">VmbFeatureInvalidationRegister()</span></code> for the feature of your
+choice which gets called when there is a change to that feature.</p>
+<p>Three examples are listed in this chapter:</p>
+<ul class="simple">
+<li><p>Camera list notifications</p></li>
+<li><p>Camera event features</p></li>
+<li><p>Tracking invalidations of features</p></li>
+</ul>
+<div class="literal-block-wrapper docutils container" id="id23">
+<span id="index-26"></span><div class="code-block-caption"><span class="caption-text">Camera list notifications code snippet</span><a class="headerlink" href="#id23" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="c1">// 1. define callback function</span>
+<span class="kt">void</span><span class="w"> </span><span class="n">VMB_CALL</span><span class="w"> </span><span class="nf">CameraListCB</span><span class="p">(</span><span class="w"> </span><span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">handle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">context</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="kt">char</span><span class="w"> </span><span class="n">cameraName</span><span class="w"> </span><span class="p">[</span><span class="mi">255</span><span class="p">];</span><span class="w"></span>
+<span class="w">   </span><span class="kt">char</span><span class="w"> </span><span class="n">callbackReason</span><span class="w"> </span><span class="p">[</span><span class="mi">255</span><span class="p">];</span><span class="w"></span>
+
+<span class="w">   </span><span class="c1">// Get the name of the camera due to which the callback was triggered</span>
+<span class="w">   </span><span class="n">VmbFeatureStringGet</span><span class="p">(</span><span class="w"> </span><span class="n">handle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;DiscoveryCameraIdent&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">cameraName</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="w">   </span><span class="c1">// Get the reason why the callback was triggered. Possible values:</span>
+<span class="w">   </span><span class="c1">// Missing (0), a known camera disappeared from the bus</span>
+<span class="w">   </span><span class="c1">// Detected (1), a new camera was discovered</span>
+<span class="w">   </span><span class="c1">// Reachable (2), a known camera can be accessed</span>
+<span class="w">   </span><span class="c1">// Unreachable (3), a known camera cannot be accessed anymore</span>
+<span class="w">   </span><span class="n">VmbFeatureEnumGet</span><span class="p">(</span><span class="w"> </span><span class="n">handle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;EventCameraDiscovery&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">callbackReason</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Event was fired by camera %s because %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">cameraName</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">   </span><span class="n">callbackReason</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+
+<span class="c1">// 2. register the callback for that event</span>
+<span class="n">VmbFeatureInvalidationRegister</span><span class="p">(</span><span class="w"> </span><span class="n">gVmbHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;EventCameraDiscovery&quot;</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                </span><span class="n">CameraListCB</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<p>Getting notified about feature invalidations</p>
+<div class="literal-block-wrapper docutils container" id="id24">
+<span id="index-27"></span><div class="code-block-caption"><span class="caption-text">Notifications about feature invalidations code snippet</span><a class="headerlink" href="#id24" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="c1">// 1. define callback function</span>
+<span class="kt">void</span><span class="w"> </span><span class="n">VMB_CALL</span><span class="w"> </span><span class="nf">WidthChangeCB</span><span class="p">(</span><span class="w"> </span><span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">handle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">context</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+
+<span class="w">   </span><span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Feature changed: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+
+<span class="c1">// 2. register callback for changes to Width</span>
+<span class="n">VmbFeatureInvalidationRegister</span><span class="p">(</span><span class="w"> </span><span class="n">cameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Width&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">WidthChangeCB</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// as an example , binning is changed , so the callback will be run</span>
+<span class="n">VmbFeatureIntegerSet</span><span class="p">(</span><span class="w"> </span><span class="n">cameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Binning&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<p>Getting notified about camera events</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Please note that Events are not implemented in a GenICam-compliant
+way in Allied Vision GigE cameras.</p>
+</div>
+<div class="literal-block-wrapper docutils container" id="id25">
+<span id="index-28"></span><div class="code-block-caption"><span class="caption-text">Getting notified about camera events code snippet</span><a class="headerlink" href="#id25" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="c1">// 1. define callback function</span>
+<span class="kt">void</span><span class="w"> </span><span class="n">VMB_CALL</span><span class="w"> </span><span class="nf">EventCB</span><span class="p">(</span><span class="w"> </span><span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">handle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">context</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Event was fired: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+<span class="c1">// 2. select &quot;AcquisitionStart&quot; event</span>
+<span class="n">VmbFeatureEnumSet</span><span class="p">(</span><span class="w"> </span><span class="n">cameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;EventSelector&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;AcquisitionStart&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// 3. switch on the event notification</span>
+<span class="n">VmbFeatureEnumSet</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">cameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;EventNotification&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;On&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// 4. register the callback for that event</span>
+<span class="n">VmbFeatureInvalidationRegister</span><span class="p">(</span><span class="w"> </span><span class="n">cameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;EventAcquisitionStart&quot;</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                </span><span class="n">EventCB</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+</section>
+<section id="chunk">
+<span id="index-29"></span><h3>Chunk<a class="headerlink" href="#chunk" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>To use the <em>chunk</em> feature, make sure your camera supports it.
+To activate the chunk camera feature, see the user documentation of your camera.</p>
+</div>
+<p>Chunk data are image metadata such as the exposure time that are available in the Frame
+that contains the chunk data.
+To access chunk data, use <code class="docutils literal notranslate"><span class="pre">VmbChunkAccessCallback</span></code>.</p>
+<p>Required parameters:</p>
+<ul class="simple">
+<li><p>The frame handle that contains the chunk data (VmbFrame_t)</p></li>
+<li><p>Callback to access the chunk data</p></li>
+<li><p>Pointer for passing custom data in and out the function</p></li>
+</ul>
+<div class="literal-block-wrapper docutils container" id="id26">
+<span id="index-30"></span><div class="code-block-caption"><span class="caption-text">Chunk code snippet</span><a class="headerlink" href="#id26" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="c1">// Data structure for passing Chunk data values to and from the Chunk Data Access Callback function</span>
+<span class="c1">// This should be adjusted for the Chunk features that are available for a specific camera</span>
+<span class="c1">// In this example, the camera supports the Chunk features:</span>
+<span class="c1">// ChunkWidth, ChunkHeight, ChunkOffsetX, ChunkOffsetY</span>
+<span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">  </span><span class="n">VmbInt64_t</span><span class="w"> </span><span class="n">m_width</span><span class="p">;</span><span class="w"></span>
+<span class="w">  </span><span class="n">VmbInt64_t</span><span class="w"> </span><span class="n">m_height</span><span class="p">;</span><span class="w"></span>
+<span class="w">  </span><span class="n">VmbInt64_t</span><span class="w"> </span><span class="n">m_offsetX</span><span class="p">;</span><span class="w"></span>
+<span class="w">  </span><span class="n">VmbInt64_t</span><span class="w"> </span><span class="n">m_offsetY</span><span class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"> </span><span class="n">ChunkData</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// We may use custom error codes as return values for the Chunk Data Access Callback function</span>
+<span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">VmbError_t</span><span class="w"> </span><span class="n">ChunkOffsetAccessError</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbErrorCustom</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span>
+<span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">VmbError_t</span><span class="w"> </span><span class="n">ChunkSizeAccessError</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbErrorCustom</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Chunk features are only accessible in the Chunk Data Access Callback function</span>
+<span class="n">VmbError_t</span><span class="w"> </span><span class="n">VMB_CALL</span><span class="w"> </span><span class="n">MyChunkDataAccessCallback</span><span class="p">(</span><span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">featureAccessHandle</span><span class="p">,</span><span class="w"> </span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">userContext</span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">  </span><span class="n">ChunkData</span><span class="w"> </span><span class="n">chunkData</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">*</span><span class="p">((</span><span class="n">ChunkData</span><span class="o">*</span><span class="p">)(</span><span class="n">userContext</span><span class="p">));</span><span class="w"></span>
+
+<span class="w">  </span><span class="c1">// With the featureAccessHandle, Chunk features can be accessed like any other camera feature</span>
+<span class="w">  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="p">(</span><span class="n">VmbFeatureIntGet</span><span class="p">(</span><span class="n">featureAccessHandle</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ChunkWidth&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">chunkData</span><span class="p">.</span><span class="n">m_width</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="p">)</span><span class="w"></span>
+<span class="w">      </span><span class="o">||</span><span class="w"> </span><span class="p">(</span><span class="n">VmbFeatureIntGet</span><span class="p">(</span><span class="n">featureAccessHandle</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ChunkHeight&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">chunkData</span><span class="p">.</span><span class="n">m_height</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">  </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="k">return</span><span class="w"> </span><span class="n">ChunkSizeAccessError</span><span class="p">;</span><span class="w"></span>
+<span class="w">  </span><span class="p">}</span><span class="w"></span>
+
+<span class="w">  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="p">(</span><span class="n">VmbFeatureIntGet</span><span class="p">(</span><span class="n">featureAccessHandle</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ChunkOffsetX&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">chunkData</span><span class="p">.</span><span class="n">m_offsetX</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="p">)</span><span class="w"></span>
+<span class="w">      </span><span class="o">||</span><span class="w"> </span><span class="p">(</span><span class="n">VmbFeatureIntGet</span><span class="p">(</span><span class="n">featureAccessHandle</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ChunkOffsetY&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">chunkData</span><span class="p">.</span><span class="n">m_offsetY</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">  </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="k">return</span><span class="w"> </span><span class="n">ChunkOffsetAccessError</span><span class="p">;</span><span class="w"></span>
+<span class="w">  </span><span class="p">}</span><span class="w"></span>
+
+<span class="w">  </span><span class="k">return</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+
+<span class="kt">void</span><span class="w"> </span><span class="n">VMB_CALL</span><span class="w"> </span><span class="n">MyFrameCallback</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">cameraHandle</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">VmbHandle_t</span><span class="w"> </span><span class="n">streamHandle</span><span class="p">,</span><span class="w"> </span><span class="n">VmbFrame_t</span><span class="o">*</span><span class="w"> </span><span class="n">frame</span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">frame</span><span class="o">-&gt;</span><span class="n">chunkDataPresent</span><span class="p">)</span><span class="w"></span>
+<span class="w">  </span><span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="n">ChunkData</span><span class="w"> </span><span class="n">chunkData</span><span class="p">;</span><span class="w"></span>
+
+<span class="w">    </span><span class="c1">// The function VmbChunkDataAccess will prepare the Chunk data access for the current frame</span>
+<span class="w">    </span><span class="c1">// The Chunk features can be accessed in the passed Chunk Data Access Callback function</span>
+<span class="w">    </span><span class="c1">// Chunk feature values are passed in the ChunkData struct</span>
+<span class="w">    </span><span class="n">VmbError_t</span><span class="w"> </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbChunkDataAccess</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span><span class="w"> </span><span class="n">MyChunkDataAccessCallback</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">chunkData</span><span class="p">);</span><span class="w"></span>
+
+<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">err</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="c1">// Print the Chunk features for the current frame</span>
+<span class="w">      </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Frame received: FrameId=%llu; Width=%lld; Height=%lld; OffsetX=%lld; OffsetY=%lld</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"></span>
+<span class="w">        </span><span class="n">frame</span><span class="o">-&gt;</span><span class="n">frameID</span><span class="p">,</span><span class="w"> </span><span class="n">chunkData</span><span class="p">.</span><span class="n">m_width</span><span class="p">,</span><span class="w"> </span><span class="n">chunkData</span><span class="p">.</span><span class="n">m_height</span><span class="p">,</span><span class="w"> </span><span class="n">chunkData</span><span class="p">.</span><span class="n">m_offsetX</span><span class="p">,</span><span class="w"> </span><span class="n">chunkData</span><span class="p">.</span><span class="n">m_offsetY</span><span class="p">);</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="w">    </span><span class="k">else</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="c1">// Error handling</span>
+<span class="w">      </span><span class="c1">// VmbChunkDataAccess returns the same error value as the Chunk Data Access Callback function,</span>
+<span class="w">      </span><span class="c1">// e.g. our custom error codes ChunkSizeAccessError and ChunkOffsetAccessError</span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="w">  </span><span class="p">}</span><span class="w"></span>
+
+<span class="w">  </span><span class="n">VmbCaptureFrameQueue</span><span class="p">(</span><span class="n">cameraHandle</span><span class="p">,</span><span class="w"> </span><span class="n">frame</span><span class="p">,</span><span class="w"> </span><span class="n">MyFrameCallback</span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<span class="target" id="index-31"></span></section>
+<section id="saving-and-loading-settings">
+<span id="index-32"></span><h3>Saving and loading settings<a class="headerlink" href="#saving-and-loading-settings" title="Permalink to this headline"></a></h3>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a quick start, see the <em>LoadSaveSettings</em> example.</p>
+</div>
+<p>Additionally to the user sets stored inside the cameras, you can save the
+feature values of the GenTL modules as an XML file to your host PC. To do this, use the functions
+<code class="docutils literal notranslate"><span class="pre">VmbSettingsLoad</span></code> and <code class="docutils literal notranslate"><span class="pre">VmbSettingsSave</span></code>.</p>
+<p>To control which features are saved, use the (optional) flags and struct listed below.
+You can manually edit the XML file if you want only certain features
+to be restored.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Saving and loading all features including look-up tables may take several
+minutes.</p>
+</div>
+<p>The API supports saving and loading settings for every GenTL module.
+To specify which settings are saved and loaded when passing a camera handle,
+the API contains a set of (optional) flags.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>A settings XML file can only contain features for one instance of a module.</p>
+</div>
+<p>The struct <em>VmbFeaturePersistSettings_t</em> contains the optional member
+<em>cameraPersistFlags</em>. It is only evaluated if a cameraHandle is passed to the
+load/save functions and ignored for the other module handles.</p>
+<span id="index-33"></span><table class="docutils align-default" id="id27">
+<caption><span class="caption-text">Struct VmbFeaturePersistSettings_t</span><a class="headerlink" href="#id27" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 36%" />
+<col style="width: 64%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Struct Entry</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbFeaturePersist_t persistType</p></td>
+<td><p>Controls which features are saved. Valid values: <br>
+<em>VmbFeaturePersistAll</em> (all features) <br>
+<em>VmbFeaturePersistStreamable</em> (streamable features <br>
+only, excluding look-up tables <br>
+<em>VmbFeaturePersistNoLUT</em> (default, all features <br>
+except look-up tables</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbCameraPersistFlags_t</p></td>
+<td><p>Optional flags, see above</p></td>
+</tr>
+<tr class="row-even"><td><p>Vmbuint32_t maxIterations</p></td>
+<td><p>Number of iterations. LoadCameraSettings iterates <br>
+through all given features of the XML file and tries <br>
+to set each value to the camera. Because of complex <br>
+feature dependencies, writing a feature value may <br>
+impact another feature that has already been set by <br>
+LoadCameraSettings. To ensure all values are written <br>
+as desired, the feature list can be looped several <br>
+times, given by this parameter. <br>
+Default value: 5, valid values: 1…10 <br></p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbUint32_t</p></td>
+<td><p>Logging level</p></td>
+</tr>
+</tbody>
+</table>
+<span id="index-34"></span><table class="docutils align-default" id="id28">
+<caption><span class="caption-text">Enum VmbCameraPersistFlagsType is represented as VmbUint32_t through VmbCameraPersistFlags_t</span><a class="headerlink" href="#id28" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 86%" />
+<col style="width: 14%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>VmbCameraPersistFlagsNone</p></th>
+<th class="head"><p>0x00</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbCameraPersistFlagsTransportLayer</p></td>
+<td><p>0x01</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbCameraPersistFlagsInterface</p></td>
+<td><p>0x02</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbCameraPersistFlagsRemoteDevice</p></td>
+<td><p>0x04</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbCameraPersistFlagsLocalDevice</p></td>
+<td><p>0x08</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbCameraPersistFlagsStreams</p></td>
+<td><p>0x10</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbCameraPersistFlagsAll</p></td>
+<td><p>0ff</p></td>
+</tr>
+</tbody>
+</table>
+<p>If the flags are not set (=VmbCameraPersistFlagsNone), the default behavior is
+to only save/load the remote device features. The same behavior is applied if
+no <em>VmbFeaturePersistSettings_t</em> parameter is passed to the save/load functions.</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>If you pass a camera handle and activate all flags, the features of all
+GenTL modules including the transport layer and the interface are saved.</p>
+</div>
+</section>
+<section id="triggering">
+<h3>Triggering<a class="headerlink" href="#triggering" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Before triggering, startup the API and open the camera(s).</p>
+</div>
+<section id="external-trigger">
+<h4>External trigger<a class="headerlink" href="#external-trigger" title="Permalink to this headline"></a></h4>
+<p id="index-35">The following code snippet shows how to trigger your camera with an
+external device.</p>
+<div class="literal-block-wrapper docutils container" id="id29">
+<div class="code-block-caption"><span class="caption-text">External trigger code snippet</span><a class="headerlink" href="#id29" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="c1">// Startup Vimba X, get cameras and open cameras as usual</span>
+<span class="c1">// Trigger cameras according to their interface</span>
+<span class="c1">// Configure trigger input line and selector , switch trigger on</span>
+<span class="k">switch</span><span class="p">(</span><span class="w"> </span><span class="n">pInterfacetype</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="k">case</span><span class="w"> </span><span class="nl">VmbInterfaceEthernet</span><span class="p">:</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbFeatureEnumSet</span><span class="p">(</span><span class="w"> </span><span class="n">pCameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;TriggerSelector&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;FrameStart&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbFeatureEnumSet</span><span class="p">(</span><span class="w"> </span><span class="n">pCameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;TriggerSource&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Line1&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbFeatureEnumSet</span><span class="p">(</span><span class="w"> </span><span class="n">pCameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;TriggerMode&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;On&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="k">break</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// USB: VmbInterfaceUsb</span>
+<span class="c1">// CSI-2: VmbInterfaceCSI2</span>
+
+<span class="k">case</span><span class="w"> </span><span class="nl">VmbInterfaceUsb</span><span class="p">:</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbFeatureEnumSet</span><span class="p">(</span><span class="w"> </span><span class="n">pCameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;LineSelector&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Line0&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbFeatureEnumSet</span><span class="p">(</span><span class="w"> </span><span class="n">pCameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;LineMode&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Input&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbFeatureEnumSet</span><span class="p">(</span><span class="w"> </span><span class="n">pCameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;TriggerSelector&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;FrameStart&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbFeatureEnumSet</span><span class="p">(</span><span class="w"> </span><span class="n">pCameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;TriggerSource&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Line0&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbFeatureEnumSet</span><span class="p">(</span><span class="w"> </span><span class="n">pCameraHandle</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="s">&quot;TriggerMode&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;On&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="k">break</span><span class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<span class="target" id="index-36"></span></section>
+<section id="trigger-over-ethernet-action-commands">
+<span id="index-37"></span><h4>Trigger over Ethernet – Action Commands<a class="headerlink" href="#trigger-over-ethernet-action-commands" title="Permalink to this headline"></a></h4>
+<p>Triggering via the <code class="docutils literal notranslate"><span class="pre">AcquisitionStart</span></code> command is supported by all cameras.
+However, it is less precise than triggering with an external device connected
+to the camera’s I/O port. Some GigE cameras additionally support Action Commands.
+With Action Commands, you can broadcast a trigger signal simultaneously to
+multiple GigE cameras via GigE cable.
+Action Commands must be set first to the camera(s) and then to the TL,
+which sends the Action Commands to the camera(s). As trigger source,
+select Action0 or Action1.</p>
+<p><strong>ActionControl parameters</strong></p>
+<p>The following ActionControl parameters must be configured on the camera(s)
+and on the TL.</p>
+<ul class="simple">
+<li><p><em>ActionDeviceKey</em> must be equal on the camera and on the host PC. Before a
+camera accepts an Action Command, it verifies if the received key is
+identical with its configured key. Note that <em>ActionDeviceKey</em> must be set
+each time the camera is opened.
+Range (camera and host PC): 0 to 4294967295</p></li>
+<li><p><em>ActionGroupKey</em> means that each camera can be assigned to exactly one
+group for Action0 and a different group for Action1. All grouped cameras
+perform an action at the same time. If this key is identical on the sender
+and the receiving camera, the camera performs the assigned action.
+Range (camera and host PC): 0 to 4294967295</p></li>
+<li><p><em>ActionGroupMask</em> serves as filter that specifies which cameras within a
+group react on an Action Command. It can be used to create sub-groups.
+Range (camera): 0 to 4294967295
+Range (host PC): 1 to 4294967295</p></li>
+</ul>
+<p>Executing the feature <em>ActionCommands</em> sends the ActionControl
+parameters to the cameras and triggers the assigned action, for example,
+image acquisition. Before an Action Command is executed, each camera validates
+the received ActionControl parameter values against its configured values.
+If they are not equal, the camera ignores the command.</p>
+<div class="literal-block-wrapper docutils container" id="id30">
+<div class="code-block-caption"><span class="caption-text">Action Commands code snippet</span><a class="headerlink" href="#id30" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="c1">// Additionally to this code snippet:</span>
+<span class="c1">// Configure the trigger settings and add image streaming</span>
+
+<span class="n">VmbUint32_t</span><span class="w"> </span><span class="n">count</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbCameraInfo_t</span><span class="o">*</span><span class="w"> </span><span class="n">cameras</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbHandle_t</span><span class="o">*</span><span class="w"> </span><span class="n">handles</span><span class="p">;</span><span class="w"></span>
+
+<span class="kt">int</span><span class="w"> </span><span class="n">deviceKey</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">11</span><span class="p">,</span><span class="w"> </span><span class="n">groupKey</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">22</span><span class="p">,</span><span class="w"> </span><span class="n">groupMask</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">33</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Start Vimba and discover GigE cameras</span>
+<span class="n">VmbStartup</span><span class="p">(</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Get cameras</span>
+<span class="n">VmbCamerasList</span><span class="p">(</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">count</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="o">*</span><span class="n">cameras</span><span class="p">)</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">cameras</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">VmbCameraInfo_t</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">malloc</span><span class="p">(</span><span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="o">*</span><span class="n">cameras</span><span class="p">)</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">VmbCamerasList</span><span class="p">(</span><span class="w"> </span><span class="n">cameras</span><span class="p">,</span><span class="w"> </span><span class="n">count</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">count</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="o">*</span><span class="n">cameras</span><span class="p">)</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Allocate space for handles</span>
+<span class="n">handles</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">VmbHandle_t</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">malloc</span><span class="p">(</span><span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">VmbHandle_t</span><span class="p">)</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="k">for</span><span class="p">(</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">&lt;</span><span class="n">count</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">cameraId</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">cameraIdString</span><span class="p">;</span><span class="w"></span>
+
+<span class="w">    </span><span class="c1">// Open camera</span>
+<span class="w">    </span><span class="n">VmbCameraOpen</span><span class="p">(</span><span class="w"> </span><span class="n">cameraId</span><span class="p">,</span><span class="w"> </span><span class="n">VmbAccessModeFull</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">handles</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="w">    </span><span class="c1">// Set device key, group key and group mask</span>
+<span class="w">    </span><span class="c1">// Configure trigger settings (see programming example)</span>
+<span class="w">    </span><span class="n">VmbFeatureIntSet</span><span class="p">(</span><span class="w"> </span><span class="n">handles</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">&quot;ActionDeviceKey&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">deviceKey</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">    </span><span class="n">VmbFeatureIntSet</span><span class="p">(</span><span class="w"> </span><span class="n">handles</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">&quot;ActionGroupKey&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">groupKey</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">    </span><span class="n">VmbFeatureIntSet</span><span class="p">(</span><span class="w"> </span><span class="n">handles</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">&quot;ActionGroupMask&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">groupMask</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+
+<span class="c1">// Set Action Command to API</span>
+<span class="c1">// Allocate buffers and enable streaming (see programming example)</span>
+<span class="n">VmbFeatureIntSet</span><span class="p">(</span><span class="w"> </span><span class="n">gVmbHandle</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ActionDeviceKey&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">deviceKey</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">VmbFeatureIntSet</span><span class="p">(</span><span class="w"> </span><span class="n">gVmbHandle</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ActionGroupKey&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">groupKey</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">VmbFeatureIntSet</span><span class="p">(</span><span class="w"> </span><span class="n">gVmbHandle</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ActionGroupMask&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">groupMask</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Send Action Command</span>
+<span class="n">VmbFeatureCommandRun</span><span class="p">(</span><span class="w"> </span><span class="n">gVmbHandle</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ActionCommand&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// If no further Actions will be applied: close cameras, shutdown API, and</span>
+<span class="c1">// free allocated space as usual</span>
+</pre></div>
+</div>
+</div>
+</section>
+</section>
+<section id="listing-interfaces">
+<h3>Listing interfaces<a class="headerlink" href="#listing-interfaces" title="Permalink to this headline"></a></h3>
+<p>You can list all found interfaces such as frame grabbers or NICs.
+<code class="docutils literal notranslate"><span class="pre">VmbInterfacesList()</span></code> enumerates all interfaces recognized
+by the underlying transport layers.</p>
+<div class="literal-block-wrapper docutils container" id="id31">
+<div class="code-block-caption"><span class="caption-text">List interfaces code snippet</span><a class="headerlink" href="#id31" title="Permalink to this code"></a></div>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">VmbUint32_t</span><span class="w"> </span><span class="n">nCount</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbInterfaceInfo_t</span><span class="w"> </span><span class="o">*</span><span class="n">pInterfaces</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Get the number of connected interfaces</span>
+<span class="n">VmbInterfacesList</span><span class="p">(</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">nCount</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="o">*</span><span class="n">pInterfaces</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Allocate accordingly</span>
+<span class="n">pInterfaces</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">VmbInterfaceInfo_t</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">malloc</span><span class="p">(</span><span class="w"> </span><span class="n">nCount</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="o">*</span><span class="n">pInterfaces</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Get the interfaces</span>
+<span class="n">VmbInterfacesList</span><span class="p">(</span><span class="w"> </span><span class="n">pCameras</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="n">nCount</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">nCount</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="o">*</span><span class="n">pInterfaces</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<section id="struct-vmbinterfaceinfo-t">
+<span id="index-38"></span><h4>Struct VmbInterfaceInfo_t<a class="headerlink" href="#struct-vmbinterfaceinfo-t" title="Permalink to this headline"></a></h4>
+<p>Struct <em>VmbInterfaceInfo_t</em> provides the entries listed in the table below
+for obtaining read-only information about an interface.</p>
+<table class="docutils align-default" id="id32">
+<caption><span class="caption-text">VmbInterfaceInfo_t</span><a class="headerlink" href="#id32" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 29%" />
+<col style="width: 26%" />
+<col style="width: 45%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Type</p></th>
+<th class="head"><p>Field</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>const char*</p></td>
+<td><p>interfaceIdString</p></td>
+<td><p>Unique identifier for each interface</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbTransportLayerType_t</p></td>
+<td><p>interfaceType</p></td>
+<td><p>See VmbTransportLayerType</p></td>
+</tr>
+<tr class="row-even"><td><p>const char*</p></td>
+<td><p>interfaceName</p></td>
+<td><p>Given by the TL</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbHandle_t</p></td>
+<td><p>transportLayerHandle</p></td>
+<td><p>For TL system module feature access</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbHandle_t</p></td>
+<td><p>interfaceHandle</p></td>
+<td><p>For interface module feature access</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+</section>
+<section id="enabling-notifications-of-changed-interface-states">
+<span id="index-39"></span><h3>Enabling notifications of changed interface states<a class="headerlink" href="#enabling-notifications-of-changed-interface-states" title="Permalink to this headline"></a></h3>
+<p>To get notified whenever an interface is detected or disconnected, use
+<code class="docutils literal notranslate"><span class="pre">VmbFeatureInvalidationRegister()</span></code> to register a callback that gets
+executed on the according event.
+Use the global Vmb handle for registration. The function pointer to
+the callback function has to be of type <code class="docutils literal notranslate"><span class="pre">VmbInvalidationCallback()</span></code>.</p>
+<section id="tl-enumerations">
+<span id="index-40"></span><h4>TL enumerations<a class="headerlink" href="#tl-enumerations" title="Permalink to this headline"></a></h4>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>The CSI TL is listed as <em>VmbTransportLayerTypeCustom</em>.</p>
+</div>
+<table class="docutils align-default" id="id33">
+<caption><span class="caption-text">Enum VmbTransportLayerType is represented as VmbUint32_t through VmbInterfaceInfo_t</span><a class="headerlink" href="#id33" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 33%" />
+<col style="width: 33%" />
+<col style="width: 33%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Enumeration</p></th>
+<th class="head"><p>Integer Value</p></th>
+<th class="head"><p>Interface</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbTransportLayerTypeUnknown</p></td>
+<td><p>0</p></td>
+<td><p>Interface is not known to the API</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbTransportLayerTypeGEV</p></td>
+<td><p>1</p></td>
+<td><p>GigE Vision</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbTransportLayerTypeCL</p></td>
+<td><p>2</p></td>
+<td><p>Camera Link</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbTransportLayerTypeIIDC</p></td>
+<td><p>3</p></td>
+<td><p>IIDC 1394</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbTransportLayerTypeUVC</p></td>
+<td><p>4</p></td>
+<td><p>USB video class</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbTransportLayerTypeCXP</p></td>
+<td><p>5</p></td>
+<td><p>CoaXPress</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbTransportLayerTypeCLHS</p></td>
+<td><p>6</p></td>
+<td><p>Camera Link HS</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbTransportLayerTypeU3V</p></td>
+<td><p>7</p></td>
+<td><p>USB3 Vision Standard</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbTransportLayerTypeEthernet</p></td>
+<td><p>8</p></td>
+<td><p>Generic Ethernet</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbTransportLayerTypePCI</p></td>
+<td><p>9</p></td>
+<td><p>PCI / PCIe</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbTransportLayerTypeCustom</p></td>
+<td><p>10</p></td>
+<td><p>Non standard</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbTransportLayerTypeMixed</p></td>
+<td><p>11</p></td>
+<td><p>Mixed (System module only)</p></td>
+</tr>
+</tbody>
+</table>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Functions that must not be called be called within the callback routine:</p>
+<ul class="simple">
+<li><p>VmbStartup</p></li>
+<li><p>VmbShutdown</p></li>
+<li><p>VmbFeatureIntSet (and any other VmbFeature*Set function)</p></li>
+<li><p>VmbFeatureCommandRun</p></li>
+</ul>
+</div>
+</section>
+</section>
+<section id="error-codes">
+<h3>Error codes<a class="headerlink" href="#error-codes" title="Permalink to this headline"></a></h3>
+<table class="docutils align-default" id="id34">
+<caption><span class="caption-text">Error codes</span><a class="headerlink" href="#id34" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 25%" />
+<col style="width: 7%" />
+<col style="width: 68%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Error Code</p></th>
+<th class="head"><p>Value</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbErrorSuccess</p></td>
+<td><p>0</p></td>
+<td><p>No error</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorInternalFault</p></td>
+<td><p>-1</p></td>
+<td><p>Unexpected fault in Vmb or driver</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorApiNotStarted</p></td>
+<td><p>-2</p></td>
+<td><p>VmbStartup was not called before the current command</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorNotFound</p></td>
+<td><p>-3</p></td>
+<td><p>The designated instance (camera, feature, etc.) cannot be found</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorBadHandle</p></td>
+<td><p>-4</p></td>
+<td><p>The given handle is not valid</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorDeviceNotOpen</p></td>
+<td><p>-5</p></td>
+<td><p>Device was not opened for usage</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorInvalidAccess</p></td>
+<td><p>-6</p></td>
+<td><p>Operation is invalid with the current access mode</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorBadParameter</p></td>
+<td><p>-7</p></td>
+<td><p>One of the parameters is invalid (usually an illegal pointer)</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorStructSize</p></td>
+<td><p>-8</p></td>
+<td><p>The given struct size is not valid for this version of the API</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorMoreData</p></td>
+<td><p>-9</p></td>
+<td><p>More data available in a string/list than space is provided</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorWrongType</p></td>
+<td><p>-10</p></td>
+<td><p>Wrong feature type for this access function</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorInvalidValue</p></td>
+<td><p>-11</p></td>
+<td><p>The value is not valid; either out of bounds or not an <br>
+increment of the minimum</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorTimeout</p></td>
+<td><p>-12</p></td>
+<td><p>Timeout during wait</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorOther</p></td>
+<td><p>-13</p></td>
+<td><p>Other error</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorResources</p></td>
+<td><p>-14</p></td>
+<td><p>Resources not available (e.g., memory)</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorInvalidCall</p></td>
+<td><p>-15</p></td>
+<td><p>Call is invalid in the current context (e.g. callback)</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorNoTL</p></td>
+<td><p>-16</p></td>
+<td><p>No transport layers are found</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorNotImplemented</p></td>
+<td><p>-17</p></td>
+<td><p>API feature is not implemented</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorNotSupported</p></td>
+<td><p>-18</p></td>
+<td><p>API feature is not supported</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorIncomplete</p></td>
+<td><p>-19</p></td>
+<td><p>The current operation was not completed (e.g. a multiple <br>
+registers read or write)</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorIO</p></td>
+<td><p>-20</p></td>
+<td><p>There was an error during read or write with devices <br>
+(camera or disk)</p></td>
+</tr>
+</tbody>
+</table>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>If your TL or camera is not found or if you experience other issues, see <a class="reference internal" href="troubleshooting.html"><span class="doc">Troubleshooting</span></a>.</p>
+</div>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="sdkManual.html" class="btn btn-neutral float-left" title="SDK Manual" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="cppAPIManual.html" class="btn btn-neutral float-right" title="CPP API Manual" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/cppAPIManual.html b/VimbaX/doc/VimbaX_Documentation/cppAPIManual.html
new file mode 100644
index 0000000000000000000000000000000000000000..f6a8e45c8105d311c8b565389ebf3bee23db7838
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/cppAPIManual.html
@@ -0,0 +1,1538 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>CPP API Manual &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Python API Manual" href="pythonAPIManual.html" />
+    <link rel="prev" title="C API Manual" href="cAPIManual.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">CPP API Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#introduction-to-the-api">Introduction to the API</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#compatibility">Compatibility</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#c-api-diagram">C++ API diagram</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#shared-pointers">Shared pointers</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#general-aspects">General aspects</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#replacing-the-shared-pointer-library">Replacing the shared pointer library</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#api-usage">API usage</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#entry-point">Entry point</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#api-version">API version</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#api-startup-and-shutdown">API startup and shutdown</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#listing-cameras">Listing cameras</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#gige-cameras">GigE cameras</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#usb-cameras">USB cameras</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#camera-link-cameras">Camera Link cameras</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#mipi-csi-cameras">MIPI CSI cameras</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#extended-id">Extended ID</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#notifications-of-changed-camera-states">Notifications of changed camera states</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#opening-and-closing-a-camera">Opening and closing a camera</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#accessing-features">Accessing features</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#feature-types">Feature types</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#acquiring-images">Acquiring images</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#image-capture-vs-image-acquisition">Image Capture vs. Image Acquisition</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#asynchronous-image-acquisition">Asynchronous image acquisition</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#image-capture">Image capture</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#image-acquisition">Image Acquisition</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#transforming-images">Transforming images</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#using-events">Using Events</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#chunk">Chunk</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#saving-and-loading-settings">Saving and loading settings</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#triggering">Triggering</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#external-trigger">External trigger</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#listing-interfaces">Listing interfaces</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#error-codes">Error codes</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>CPP API Manual</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="cpp-api-manual">
+<h1>CPP API Manual<a class="headerlink" href="#cpp-api-manual" title="Permalink to this headline"></a></h1>
+<section id="introduction-to-the-api">
+<h2>Introduction to the API<a class="headerlink" href="#introduction-to-the-api" title="Permalink to this headline"></a></h2>
+<p>The C++ API has an elaborate class architecture. It is designed as a highly efficient and sophisticated
+API for advanced object-oriented programming including the STL (standard template library), shared
+pointers, and interface classes. If you prefer an API with less design patterns, we recommend using the
+C API.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>To understand the API, read the <a class="reference internal" href="sdkManual.html"><span class="doc">SDK Manual</span></a> first:
+It contains essential information.</p>
+</div>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>For more information about design patterns, we recommend the book
+<em>Design Patterns. Elements of Reusable Object-Oriented Software</em>.</p>
+<p>To get the best possible performance, you need knowledge about
+multithreading. We recommend the book <em>C++ Concurrency in Action</em>.</p>
+</div>
+<section id="compatibility">
+<h3>Compatibility<a class="headerlink" href="#compatibility" title="Permalink to this headline"></a></h3>
+<p>The C++ API release build is compatible with
+Visual Studio 2017. If you use a higher version, we recommend you to
+rebuild the C++ API by compiling the source files with your
+Visual Studio version. You can also use other IDEs that implement the C++11 standard
+(or higher) if you compile the C++ API source files with these IDEs.</p>
+</section>
+<section id="c-api-diagram">
+<h3>C++ API diagram<a class="headerlink" href="#c-api-diagram" title="Permalink to this headline"></a></h3>
+<p>The image below shows a simplified C++ API UML diagram. To ease understanding
+the concept, only the most important items are listed. For classes that you
+access through their pointers, the diagram shows these pointers instead of the
+corresponding class names.</p>
+<figure class="align-default" id="id1">
+<a class="reference internal image-reference" href="_images/CPP-UML.svg"><img alt="Simplified UML diagram" src="_images/CPP-UML.svg" width="1000" /></a>
+<figcaption>
+<p><span class="caption-text">Simplified UML diagram</span><a class="headerlink" href="#id1" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+<section id="shared-pointers">
+<h3>Shared pointers<a class="headerlink" href="#shared-pointers" title="Permalink to this headline"></a></h3>
+<section id="general-aspects">
+<h4>General aspects<a class="headerlink" href="#general-aspects" title="Permalink to this headline"></a></h4>
+<p>A shared pointer is an object that wraps any regular pointer variable to control its lifetime. Besides
+wrapping the underlying raw pointer, it keeps track of the number of copies of itself. By doing so, it
+ensures that it will not release the wrapped raw pointer until its reference count (the number of copies)
+has dropped to zero. A shared pointer automatically deletes the wrapped pointer when the last shared
+pointer to it is destroyed. Though giving away the responsibility for deallocation, the programmer can
+still work on the very same objects.</p>
+<p>Because of the mentioned advantages, the C++ API makes heavy use of shared pointers while not
+relying on a specific implementation.</p>
+<div class="literal-block-wrapper docutils container" id="id2">
+<div class="code-block-caption"><span class="caption-text">Shared pointers code snippet</span><a class="headerlink" href="#id2" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
+<span class="w">  </span><span class="c1">// This declares an empty shared pointer that can wrap a pointer of</span>
+<span class="w">  </span><span class="c1">// type Camera</span>
+<span class="w">  </span><span class="n">CameraPtr</span><span class="w"> </span><span class="n">sp1</span><span class="p">;</span><span class="w"></span>
+
+<span class="w">  </span><span class="c1">// The reset member function tells the shared pointer to</span>
+<span class="w">  </span><span class="c1">// wrap the provided raw pointer</span>
+<span class="w">  </span><span class="c1">// sp1 now has a reference count of 1</span>
+<span class="w">  </span><span class="n">sp1</span><span class="p">.</span><span class="n">reset</span><span class="p">(</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Camera</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">  </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="c1">// In this new scope we declare another shared pointer</span>
+<span class="w">      </span><span class="n">CameraPtr</span><span class="w"> </span><span class="n">sp2</span><span class="p">;</span><span class="w"></span>
+
+<span class="w">      </span><span class="c1">// By assigning sp1 to it the reference count of both (!) is set to 2</span>
+<span class="w">      </span><span class="n">sp2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sp1</span><span class="p">;</span><span class="w"></span>
+<span class="w">  </span><span class="p">}</span><span class="w"></span>
+<span class="w">  </span><span class="c1">// When sp2 goes out of scope the reference count drops back to 1</span>
+<span class="p">}</span><span class="w"></span>
+<span class="c1">// Now that sp1 has gone out of scope its reference count has dropped</span>
+<span class="c1">// to 0 and it has released the underlying raw pointer on destruction</span>
+</pre></div>
+</div>
+</div>
+</section>
+<section id="replacing-the-shared-pointer-library">
+<h4>Replacing the shared pointer library<a class="headerlink" href="#replacing-the-shared-pointer-library" title="Permalink to this headline"></a></h4>
+<p>Although it is best practice to use the predefined shared pointer type, you can replace it with a different
+pointer type from libraries like Qt or Boost. In order to ease this exchange, the  VmbCPP source files
+include the header file UserSharedPointerDefines.h. This header file also lists the needed template functions
+and typedefs.
+Additionally, the table below lists template parameters covering the basic functionality that Vimba X
+expects from any shared pointer. Since a shared pointer is a generic type, it requires a template parameter.
+That is what the various typedefs are for. For example, the CameraPtr is just an alias for
+<code class="docutils literal notranslate"><span class="pre">VmbCPP::SharedPointer&lt;</span> <span class="pre">VmbCPP::Camera&gt;</span></code>.</p>
+<p>To replace the shared pointers, follow these steps:</p>
+<ol class="arabic simple">
+<li><p>Add UserSharedPointerDefines.h by adding the define USER_SHARED_POINTER to your compiler
+settings.</p></li>
+<li><p>Add your shared pointer source files to the C++ API project.</p></li>
+<li><p>Define the template parameters and typedefs as described in the header UserSharedPointerDefines.h.</p></li>
+<li><p>Recompile the C++ API.</p></li>
+</ol>
+<p>Vimba X now is ready to use the added shared pointer implementation without changing its behavior.
+Within your own application, you can employ your shared pointers as usual. Note that your application
+and Vimba X must refer to the same shared pointer type.</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>If you want your application to substitute its shared pointer type along with
+Vimba X, you can use the template parameters listed in the table below in your application as well.</p>
+</div>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 26%" />
+<col style="width: 45%" />
+<col style="width: 29%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function</p></th>
+<th class="head"><p>Example</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>n/a</p></td>
+<td><p>VmbCPP::SharedPointer&lt;MyClass&gt; <br>
+mySharedPointer;</p></td>
+<td><p>Declares new shared <br>
+pointer</p></td>
+</tr>
+<tr class="row-odd"><td><p>SP_SET( sp, rawPtr )</p></td>
+<td><p>VmbCPP::SP_SET(mySharedPointer, rawPtr);</p></td>
+<td><p>Tells existing pointer <br>
+to wrap given raw pointer</p></td>
+</tr>
+<tr class="row-even"><td><p>SP_RESET( sp )</p></td>
+<td><p>VmbCPP::SP_RESET(mySharedPointer);</p></td>
+<td><p>Tells existing pointer <br>
+to decrease reference count</p></td>
+</tr>
+<tr class="row-odd"><td><p>SP_ISEQUAL( sp1, sp2 )</p></td>
+<td><p>VmbCPP::SP_ISEQUAL(mySharedPointer, <br>
+mySharedPointer2)</p></td>
+<td><p>Checks addresses of wrapped <br>
+raw pointers for equality</p></td>
+</tr>
+<tr class="row-even"><td><p>SP_ISNULL( sp )</p></td>
+<td><p>VmbCPP::SP_ISNULL(mySharedPointer)</p></td>
+<td><p>Checks address of wrapped <br>
+raw pointer for NULL</p></td>
+</tr>
+<tr class="row-odd"><td><p>SP_ACCESS( sp )</p></td>
+<td><p>MyClass* rawPtr = <br>
+VmbCPP::SP_ACCESS(mySharedPointer);</p></td>
+<td><p>Returns wrapped raw pointer</p></td>
+</tr>
+<tr class="row-even"><td><p>SP_DYN_CAST&lt;TargetType, <br>
+SourceType&gt; ( sp )</p></td>
+<td><p>VmbCPP::SharedPointer&lt;MyDerivedClass&gt; derived <br>
+= VmbCPP::SP_DYN_CAST&lt;MyDerivedClass, <br>
+MyClass&gt;(mySharedPointer);</p></td>
+<td><p>Dynamic cast of the <br>
+pointer</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+</section>
+</section>
+<section id="api-usage">
+<h2>API usage<a class="headerlink" href="#api-usage" title="Permalink to this headline"></a></h2>
+<section id="entry-point">
+<span id="index-0"></span><h3>Entry point<a class="headerlink" href="#entry-point" title="Permalink to this headline"></a></h3>
+<p>The entry point to the C++ API is the VmbSystem singleton. To obtain a
+reference to it, call the static function <code class="docutils literal notranslate"><span class="pre">VmbSystem::GetInstance</span></code>. All
+C++ classes reside in the namespace VmbCPP, so employ the using
+declaration <code class="docutils literal notranslate"><span class="pre">using</span> <span class="pre">VmbCPP</span></code>.</p>
+</section>
+<section id="api-version">
+<span id="index-1"></span><h3>API version<a class="headerlink" href="#api-version" title="Permalink to this headline"></a></h3>
+<p>Even if new features are introduced to the C++ API, your software
+remains backward compatible. Use <code class="docutils literal notranslate"><span class="pre">VmbSystem::QueryVersion</span></code> to check
+the version number of the API. You can run this function without
+initializing the API.</p>
+</section>
+<section id="api-startup-and-shutdown">
+<h3>API startup and shutdown<a class="headerlink" href="#api-startup-and-shutdown" title="Permalink to this headline"></a></h3>
+<p>To start and shut down the C++ API, use these paired functions:</p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">VmbSystem::Startup()</span></code> initializes the API, the TLs, and Interfaces. With the optional
+parameter <code class="docutils literal notranslate"><span class="pre">pathConfiguration</span></code>, you can select which transport layers are used.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">VmbSystem::Shutdown()</span></code> shuts down the API and destroys all used objects in
+the API (when all observers have finished execution).</p></li>
+</ul>
+<p><code class="docutils literal notranslate"><span class="pre">VmbSystem::Startup</span></code> and <code class="docutils literal notranslate"><span class="pre">VmbSystem::Shutdown</span></code> must always be paired.
+Calling the pair several times within the same program is possible,
+but not recommended.
+Successive calls of <code class="docutils literal notranslate"><span class="pre">VmbSystem::Startup</span></code> or <code class="docutils literal notranslate"><span class="pre">VmbSystem::Shutdown</span></code> are
+ignored and the first <code class="docutils literal notranslate"><span class="pre">VmbSystem::Shutdown</span></code> after a <code class="docutils literal notranslate"><span class="pre">VmbSystem::Startup</span></code>
+closes the API.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Always shut down the API when your application closes. Shutting down the API
+is necessary under all circumstances to unload the transport layers. If they still
+are loaded although the application is closed, they access invalid memory.</p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p><code class="docutils literal notranslate"><span class="pre">VmbSystem::Shutdown</span></code> blocks until all callbacks have finished execution.</p>
+</div>
+</section>
+<section id="listing-cameras">
+<span id="index-2"></span><h3>Listing cameras<a class="headerlink" href="#listing-cameras" title="Permalink to this headline"></a></h3>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbSystem::GetCameras</span></code> enumerates all cameras recognized by the underlying transport layers.
+With this command, you can fetch the list of all connected camera objects. Before opening
+cameras, camera objects contain all static details of a physical camera that do not change throughout
+the object’s lifetime such as the camera id and the camera model.</p>
+<p>The order in which the detected cameras are listed is determined by
+the order of camera discovery and therefore not deterministic.
+Moreover, the order may change depending on your system configuration and the
+accessories (for example, hubs or long cables).</p>
+<section id="gige-cameras">
+<h4>GigE cameras<a class="headerlink" href="#gige-cameras" title="Permalink to this headline"></a></h4>
+<p>For GigE cameras, discovery has to be initiated by the host software.
+This is done automatically if you register a camera list observer of
+type <code class="docutils literal notranslate"><span class="pre">ICameraListObserv</span></code> with VmbSystem.</p>
+<p>In this case, a call to <code class="docutils literal notranslate"><span class="pre">VmbSystem::GetCameras</span></code> or
+<code class="docutils literal notranslate"><span class="pre">VmbSystem::GetCameraByID</span></code> returns immediately.
+If no camera list observer is registered, a call to
+<code class="docutils literal notranslate"><span class="pre">VmbSystem::GetCameras</span></code> or
+<code class="docutils literal notranslate"><span class="pre">VmbSystem::GetCameraByID</span></code> takes some time because the responses to
+the initiated discovery command must be waited for.</p>
+</section>
+<section id="usb-cameras">
+<h4>USB cameras<a class="headerlink" href="#usb-cameras" title="Permalink to this headline"></a></h4>
+<p>Changes to the plugged cameras are detected automatically. Consequently,
+any changes to the camera list are announced via discovery events and
+the call to <code class="docutils literal notranslate"><span class="pre">VmbSystem::GetCameras</span></code> returns immediately.</p>
+</section>
+<section id="camera-link-cameras">
+<h4>Camera Link cameras<a class="headerlink" href="#camera-link-cameras" title="Permalink to this headline"></a></h4>
+<p>The specifications of Camera Link and GenCP do not support plug &amp; play or
+discovery events. To detect changes to the camera list, shutdown and startup
+the API by calling <code class="docutils literal notranslate"><span class="pre">VmbSystem::Shutdown</span></code> and <code class="docutils literal notranslate"><span class="pre">VmbSystem::Startup</span></code> consecutively.</p>
+</section>
+<section id="mipi-csi-cameras">
+<h4>MIPI CSI cameras<a class="headerlink" href="#mipi-csi-cameras" title="Permalink to this headline"></a></h4>
+<p>Cameras with MIPI CSI-2 interface are detected when the board is booted.
+To avoid damage to the hardware, do not plug in or out a camera while the board is powered.</p>
+<div class="literal-block-wrapper docutils container" id="id3">
+<span id="index-3"></span><div class="code-block-caption"><span class="caption-text">Getting the camera list code snippet</span><a class="headerlink" href="#id3" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="w"> </span><span class="n">name</span><span class="p">;</span><span class="w"></span>
+<span class="n">CameraPtrVector</span><span class="w"> </span><span class="n">cameras</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbSystem</span><span class="w"> </span><span class="o">&amp;</span><span class="n">system</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbSystem</span><span class="o">::</span><span class="n">GetInstance</span><span class="p">();</span><span class="w"></span>
+<span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">system</span><span class="p">.</span><span class="n">Startup</span><span class="p">()</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">system</span><span class="p">.</span><span class="n">GetCameras</span><span class="p">(</span><span class="w"> </span><span class="n">cameras</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">        </span><span class="k">for</span><span class="p">(</span><span class="w"> </span><span class="n">CameraPtrVector</span><span class="o">::</span><span class="n">iterator</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span><span class="w"></span>
+<span class="w">              </span><span class="n">cameras</span><span class="p">.</span><span class="n">end</span><span class="p">()</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">iter</span><span class="p">;</span><span class="w"></span>
+<span class="w">              </span><span class="o">++</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">        </span><span class="p">{</span><span class="w"></span>
+<span class="w">             </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">iter</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">GetName</span><span class="p">(</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">             </span><span class="p">{</span><span class="w"></span>
+<span class="w">              </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">             </span><span class="p">}</span><span class="w"></span>
+<span class="w">        </span><span class="p">}</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<span id="index-4"></span><table class="docutils align-default" id="id4">
+<caption><span class="caption-text">Basic functions of the Camera class</span><a class="headerlink" href="#id4" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 53%" />
+<col style="width: 47%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function <br>
+returning VmbErrorType</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>GetID( std::string&amp; ) const</p></td>
+<td><p>Unique ID</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetName( std::string&amp; ) const</p></td>
+<td><p>Name</p></td>
+</tr>
+<tr class="row-even"><td><p>GetModel( std::string&amp; ) const</p></td>
+<td><p>Model name</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetSerialNumber( std::string&amp; )   const</p></td>
+<td><p>Serial number</p></td>
+</tr>
+<tr class="row-even"><td><p>GetPermittedAccess(   VmbAccessModeType&amp; ) const</p></td>
+<td><p>Mode to open the camera</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetInterfaceID( std::string&amp; )   const</p></td>
+<td><p>ID of the interface the camera is connected to</p></td>
+</tr>
+</tbody>
+</table>
+<p>The following table lists additional functions of the Camera class.</p>
+<table class="docutils align-default" id="id5">
+<caption><span class="caption-text">Additional functions of the Camera class</span><a class="headerlink" href="#id5" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 46%" />
+<col style="width: 54%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Camera class member functions</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>GetInterface()</p></td>
+<td><p>Access the Interface and its features</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetTransportLayer()</p></td>
+<td><p>Access the TL and its features</p></td>
+</tr>
+<tr class="row-even"><td><p>GetLocalDevice()</p></td>
+<td><p>Access local device features</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetStreams()</p></td>
+<td><p>Enumerate camera streams</p></td>
+</tr>
+<tr class="row-even"><td><p>GetExtendedID()</p></td>
+<td><p>Get the Extended ID (if available)</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetLocalDevice()</p></td>
+<td><p>Access local device features</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="extended-id">
+<span id="index-5"></span><h4>Extended ID<a class="headerlink" href="#extended-id" title="Permalink to this headline"></a></h4>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>In most cases, the Extended ID is not needed. can use it as needed.</p>
+</div>
+<p>If several TLs are available for one camera, the camera is listed several times.
+To avoid potential conflicts, the SDK automatically creates an extended ID string for each camera.
+extended ID string is provided in the struct <code class="docutils literal notranslate"><span class="pre">VmbCameraInfo_t:</span> <span class="pre">cameraIdStringExtended</span></code>.</p>
+<p>Extended IDs use the following grammar:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>extended_id : &lt;tl_identifier-char-count&gt; separator tl_identifier &lt;interface_id-char-count&gt;
+separator interface_id &lt;camera_id-char-count&gt; separator camera_id separator   : &#39;:&#39;`
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Extended IDs always overwrite other ids. A non-extended ID may be unusable after other cameras
+are discovered.</p>
+</div>
+<table class="docutils align-default" id="id6">
+<caption><span class="caption-text">Extended IDs</span><a class="headerlink" href="#id6" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 30%" />
+<col style="width: 70%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Placeholder</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>tl_identifier</p></td>
+<td><p>File path of the transport layer</p></td>
+</tr>
+<tr class="row-odd"><td><p>interface_id</p></td>
+<td><p>ID of the interface as reported by the transport layer</p></td>
+</tr>
+<tr class="row-even"><td><p>camera_id</p></td>
+<td><p>Camera (non-extended) ID as reported by the interface</p></td>
+</tr>
+<tr class="row-odd"><td><p>&lt;tl_identifier-char-count&gt;</p></td>
+<td><p>Number of characters (TL ID) encoded as decimal integer</p></td>
+</tr>
+<tr class="row-even"><td><p>&lt;interface_id-char-count&gt;</p></td>
+<td><p>Number of characters (interface ID) encoded as decimal integer</p></td>
+</tr>
+<tr class="row-odd"><td><p>&lt;camera_id-char-count&gt;</p></td>
+<td><p>Number of characters encoded as decimal integer</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="notifications-of-changed-camera-states">
+<h4>Notifications of changed camera states<a class="headerlink" href="#notifications-of-changed-camera-states" title="Permalink to this headline"></a></h4>
+<p>For being notified whenever a camera is detected, disconnected, or changes its open state, use
+<code class="docutils literal notranslate"><span class="pre">VmbSystem::RegisterCameraListObserver</span></code> (GigE and USB only). This call registers a
+camera list observer (of type ICameraListObserver) with the VmbSystem that gets executed on the
+according event. The observer function to be registered has to be of type <code class="docutils literal notranslate"><span class="pre">ICameraListObserver*</span></code>.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Functions that must not be called within your camera list observer:</p>
+<ul class="simple">
+<li><p>VmbSystem::Startup</p></li>
+<li><p>VmbSystem::Shutdown</p></li>
+<li><p>VmbSystem::GetCameras</p></li>
+<li><p>VmbSystem::GetCameraByID</p></li>
+<li><p>VmbSystem::RegisterCameraListObserver</p></li>
+<li><p>VmbSystem::UnregisterCameraListObserver</p></li>
+<li><p>Feature::SetValue</p></li>
+<li><p>Feature::RunCommand</p></li>
+</ul>
+</div>
+<span class="target" id="index-6"></span><span class="target" id="index-7"></span></section>
+</section>
+<section id="opening-and-closing-a-camera">
+<span id="index-8"></span><h3>Opening and closing a camera<a class="headerlink" href="#opening-and-closing-a-camera" title="Permalink to this headline"></a></h3>
+<p>A camera must be opened to control it and to capture images.
+Call <code class="docutils literal notranslate"><span class="pre">Camera::Open</span></code> with the camera list entry of your choice, or use function
+<code class="docutils literal notranslate"><span class="pre">VmbSystem::OpenCameraByID</span></code> with the ID of the camera. In both cases, also provide the desired
+access mode for the camera.</p>
+<p>The API provides several access modes:</p>
+<ul class="simple">
+<li><p>VmbAccessModeFull: read and write access. Use this mode to configure the camera
+features and to acquire images (Goldeye CL cameras: configuration only).</p></li>
+<li><p>VmbAccessModeRead: read-only access. Setting features is not possible.
+However, for GigE cameras that are already in use by another application,
+the acquired images can be transferred to the API(Multicast).</p></li>
+</ul>
+<div class="literal-block-wrapper docutils container" id="id7">
+<span id="index-9"></span><div class="code-block-caption"><span class="caption-text">Open cameras code snippet</span><a class="headerlink" href="#id7" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">CameraPtrVector</span><span class="w"> </span><span class="n">cameras</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbSystem</span><span class="w"> </span><span class="o">&amp;</span><span class="n">system</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbSystem</span><span class="o">::</span><span class="n">GetInstance</span><span class="p">();</span><span class="w"></span>
+
+<span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">system</span><span class="p">.</span><span class="n">Startup</span><span class="p">()</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">system</span><span class="p">.</span><span class="n">GetCameras</span><span class="p">(</span><span class="w"> </span><span class="n">cameras</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">        </span><span class="k">for</span><span class="p">(</span><span class="w"> </span><span class="n">CameraPtrVector</span><span class="o">::</span><span class="n">iterator</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span><span class="w"></span>
+<span class="w">              </span><span class="n">cameras</span><span class="p">.</span><span class="n">end</span><span class="p">()</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">iter</span><span class="p">;</span><span class="w"></span>
+<span class="w">              </span><span class="o">++</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">        </span><span class="p">{</span><span class="w"></span>
+<span class="w">            </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">iter</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">Open</span><span class="p">(</span><span class="w"> </span><span class="n">VmbAccessModeFull</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">            </span><span class="p">{</span><span class="w"></span>
+<span class="w">                </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Camera opened&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">            </span><span class="p">}</span><span class="w"></span>
+<span class="w">        </span><span class="p">}</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<p>The following code snippet shows how to open a GigE camera by its IP address.
+Opening the camera by its serial number or MAC address is also possible.</p>
+<div class="literal-block-wrapper docutils container" id="id8">
+<div class="code-block-caption"><span class="caption-text">Open Camera by IP code snippet</span><a class="headerlink" href="#id8" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">CameraPtr</span><span class="w"> </span><span class="n">camera</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbSystem</span><span class="w"> </span><span class="o">&amp;</span><span class="n">system</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbSystem</span><span class="o">::</span><span class="n">GetInstance</span><span class="p">();</span><span class="w"></span>
+<span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">system</span><span class="p">.</span><span class="n">Startup</span><span class="p">()</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">system</span><span class="p">.</span><span class="n">OpenCameraByID</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;192.168.0.42&quot;</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                                 </span><span class="n">VmbAccessModeFull</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                                                 </span><span class="n">camera</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">        </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Camera opened&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<p id="index-10">The following code snippet shows how to close a camera using <code class="docutils literal notranslate"><span class="pre">Camera::Close</span></code>.</p>
+<div class="literal-block-wrapper docutils container" id="id9">
+<div class="code-block-caption"><span class="caption-text">Closing a camera code snippet</span><a class="headerlink" href="#id9" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="c1">// The &quot;camera&quot; object points to an opened camera</span>
+<span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">camera</span><span class="p">.</span><span class="n">Close</span><span class="p">()</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Camera closed&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<section id="accessing-features">
+<span id="index-11"></span><h4>Accessing features<a class="headerlink" href="#accessing-features" title="Permalink to this headline"></a></h4>
+<p>The function <code class="docutils literal notranslate"><span class="pre">Camera::Open</span></code> provides access to the features of the Remote Device module.
+To access features of the interface, you can retrieve the pointer to the Interface instance
+via member function <code class="docutils literal notranslate"><span class="pre">Camera::GetInterface()</span></code>, similar for accessing the features of the
+Transport Layer module.</p>
+</section>
+<section id="feature-types">
+<span id="index-12"></span><h4>Feature types<a class="headerlink" href="#feature-types" title="Permalink to this headline"></a></h4>
+<p>The C++ API provides several feature types, which all have their specific
+properties and functionalities.
+The  API provides its own set of access functions for every feature data type.</p>
+<table class="docutils align-default" id="id10">
+<caption><span class="caption-text">Functions for reading and writing a feature</span><a class="headerlink" href="#id10" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 11%" />
+<col style="width: 24%" />
+<col style="width: 31%" />
+<col style="width: 35%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Type</p></th>
+<th class="head"><p>Set</p></th>
+<th class="head"><p>Get</p></th>
+<th class="head"><p>Range/Increment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Enum</p></td>
+<td><p>SetValue( string )</p></td>
+<td><p>GetValue( string&amp; )</p></td>
+<td><p>GetValues( StringVector&amp; )</p></td>
+</tr>
+<tr class="row-odd"><td></td>
+<td><p>SetValue( int )</p></td>
+<td><p>GetValue( int&amp; )</p></td>
+<td><p>GetValues( IntVector&amp; )</p></td>
+</tr>
+<tr class="row-even"><td></td>
+<td></td>
+<td><p>GetEntry( EnumEntry&amp; )</p></td>
+<td><p>GetEntries( EntryVector&amp; )</p></td>
+</tr>
+<tr class="row-odd"><td><p>Int</p></td>
+<td><p>SetValue( int )</p></td>
+<td><p>GetValue( int&amp; )</p></td>
+<td><p>GetRange( int&amp;, int&amp; )</p></td>
+</tr>
+<tr class="row-even"><td></td>
+<td></td>
+<td></td>
+<td><p>GetIncrement( int&amp; )</p></td>
+</tr>
+<tr class="row-odd"><td><p>Float</p></td>
+<td><p>SetValue( double )</p></td>
+<td><p>GetValue( double&amp; )</p></td>
+<td><p>GetRange( double&amp;, double&amp; )</p></td>
+</tr>
+<tr class="row-even"><td></td>
+<td></td>
+<td></td>
+<td><p>GetIncrement( double&amp; )</p></td>
+</tr>
+<tr class="row-odd"><td><p>String</p></td>
+<td><p>SetValue( string )</p></td>
+<td><p>GetValue( string&amp; )</p></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Bool</p></td>
+<td><p>SetValue( bool )</p></td>
+<td><p>GetValue( bool&amp; )</p></td>
+<td></td>
+</tr>
+<tr class="row-odd"><td><p>Command</p></td>
+<td><p>RunCommand( )</p></td>
+<td><p>IsCommandDone( bool&amp; )</p></td>
+<td></td>
+</tr>
+<tr class="row-even"><td><p>Raw</p></td>
+<td><p>SetValue( uchar )</p></td>
+<td><p>GetValue( UcharVector&amp; )</p></td>
+<td></td>
+</tr>
+</tbody>
+</table>
+<p>With the member function <code class="docutils literal notranslate"><span class="pre">GetValue</span></code>, a feature’s value can be queried.
+With the member function <code class="docutils literal notranslate"><span class="pre">SetValue</span></code>, a feature’s value can be set.</p>
+<p>Integer and double features support <code class="docutils literal notranslate"><span class="pre">GetRange</span></code>. These functions return
+the minimum and maximum value that a feature can have. Integer features
+also support the <code class="docutils literal notranslate"><span class="pre">GetIncrement</span></code> function to query the step size of
+feature changes. Valid values for integer features are <em>min &lt;= val &lt;= min +
+[(max-min)/increment] * increment</em> (the maximum value might not be valid).</p>
+<p>Enumeration features support GetValues that returns a vector of valid
+enumerations as strings or integers. These values can be used to set the
+feature according to the result of <code class="docutils literal notranslate"><span class="pre">IsValueAvailable</span></code>. If a non-empty
+vector is supplied, the original content is overwritten and the size of
+the vector is adjusted to fit all elements. An enumeration feature can
+also be used in a similar way as an integer feature.</p>
+<p>Since not all the features are available all the time, the current
+accessibility of features may be queried via <code class="docutils literal notranslate"><span class="pre">IsReadable()</span></code> and
+<code class="docutils literal notranslate"><span class="pre">IsWritable()</span></code>, and the availability of Enum values can be queried
+with <code class="docutils literal notranslate"><span class="pre">IsValueAvailable(</span> <span class="pre">string</span> <span class="pre">)</span></code>  or <code class="docutils literal notranslate"><span class="pre">IsValueAvailable(</span> <span class="pre">int</span> <span class="pre">)</span></code> .</p>
+<p>With <code class="docutils literal notranslate"><span class="pre">Camera::GetFeatures</span></code>, you can list all features available for a camera.
+This list remains static while the camera is opened. The Feature class
+of the entries in this list also provides information about the features
+that always stay the same for this camera. Use the member
+functions of class Feature to access them as shown in the following
+code snippets:</p>
+<div class="literal-block-wrapper docutils container" id="id11">
+<span id="index-13"></span><div class="code-block-caption"><span class="caption-text">Reading a camera feature code snippet</span><a class="headerlink" href="#id11" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">FeaturePtr</span><span class="w"> </span><span class="n">feature</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbInt64_t</span><span class="w"> </span><span class="n">width</span><span class="p">;</span><span class="w"></span>
+
+<span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Width&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">feature</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">feature</span><span class="o">-&gt;</span><span class="n">GetValue</span><span class="p">(</span><span class="w"> </span><span class="n">width</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">        </span><span class="n">std</span><span class="o">::</span><span class="n">out</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">width</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<p id="index-14">Writing features to a camera and running a command feature:</p>
+<div class="literal-block-wrapper docutils container" id="id12">
+<div class="code-block-caption"><span class="caption-text">Writing features and running command features</span><a class="headerlink" href="#id12" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">FeaturePtr</span><span class="w"> </span><span class="n">feature</span><span class="p">;</span><span class="w"></span>
+
+<span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;AcquisitionMode&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">feature</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">feature</span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Continuous&quot;</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">        </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;AcquisitionStart&quot;</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                                           </span><span class="n">feature</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">        </span><span class="p">{</span><span class="w"></span>
+<span class="w">            </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">feature</span><span class="o">-&gt;</span><span class="n">RunCommand</span><span class="p">()</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">            </span><span class="p">{</span><span class="w"></span>
+<span class="w">                </span><span class="n">std</span><span class="o">::</span><span class="n">out</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Acquisition started&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">            </span><span class="p">}</span><span class="w"></span>
+<span class="w">        </span><span class="p">}</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<p>The following table introduces the basic features of all cameras.
+A feature has a name, a type, and access flags such
+as read-permitted and write-permitted.
+To get notified when a feature’s value changes use <code class="docutils literal notranslate"><span class="pre">Feature::RegisterObserver</span></code>
+(see section <a class="reference internal" href="#using-events"><span class="std std-ref">Using Events</span></a>). The observer to be registered has to implement
+the interface <code class="docutils literal notranslate"><span class="pre">IFeatureObserver</span></code>. This interface declares the member function
+<code class="docutils literal notranslate"><span class="pre">FeatureChanged</span></code>. In the implementation of this function, you can react on
+updated feature values as it will get called by the API on the according event.</p>
+<table class="docutils align-default" id="id13">
+<caption><span class="caption-text">Functions for accessing static properties of a feature</span><a class="headerlink" href="#id13" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 46%" />
+<col style="width: 54%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function <br>
+returning VmbErrorType</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>GetName( std::string&amp; )</p></td>
+<td><p>Name of the feature</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetDisplayName( std::string&amp; )</p></td>
+<td><p>Name to display in GUI</p></td>
+</tr>
+<tr class="row-even"><td><p>GetDataType( VmbFeatureDataType&amp; )</p></td>
+<td><p>Data type of the feature. Gives information <br>
+about the available functions for the feature.</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetFlags( VmbFeatureFlagsType&amp; )</p></td>
+<td><p>Static feature flags, containing information  <br>
+about the actions available for a feature: <br>
+Read an Write, Volatile (changes with every <br>
+Read possible).
+ModifyWrite features are ajdusted to <br>
+valid values.</p></td>
+</tr>
+<tr class="row-even"><td><p>GetCategory( std::string&amp; )</p></td>
+<td><p>Category the feature belongs to, used for <br>
+structuring the features</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetPollingTime( VmbUint32_t&amp; )</p></td>
+<td><p>The suggested time to poll the feature</p></td>
+</tr>
+<tr class="row-even"><td><p>GetUnit( std::string&amp; )</p></td>
+<td><p>The unit of the feature, if available</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetRepresentation( std::string&amp; )</p></td>
+<td><p>The scale to represent the feature, used <br>
+as a hint for feature control</p></td>
+</tr>
+<tr class="row-even"><td><p>GetVisibility( VmbFeatureVisibilityType&amp; )</p></td>
+<td><p>The audience the feature is for</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetToolTip( std::string&amp; )</p></td>
+<td><p>Short description of the feature, used <br>
+for bubble help</p></td>
+</tr>
+<tr class="row-even"><td><p>GetDescription( std::string&amp; )</p></td>
+<td><p>Description of the feature, used <br>
+as extended explanation</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetSFNCNamespace( std::string&amp; )</p></td>
+<td><p>The SFNC namespace of the feature</p></td>
+</tr>
+<tr class="row-even"><td><p>GetAffectedFeatures( FeaturePtrVector&amp; )</p></td>
+<td><p>Features that change if the feature is changed</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetSelectedFeatures( FeaturePtrVector&amp; )</p></td>
+<td><p>Features that are selected by the feature</p></td>
+</tr>
+</tbody>
+</table>
+<table class="docutils align-default" id="id14">
+<caption><span class="caption-text">Functions for accessing static properties of a feature</span><a class="headerlink" href="#id14" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 26%" />
+<col style="width: 19%" />
+<col style="width: 16%" />
+<col style="width: 39%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Feature</p></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Access</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>AcquisitionMode</p></td>
+<td><p>Enumeration</p></td>
+<td><p>R/W</p></td>
+<td><p>Values: Continuous, <br>
+SingleFrame, MultiFrame.</p></td>
+</tr>
+<tr class="row-odd"><td><p>AcquisitionStart</p></td>
+<td><p>Command</p></td>
+<td></td>
+<td><p>Start acquiring images.</p></td>
+</tr>
+<tr class="row-even"><td><p>AcquisitionStop</p></td>
+<td><p>Command</p></td>
+<td></td>
+<td><p>Stop acquiring images.</p></td>
+</tr>
+<tr class="row-odd"><td><p>PixelFormat</p></td>
+<td><p>Enumeration</p></td>
+<td><p>R/W</p></td>
+<td><p>Image format (Mono8 etc.)</p></td>
+</tr>
+<tr class="row-even"><td><p>Width</p></td>
+<td><p>Uint32</p></td>
+<td><p>R/W</p></td>
+<td><p>Image width, in pixels.</p></td>
+</tr>
+<tr class="row-odd"><td><p>Height</p></td>
+<td><p>Uint32</p></td>
+<td><p>R/W</p></td>
+<td><p>Image height, in pixels.</p></td>
+</tr>
+<tr class="row-even"><td><p>PayloadSize</p></td>
+<td><p>Uint32</p></td>
+<td><p>R</p></td>
+<td><p>Use VmbPayloadSizeGet()</p></td>
+</tr>
+</tbody>
+</table>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Functions that must not be called within the feature observer:</p>
+<ul class="simple">
+<li><p>VmbSystem::Startup</p></li>
+<li><p>VmbSystem::Shutdown</p></li>
+<li><p>VmbSystem::GetCameras</p></li>
+<li><p>VmbSystem::GetCameraByID</p></li>
+<li><p>VmbSystem::RegisterCameraListObserver</p></li>
+<li><p>VmbSystem::UnregisterCameraListObserver</p></li>
+<li><p>Feature::SetValue</p></li>
+<li><p>Feature::RunCommand</p></li>
+</ul>
+</div>
+</section>
+</section>
+<section id="acquiring-images">
+<span id="index-15"></span><h3>Acquiring images<a class="headerlink" href="#acquiring-images" title="Permalink to this headline"></a></h3>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>The <a class="reference internal" href="sdkManual.html"><span class="doc">SDK Manual</span></a> describes synchronous and asynchronous image acquisition.</p>
+</div>
+<section id="image-capture-vs-image-acquisition">
+<h4>Image Capture vs. Image Acquisition<a class="headerlink" href="#image-capture-vs-image-acquisition" title="Permalink to this headline"></a></h4>
+<p>Image capture and image acquisition are two independent operations:
+The API captures images, the camera acquires images. To obtain an image
+from your camera, setup the API to capture images
+before starting the acquisition on the camera:</p>
+<figure class="align-default" id="id15">
+<a class="reference internal image-reference" href="_images/VmbCPP_asynchronous.png"><img alt="Typical asynchronous application using VmbCPP" src="_images/VmbCPP_asynchronous.png" style="width: 1000px;" /></a>
+<figcaption>
+<p><span class="caption-text">Typical asynchronous application using VmbCPP</span><a class="headerlink" href="#id15" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+<section id="asynchronous-image-acquisition">
+<h4>Asynchronous image acquisition<a class="headerlink" href="#asynchronous-image-acquisition" title="Permalink to this headline"></a></h4>
+<p>The following code snippet is a minimalistic example of asynchrounous image acquisition.</p>
+<div class="literal-block-wrapper docutils container" id="id16">
+<span id="index-16"></span><div class="code-block-caption"><span class="caption-text">Simple image streaming code snippet</span><a class="headerlink" href="#id16" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;VmbCPP/VmbCpp.h&quot;</span><span class="cp"></span>
+<span class="k">using</span><span class="w"> </span><span class="k">namespace</span><span class="w"> </span><span class="nn">VmbCPP</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Constructor for the FrameObserver class</span>
+<span class="n">FrameObserver</span><span class="w"> </span><span class="o">::</span><span class="w"> </span><span class="n">FrameObserver</span><span class="p">(</span><span class="n">CameraPtr</span><span class="w"> </span><span class="n">pCamera</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">IFrameObserver</span><span class="p">(</span><span class="n">pCamera</span><span class="w"> </span><span class="p">){}</span><span class="w"></span>
+
+<span class="c1">// Frame callback notifies about incoming frames</span>
+<span class="kt">void</span><span class="w"> </span><span class="n">FrameObserver</span><span class="o">::</span><span class="n">FrameReceived</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">FramePtr</span><span class="w"> </span><span class="n">pFrame</span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="c1">// Send notification to working thread</span>
+<span class="w">   </span><span class="c1">// Do not apply image processing within this callback (performance)</span>
+<span class="w">   </span><span class="c1">// When the frame has been processed, requeue it</span>
+<span class="w">   </span><span class="n">m_pCamera</span><span class="w"> </span><span class="o">-&gt;</span><span class="n">QueueFrame</span><span class="p">(</span><span class="n">pFrame</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+
+<span class="kt">int</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="n">VmbInt64_t</span><span class="w"> </span><span class="n">nPLS</span><span class="p">;</span><span class="w"> </span><span class="c1">// Payload size value</span>
+<span class="w">   </span><span class="n">FeaturePtr</span><span class="w"> </span><span class="n">pFeature</span><span class="p">;</span><span class="w"> </span><span class="c1">// Generic feature pointer</span>
+<span class="w">   </span><span class="n">VmbSystem</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sys</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbSystem</span><span class="o">::</span><span class="n">GetInstance</span><span class="w"> </span><span class="p">();</span><span class="w"> </span><span class="c1">// Create and get Vmb singleton</span>
+<span class="w">   </span><span class="n">CameraPtrVector</span><span class="w"> </span><span class="n">cameras</span><span class="p">;</span><span class="w"> </span><span class="c1">// Holds camera handles</span>
+<span class="w">   </span><span class="n">CameraPtr</span><span class="w"> </span><span class="n">camera</span><span class="p">;</span><span class="w"></span>
+<span class="w">   </span><span class="n">FramePtrVector</span><span class="w"> </span><span class="nf">frames</span><span class="w"> </span><span class="p">(</span><span class="mi">15</span><span class="p">);</span><span class="w"> </span><span class="c1">// Frame array</span>
+
+<span class="w">   </span><span class="c1">// Start the API, get and open cameras</span>
+<span class="w">   </span><span class="n">sys</span><span class="p">.</span><span class="n">Startup</span><span class="p">();</span><span class="w"></span>
+<span class="w">   </span><span class="n">sys</span><span class="p">.</span><span class="n">GetCameras</span><span class="p">(</span><span class="n">cameras</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">camera</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"></span>
+<span class="w">   </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">Open</span><span class="p">(</span><span class="w"> </span><span class="n">VmbAccessModeFull</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="w">   </span><span class="c1">// Get the image size for the required buffer</span>
+<span class="w">   </span><span class="c1">// Allocate memory for frame buffer</span>
+<span class="w">   </span><span class="c1">// Register frame observer/callback for each frame</span>
+<span class="w">   </span><span class="c1">// Announce frame to the API</span>
+<span class="w">   </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;VmbPayloadsizeGet&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">GetValue</span><span class="p">(</span><span class="n">nPLS</span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="k">for</span><span class="p">(</span><span class="w"> </span><span class="n">FramePtrVector</span><span class="o">::</span><span class="n">iterator</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">frames</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span><span class="w"> </span><span class="n">frames</span><span class="p">.</span><span class="n">end</span><span class="p">()</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">iter</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">iter</span><span class="p">)</span><span class="w"></span>
+<span class="w">   </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="p">(</span><span class="o">*</span><span class="n">iter</span><span class="p">).</span><span class="n">reset</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">Frame</span><span class="p">(</span><span class="n">nPLS</span><span class="w"> </span><span class="p">));</span><span class="w"></span>
+<span class="w">      </span><span class="p">(</span><span class="o">*</span><span class="n">iter</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">RegisterObserver</span><span class="p">(</span><span class="n">IFrameObserverPtr</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">FrameObserver</span><span class="p">(</span><span class="n">camera</span><span class="w"> </span><span class="p">)));</span><span class="w"></span>
+<span class="w">      </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">AnnounceFrame</span><span class="p">(</span><span class="o">*</span><span class="n">iter</span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">}</span><span class="w"></span>
+
+<span class="w">   </span><span class="c1">// Start the capture engine (API)</span>
+<span class="w">   </span><span class="n">camera</span><span class="w"> </span><span class="o">-&gt;</span><span class="n">StartCapture</span><span class="p">();</span><span class="w"></span>
+<span class="w">   </span><span class="k">for</span><span class="p">(</span><span class="w"> </span><span class="n">FramePtrVector</span><span class="o">::</span><span class="n">iterator</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">frames</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span><span class="w"> </span><span class="n">frames</span><span class="p">.</span><span class="n">end</span><span class="p">()</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">iter</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">iter</span><span class="p">)</span><span class="w"></span>
+<span class="w">   </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="c1">// Put frame into the frame queue</span>
+<span class="w">      </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">QueueFrame</span><span class="p">(</span><span class="o">*</span><span class="n">iter</span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">}</span><span class="w"></span>
+
+<span class="w">       </span><span class="c1">// Start the acquisition engine (camera)</span>
+<span class="w">   </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;AcquisitionStart&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">RunCommand</span><span class="p">();</span><span class="w"></span>
+
+<span class="w">   </span><span class="c1">// Program runtime , e.g., Sleep (2000);</span>
+
+<span class="w">   </span><span class="c1">// Stop the acquisition engine (camera)</span>
+<span class="w">   </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;AcquisitionStop&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">RunCommand</span><span class="p">();</span><span class="w"></span>
+
+<span class="w">   </span><span class="c1">// Stop the capture engine and discard all pending callbacks (API)</span>
+<span class="w">   </span><span class="c1">// Flush the frame queue</span>
+<span class="w">   </span><span class="c1">// Revoke all frames from the API</span>
+<span class="w">   </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">EndCapture</span><span class="w"> </span><span class="p">();</span><span class="w"></span>
+<span class="w">   </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">FlushQueue</span><span class="w"> </span><span class="p">();</span><span class="w"></span>
+<span class="w">   </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">RevokeAllFrames</span><span class="w"> </span><span class="p">();</span><span class="w"></span>
+<span class="w">   </span><span class="k">for</span><span class="p">(</span><span class="w"> </span><span class="n">FramePtrVector</span><span class="o">::</span><span class="n">iterator</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">frames</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span><span class="w"> </span><span class="n">frames</span><span class="p">.</span><span class="n">end</span><span class="p">()</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">iter</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">iter</span><span class="p">)</span><span class="w"></span>
+<span class="w">   </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="c1">// Unregister the frame observer/callback</span>
+<span class="w">      </span><span class="p">(</span><span class="o">*</span><span class="n">iter</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">UnregisterObserver</span><span class="p">();</span><span class="w"></span>
+<span class="w">   </span><span class="p">}</span><span class="w"></span>
+<span class="w">   </span><span class="n">camera</span><span class="o">-&gt;</span><span class="n">Close</span><span class="p">();</span><span class="w"></span>
+<span class="w">   </span><span class="n">sys</span><span class="p">.</span><span class="n">Shutdown</span><span class="p">();</span><span class="w"> </span><span class="c1">// Always pair sys.Startup and sys.Shutdown</span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+</section>
+<section id="image-capture">
+<h4>Image capture<a class="headerlink" href="#image-capture" title="Permalink to this headline"></a></h4>
+<p>To enable image capture, frame buffers must be allocated and the API must be
+prepared for incoming frames. This is done in convenience function
+<code class="docutils literal notranslate"><span class="pre">Camera::StartContinuousAcquisition</span></code> (<code class="docutils literal notranslate"><span class="pre">Camera::StopContinuousAcquisition</span></code>
+stops acquisition). Note that these convenience functions perform all steps
+shown in section <a class="reference internal" href="#image-capture-vs-image-acquisition"><span class="std std-ref">Image Capture vs. Image Acquisition</span></a> for each single image. Therefore, they do not
+provide best performance if your vision application requires frequently
+starting and stopping image acquisition. In this case, it is unnecessary
+to prepare image acquisisition and to clean up for each image. Instead, you
+can prepare image acquisition once, toggle between the start and stop
+functions, and clean up after your images are captured.</p>
+<p>Optionally, you can activate the alloc and announce functionality for more efficient buffer allocation.
+To do this, use the optional parameter /x.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p><strong>CSI-2 cameras only</strong>:</p>
+<p>We recommend using <em>alloc and announce</em>. If you want to use the <em>announce mode</em> with the CSI TL,
+<strong>without using the Convenience functions</strong> <code class="docutils literal notranslate"><span class="pre">AcquireSingleImage()</span></code>, <code class="docutils literal notranslate"><span class="pre">AcquireMultipleImages()</span></code>,
+and <code class="docutils literal notranslate"><span class="pre">StartContinuousImageAcquisition()</span></code>, make sure you pass the <em>StreamBufferAlignment</em>
+within the Frame Constructor.</p>
+</div>
+<p>Asynchronous image capture step by step:</p>
+<ol class="arabic simple">
+<li><p>Open the camera as described in chapter Opening and closing a camera.</p></li>
+<li><p>Query the necessary buffer size through the convenience function <code class="docutils literal notranslate"><span class="pre">VmbPayloadsizeGet()</span></code>.
+Allocate frames of this size.</p></li>
+<li><p>Announce the frames.</p></li>
+<li><p>Start the capture engine.</p></li>
+<li><p>Queue the frame you have just created with <code class="docutils literal notranslate"><span class="pre">Camera::QueueFrame</span></code>, so that
+the buffer can be filled when the acquisition has started.</p></li>
+</ol>
+<p>The API is now ready. Start and stop image acquisition on the camera as
+described in section <a class="reference internal" href="#acquiring-images"><span class="std std-ref">Acquiring images</span></a>.</p>
+<p>Register a frame observer that gets executed when capturing is complete.
+The frame observer has to be of type IFrameObserver. Within the frame
+observer, queue the frame again after you have processed it.</p>
+<ol class="arabic simple" start="7">
+<li><p>Stop the capture engine and discard all pending callbacks with <code class="docutils literal notranslate"><span class="pre">Camera::EndCapture</span></code>.</p></li>
+<li><p>Call <code class="docutils literal notranslate"><span class="pre">Camera::FlushQueue</span></code> to cancel all frames on the queue.
+If the API has done the memory allocation, this memory is not released
+until <code class="docutils literal notranslate"><span class="pre">RevokeAllFrames</span></code>, <code class="docutils literal notranslate"><span class="pre">RevokeFrame</span></code>, <code class="docutils literal notranslate"><span class="pre">EndCapture</span></code>, or
+<code class="docutils literal notranslate"><span class="pre">Close</span></code> functions have been called.</p></li>
+<li><p>Revoke the frames with <code class="docutils literal notranslate"><span class="pre">Camera::RevokeAllFrames</span></code> to clear the buffers.</p></li>
+</ol>
+<p>To synchronously capture images (blocking your execution thread), follow these steps:</p>
+<ol class="arabic simple">
+<li><p>Open the camera as described in section <a class="reference internal" href="#opening-and-closing-a-camera"><span class="std std-ref">Opening and closing a camera</span></a>.</p></li>
+<li><p>How you proceed depends on the number of frames and the performance you need:</p>
+<ul class="simple">
+<li><p>Single frame: You can use the convenience function <code class="docutils literal notranslate"><span class="pre">Camera::AcquireSingleImage</span></code>
+to receive one image frame.</p></li>
+<li><p>Multiple frames: You can use the convenience function
+<code class="docutils literal notranslate"><span class="pre">Camera::AcquireMultipleImages</span></code> to receive several image frames (determined by the
+size of your vector of FramePtrs).</p></li>
+</ul>
+</li>
+</ol>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>If your application requires a low CPU load or exact triggering, we recommend a
+different approach: Set the feature <em>AcquisitionMode</em> to MultiFrame or Continuous
+and run the command <em>AcquisitionStart</em> (see section <a class="reference internal" href="#acquiring-images"><span class="std std-ref">Acquiring images</span></a>).</p>
+</div>
+<p>To assure correct continuous image capture, use at least two or three frames.
+The appropriate number of frames to be queued in your application depends on
+the frames per second the camera delivers and on the speed with which you are
+able to re-queue frames (also taking into consideration the operating
+system load). The image frames are filled in the same order in which they
+were queued.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Always check that <code class="docutils literal notranslate"><span class="pre">Frame::GetReceiveStatus</span></code> returns
+VmbFrameStatusComplete when a frame is returned to ensure
+the data is valid.</p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Functions that must not be called within the frame observer:</p>
+<ul class="simple">
+<li><p>VmbSystem::Startup</p></li>
+<li><p>VmbSystem::Shutdown</p></li>
+<li><p>VmbSystem::OpenCameraByID</p></li>
+<li><p>Camera::Open</p></li>
+<li><p>Camera::Close</p></li>
+<li><p>Camera::AcquireSingleImage</p></li>
+<li><p>Camera::AcquireMultipleImages</p></li>
+<li><p>Camera::StartContinuousImageAcquisition</p></li>
+<li><p>Camera::StopContinuousImageAcquisition</p></li>
+<li><p>Camera::StartCapture</p></li>
+<li><p>Camera::EndCapture</p></li>
+<li><p>Camera::AnnounceFrame</p></li>
+<li><p>Camera::RevokeFrame</p></li>
+<li><p>Stream::Open</p></li>
+<li><p>Stream::Close</p></li>
+<li><p>Stream::AcquireSingleImage</p></li>
+<li><p>Stream::AcquireMultipleImages</p></li>
+<li><p>Stream::StartCapture</p></li>
+<li><p>Stream::EndCapture</p></li>
+<li><p>Stream::AnnounceFrame</p></li>
+<li><p>Stream::RevokeFrame</p></li>
+<li><p>Stream::RevokeAllFrames</p></li>
+</ul>
+</div>
+</section>
+<section id="image-acquisition">
+<h4>Image Acquisition<a class="headerlink" href="#image-acquisition" title="Permalink to this headline"></a></h4>
+<p>If you have decided to use one of the convenience functions
+<code class="docutils literal notranslate"><span class="pre">Camera::AcquireSingleImage</span></code>, <code class="docutils literal notranslate"><span class="pre">Camera::AcquireMultipleImages</span></code>, or
+<code class="docutils literal notranslate"><span class="pre">Camera::StartContinuousImageAcquisition</span></code>, no further actions are necessary.</p>
+<p>Only if you have setup capture step by step as described in section
+<a class="reference internal" href="#image-capture"><span class="std std-ref">Image capture</span></a>, you have to start image acquisition on your camera:</p>
+<ol class="arabic simple">
+<li><p>Set the feature <em>AcquisitionMode</em> (for example, to Continuous).</p></li>
+<li><p>Run the command <em>AcquisitionStart</em>.</p></li>
+</ol>
+<p>To stop image acquisition, run command <em>AcquisitionStop</em>.
+The code snippet below shows a simplified streaming example
+without error handling.</p>
+<div class="literal-block-wrapper docutils container" id="id17">
+<div class="code-block-caption"><span class="caption-text">Image streaming code snippet</span><a class="headerlink" href="#id17" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">VmbErrorType</span><span class="w"> </span><span class="n">err</span><span class="p">;</span><span class="w">           </span><span class="c1">// Every Vimba X function returns an error code that</span>
+<span class="w">                            </span><span class="c1">// should always be checked for VmbErrorSuccess</span>
+<span class="n">VmbSystem</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sys</span><span class="p">;</span><span class="w">             </span><span class="c1">// A reference to the VmbSystem singleton</span>
+<span class="n">CameraPtrVector</span><span class="w"> </span><span class="n">cameras</span><span class="p">;</span><span class="w">    </span><span class="c1">// A list of known cameras</span>
+<span class="n">FramePtrVector</span><span class="w"> </span><span class="nf">frames</span><span class="p">(</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// A list of frames for streaming. We chose</span>
+<span class="w">                            </span><span class="c1">// to queue 3 frames.</span>
+<span class="n">IFrameObserverPtr</span><span class="w"> </span><span class="nf">pObserver</span><span class="p">(</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">MyFrameObserver</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// Our implementation</span>
+<span class="w">                                                       </span><span class="c1">// of a frame observer</span>
+<span class="n">FeaturePtr</span><span class="w"> </span><span class="n">pFeature</span><span class="p">;</span><span class="w">        </span><span class="c1">// Any camera feature</span>
+<span class="n">VmbInt64_t</span><span class="w"> </span><span class="n">nPLS</span><span class="p">;</span><span class="w">            </span><span class="c1">// The payload size of one frame</span>
+
+<span class="n">sys</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbSystem</span><span class="o">::</span><span class="n">GetInstance</span><span class="w"> </span><span class="p">();</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sys</span><span class="p">.</span><span class="n">Startup</span><span class="w"> </span><span class="p">()</span><span class="o">:</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sys</span><span class="p">.</span><span class="n">GetCameras</span><span class="p">(</span><span class="w"> </span><span class="n">cameras</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">Open</span><span class="p">(</span><span class="w"> </span><span class="n">VmbAccessModeFull</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-&gt;</span><span class="w"> </span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;VmbPayloadsizeGet&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="p">(</span><span class="n">A</span><span class="p">)</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="o">-&gt;</span><span class="n">GetValue</span><span class="p">(</span><span class="w"> </span><span class="n">nPLS</span><span class="w"> </span><span class="p">)</span><span class="w">                                      </span><span class="p">(</span><span class="n">A</span><span class="p">)</span><span class="w"></span>
+
+<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">FramePtrVector</span><span class="o">::</span><span class="n">iterator</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">frames</span><span class="p">.</span><span class="n">begin</span><span class="w"> </span><span class="p">();</span><span class="w"></span>
+<span class="w">      </span><span class="n">frames</span><span class="p">.</span><span class="n">end</span><span class="p">()</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">iter</span><span class="p">;</span><span class="w"></span>
+<span class="w">      </span><span class="o">++</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">).</span><span class="n">reset</span><span class="p">(</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Frame</span><span class="p">(</span><span class="w"> </span><span class="n">nPLS</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">);</span><span class="w">                              </span><span class="p">(</span><span class="n">B</span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="o">-&gt;</span><span class="n">RegisterObserver</span><span class="p">(</span><span class="w"> </span><span class="n">pObserver</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">);</span><span class="w">                  </span><span class="p">(</span><span class="n">C</span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-&gt;</span><span class="w"> </span><span class="n">AnnounceFrame</span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">);</span><span class="w">                         </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-&gt;</span><span class="w"> </span><span class="n">StartCapture</span><span class="p">();</span><span class="w">                                     </span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="w"></span>
+
+<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">FramePtrVector</span><span class="w"> </span><span class="o">::</span><span class="w"> </span><span class="n">iterator</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">frames</span><span class="p">.</span><span class="n">begin</span><span class="w"> </span><span class="p">();</span><span class="w"></span>
+<span class="w">      </span><span class="n">frames</span><span class="p">.</span><span class="n">end</span><span class="p">()</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">iter</span><span class="p">;</span><span class="w"></span>
+<span class="w">      </span><span class="o">++</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">QueueFrame</span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">);</span><span class="w">                           </span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;AcquisitionStart&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w">                </span><span class="p">(</span><span class="mi">4</span><span class="p">)</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="o">-&gt;</span><span class="n">RunCommand</span><span class="p">();</span><span class="w">                                         </span><span class="p">(</span><span class="mi">4</span><span class="p">)</span><span class="w"></span>
+
+<span class="c1">// Program runtime ...</span>
+<span class="c1">// When finished , tear down the acquisition chain , close camera and API</span>
+
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;AcquisitionStop&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="o">-&gt;</span><span class="n">RunCommand</span><span class="p">();</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-&gt;</span><span class="w"> </span><span class="n">EndCapture</span><span class="p">();</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-&gt;</span><span class="w"> </span><span class="n">FlushQueue</span><span class="p">();</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-&gt;</span><span class="w"> </span><span class="n">RevokeAllFrames</span><span class="p">();</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">Close</span><span class="p">();</span><span class="w"></span>
+<span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sys</span><span class="p">.</span><span class="n">Shutdown</span><span class="p">();</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+</section>
+</section>
+<section id="transforming-images">
+<h3>Transforming images<a class="headerlink" href="#transforming-images" title="Permalink to this headline"></a></h3>
+<p>To transform images received via the API into
+common image formats, use the Image Transform Library.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a quick start, see the <em>AsynchrounousGrab</em> example,</p>
+</div>
+</section>
+<section id="using-events">
+<span id="index-17"></span><h3>Using Events<a class="headerlink" href="#using-events" title="Permalink to this headline"></a></h3>
+<p>Events serve a multitude of purposes and can have several origins such as
+VmbSystem,Interface, and Cameras</p>
+<p>In the C++ API, notifications are issued as a result to a feature invalidation
+of either its value or its state. Consequently, to get notified about any
+feature change, register an observer of the desired type
+(<code class="docutils literal notranslate"><span class="pre">ICameraListObserver</span></code>, <code class="docutils literal notranslate"><span class="pre">IInterfaceListObserver</span></code>, or <code class="docutils literal notranslate"><span class="pre">IFeatureObserver</span></code>)
+with the appropriate RegisterXXXObserver method (<code class="docutils literal notranslate"><span class="pre">RegisterCameraListObserver</span></code>,
+<code class="docutils literal notranslate"><span class="pre">RegisterInterfaceListObserver</span></code>, or <code class="docutils literal notranslate"><span class="pre">RegisterObserver</span></code>), which gets called
+if there is a change to that feature.</p>
+<p>Three examples are listed in this chapter:</p>
+<ul class="simple">
+<li><p>Camera list notifications</p></li>
+<li><p>Tracking invalidations of features</p></li>
+<li><p>Explicit camera event features</p></li>
+</ul>
+<p>For camera list notifications, see the code snippet below:</p>
+<div class="literal-block-wrapper docutils container" id="id18">
+<span id="index-18"></span><div class="code-block-caption"><span class="caption-text">Getting notified about camera list changes</span><a class="headerlink" href="#id18" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="c1">// 1. define observer that reacts on camera list changes</span>
+<span class="k">class</span><span class="w"> </span><span class="nc">CamObserver</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">ICameraListObserver</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="p">...</span><span class="w"></span>
+<span class="k">public</span><span class="o">:</span><span class="w"></span>
+<span class="w">    </span><span class="kt">void</span><span class="w"> </span><span class="n">CameraListChanged</span><span class="p">(</span><span class="w"> </span><span class="n">CameraPtr</span><span class="w"> </span><span class="n">pCam</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="n">UpdateTriggerType</span><span class="w"> </span><span class="n">reason</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">        </span><span class="c1">// Next to the camera pointer a reason why the observer&#39;s function was triggered</span>
+<span class="w">        </span><span class="c1">// is passed in. Possible values are:</span>
+<span class="w">        </span><span class="c1">// UpdateTriggerPluggedIn (0), a new camera was discovered</span>
+<span class="w">        </span><span class="c1">// UpdateTriggerPluggedOut (1), a known camera disappeared from the bus</span>
+<span class="w">        </span><span class="c1">// UpdateTriggerOpenStateChanged (3), a known camera was opened or closed</span>
+<span class="w">        </span><span class="c1">// by another application</span>
+<span class="w">        </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">UpdateTriggerPluggedIn</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">reason</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">UpdateTriggerPluggedOut</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">reason</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">        </span><span class="p">{</span><span class="w"></span>
+<span class="w">            </span><span class="c1">// Put your code here to react on the changed camera list</span>
+<span class="w">            </span><span class="c1">// E.g., by sending a Windows event message or</span>
+<span class="w">            </span><span class="c1">// triggering a Qt or boost signal to update your view</span>
+<span class="w">        </span><span class="p">}</span><span class="w"></span>
+<span class="w">        </span><span class="k">else</span><span class="w"></span>
+<span class="w">        </span><span class="p">{</span><span class="w"></span>
+<span class="w">            </span><span class="c1">// React on a changed open state</span>
+<span class="w">        </span><span class="p">}</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="p">};</span><span class="w"></span>
+
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="n">VmbErrorType</span><span class="w"> </span><span class="n">res</span><span class="p">;</span><span class="w"></span>
+<span class="w">    </span><span class="n">VmbSystem</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sys</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbSystem</span><span class="o">::</span><span class="n">GetInstance</span><span class="p">();</span><span class="w"></span>
+<span class="w">    </span><span class="n">FeaturePtr</span><span class="w"> </span><span class="n">pFeature</span><span class="p">;</span><span class="w"></span>
+
+<span class="w">    </span><span class="c1">// 2. Register the observer; automatic discovery for GigE is turned on</span>
+<span class="w">    </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sys</span><span class="p">.</span><span class="n">RegisterCameraListObserver</span><span class="p">(</span><span class="w"> </span><span class="n">ICameraListObserverPtr</span><span class="p">(</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">CamObserver</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<div class="literal-block-wrapper docutils container" id="id19">
+<span id="index-19"></span><div class="code-block-caption"><span class="caption-text">Getting notified about feature list changes</span><a class="headerlink" href="#id19" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="c1">// 1. define observer</span>
+<span class="k">class</span><span class="w"> </span><span class="nc">WidthObserver</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">IFeatureObserver</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="p">...</span><span class="w"></span>
+<span class="k">public</span><span class="o">:</span><span class="w"></span>
+<span class="w">  </span><span class="kt">void</span><span class="w"> </span><span class="n">FeatureChanged</span><span class="p">(</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">FeaturePtr</span><span class="w"> </span><span class="o">&amp;</span><span class="n">feature</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">   </span><span class="p">{</span><span class="w"></span>
+<span class="w">     </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">feature</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">     </span><span class="p">{</span><span class="w"></span>
+<span class="w">       </span><span class="n">VmbError_t</span><span class="w"> </span><span class="n">res</span><span class="p">;</span><span class="w"></span>
+<span class="w">       </span><span class="n">std</span><span class="o">::</span><span class="w"> </span><span class="n">string</span><span class="w"> </span><span class="n">strName</span><span class="p">(</span><span class="s">&quot;&quot;</span><span class="p">);</span><span class="w"></span>
+<span class="w">       </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">feature</span><span class="o">-&gt;</span><span class="n">GetDisplayName</span><span class="p">(</span><span class="n">strName</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">       </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">strName</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; changed&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">     </span><span class="p">}</span><span class="w"></span>
+<span class="w">   </span><span class="p">}</span><span class="w"></span>
+<span class="p">};</span><span class="w"></span>
+
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="p">...</span><span class="w"></span>
+<span class="w">    </span><span class="c1">// 2. register the observer for the camera event</span>
+<span class="w">    </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;EventAcquisitionStart&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">    </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">RegisterObserver</span><span class="p">(</span><span class="w"> </span><span class="n">IFeatureObserverPtr</span><span class="p">(</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">EventObserver</span><span class="p">()</span><span class="w"> </span><span class="p">));</span><span class="w"></span>
+
+<span class="w">    </span><span class="c1">// 3. select &quot;AcquisitionStart&quot; (or a different) event</span>
+<span class="w">    </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;EventSelector&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">    </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;AcquisitionStart&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="w">    </span><span class="c1">// 4. switch on the event notification (or switch it off with &quot;Off&quot;)</span>
+<span class="w">    </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;EventNotification&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">    </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;On&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<div class="literal-block-wrapper docutils container" id="id20">
+<span id="index-20"></span><div class="code-block-caption"><span class="caption-text">Getting notified about camera events</span><a class="headerlink" href="#id20" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="c1">// 1. define observer</span>
+<span class="k">class</span><span class="w"> </span><span class="nc">EventObserver</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">IFeatureObserver</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="p">...</span><span class="w"></span>
+<span class="k">public</span><span class="o">:</span><span class="w"></span>
+<span class="w">  </span><span class="kt">void</span><span class="w"> </span><span class="n">FeatureChanged</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">FeaturePtr</span><span class="w"> </span><span class="o">&amp;</span><span class="n">feature</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">  </span><span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">feature</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">      </span><span class="n">VmbError_t</span><span class="w"> </span><span class="n">res</span><span class="p">;</span><span class="w"></span>
+<span class="w">      </span><span class="n">std</span><span class="o">::</span><span class="w"> </span><span class="n">string</span><span class="w"> </span><span class="n">strName</span><span class="p">(</span><span class="s">&quot;&quot;</span><span class="p">);</span><span class="w"></span>
+
+<span class="w">      </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">feature</span><span class="w"> </span><span class="o">-&gt;</span><span class="n">GetDisplayName</span><span class="p">(</span><span class="n">strName</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">      </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="s">&quot;Event &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">strName</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; occurred&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="w">  </span><span class="p">};</span><span class="w"></span>
+
+<span class="p">{</span><span class="w"></span>
+<span class="w">  </span><span class="p">...</span><span class="w"></span>
+<span class="w">  </span><span class="c1">// 2. register the observer for the camera event</span>
+<span class="w">  </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;EventAcquisitionStart&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">  </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="o">-&gt;</span><span class="n">RegisterObserver</span><span class="p">(</span><span class="w"> </span><span class="n">IFeatureObserverPtr</span><span class="p">(</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">EventObserver</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">));</span><span class="w"></span>
+
+<span class="w">  </span><span class="c1">// 3. select &quot;AcquisitionStart&quot; (or a different) event</span>
+<span class="w">  </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;EventSelector&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">  </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;AcquisitionStart&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="w">  </span><span class="c1">// 4. switch on the event notification (or switch it off with &quot;Off&quot;)</span>
+<span class="w">  </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;EventNotification&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">  </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;On&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+</section>
+<section id="chunk">
+<span id="index-21"></span><h3>Chunk<a class="headerlink" href="#chunk" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>To use the <em>chunk</em> feature, make sure your camera supports it.</p>
+</div>
+<p>Chunk data are image metadata such as the exposure time that are available in the Frame.
+To activate chunk, see the user documentation of your camera.</p>
+<p>To access the chunk feature, call <code class="docutils literal notranslate"><span class="pre">Frame::AccessChunkData()</span></code>
+from <code class="docutils literal notranslate"><span class="pre">FrameObserver::FrameReceived()</span></code>.
+Within this function, you can access chunk features via the FeatureContainerPtr.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>See the <em>ChunkAccess</em> example.</p>
+</div>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For user defined error codes, see the code snippet in section
+<a class="reference internal" href="cAPIManual.html#chunk"><span class="std std-ref">Chunk</span></a> in the C API Manual.</p>
+</div>
+<span class="target" id="index-22"></span></section>
+<section id="saving-and-loading-settings">
+<span id="index-23"></span><h3>Saving and loading settings<a class="headerlink" href="#saving-and-loading-settings" title="Permalink to this headline"></a></h3>
+<p>Additionally to the user sets stored inside the cameras, you can save the
+feature values of the GenTL modules as an XML file to your host PC.</p>
+<div class="literal-block-wrapper docutils container" id="id21">
+<div class="code-block-caption"><span class="caption-text">Saving and loading settings</span><a class="headerlink" href="#id21" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">VmbSystem</span><span class="w"> </span><span class="o">&amp;</span><span class="n">system</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbSystem</span><span class="o">::</span><span class="n">GetInstance</span><span class="w"> </span><span class="p">();</span><span class="w"></span>
+<span class="n">CameraPtrVector</span><span class="w"> </span><span class="n">cameras</span><span class="p">;</span><span class="w"></span>
+
+<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">system</span><span class="p">.</span><span class="n">Startup</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">system</span><span class="p">.</span><span class="n">GetCameras</span><span class="p">(</span><span class="w"> </span><span class="n">cameras</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">cameras</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"></span>
+<span class="w">        </span><span class="p">{</span><span class="w"></span>
+<span class="w">            </span><span class="n">CameraPtr</span><span class="w"> </span><span class="n">cam</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cameras</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"></span>
+<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">cam</span><span class="o">-&gt;</span><span class="n">Open</span><span class="p">(</span><span class="n">VmbAccessModeFull</span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">            </span><span class="p">{</span><span class="w"></span>
+<span class="w">                </span><span class="n">std</span><span class="o">::</span><span class="n">filesystem</span><span class="o">::</span><span class="n">path</span><span class="w"> </span><span class="nf">xmlFile</span><span class="p">(</span><span class="s">&quot;camera_0_settings.xml&quot;</span><span class="p">);</span><span class="w"></span>
+<span class="w">                </span><span class="n">VmbFeaturePersistSettings_t</span><span class="w"> </span><span class="n">settingsStruct</span><span class="p">;</span><span class="w"></span>
+<span class="w">                </span><span class="n">settingsStruct</span><span class="p">.</span><span class="n">loggingLevel</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"></span>
+<span class="w">                </span><span class="n">settingsStruct</span><span class="p">.</span><span class="n">maxIterations</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span><span class="w"></span>
+<span class="w">                </span><span class="n">settingsStruct</span><span class="p">.</span><span class="n">persistType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbFeaturePersistNoLUT</span><span class="p">;</span><span class="w"></span>
+<span class="w">                </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">pCam</span><span class="o">-&gt;</span><span class="n">SaveSettings</span><span class="p">(</span><span class="w"> </span><span class="n">xmlFile</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">settingsStruct</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">                </span><span class="p">{</span><span class="w"></span>
+<span class="w">                    </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Could not save camera settings to &#39;&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">xmlFile</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;&#39;&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">                </span><span class="p">}</span><span class="w"></span>
+<span class="w">                </span><span class="n">cam</span><span class="o">-&gt;</span><span class="n">Close</span><span class="p">();</span><span class="w"></span>
+<span class="w">            </span><span class="p">}</span><span class="w"></span>
+<span class="w">        </span><span class="p">}</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="w">    </span><span class="n">system</span><span class="p">.</span><span class="n">Shutdown</span><span class="p">();</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+<p>Logging levels:</p>
+<ul class="simple">
+<li><p>0: Info only</p></li>
+<li><p>1: With errors</p></li>
+<li><p>2: With warnings</p></li>
+<li><p>3: Debug</p></li>
+<li><p>4: Trace</p></li>
+</ul>
+<p>Iterations: Several iterations may be needed to catch all feature dependencies
+(compare desired value with camera value and write it to camera).</p>
+<p>To control which features are saved, see the C API Manual, chapter <a class="reference internal" href="cAPIManual.html#saving-and-loading-settings"><span class="std std-ref">Saving and loading settings</span></a>.</p>
+</section>
+<section id="triggering">
+<h3>Triggering<a class="headerlink" href="#triggering" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Before triggering, startup the API and open the camera(s).</p>
+</div>
+<section id="external-trigger">
+<h4>External trigger<a class="headerlink" href="#external-trigger" title="Permalink to this headline"></a></h4>
+<p id="index-24">The following code snippet shows how to trigger your camera with an
+external device.</p>
+<div class="literal-block-wrapper docutils container" id="id22">
+<div class="code-block-caption"><span class="caption-text">External trigger code snippet</span><a class="headerlink" href="#id22" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="c1">// Startup the API, get cameras and open cameras as usual</span>
+<span class="c1">// Trigger cameras according to their interface</span>
+<span class="c1">// Configure trigger input line and selector , switch trigger on</span>
+<span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="o">-&gt;</span><span class="n">GetInterfaceType</span><span class="p">(</span><span class="w"> </span><span class="n">pinterface</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="k">switch</span><span class="p">(</span><span class="w"> </span><span class="n">pinterface</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">   </span><span class="k">case</span><span class="w"> </span><span class="nl">VmbInterfaceEthernet</span><span class="p">:</span><span class="w"></span>
+<span class="w">   </span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;TriggerSelector&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;FrameStart&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;TriggerSource&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Line1&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;TriggerMode&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;On&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="k">break</span><span class="p">;</span><span class="w"></span>
+
+<span class="w">   </span><span class="c1">// USB: VmbInterfaceUsb</span>
+<span class="w">   </span><span class="c1">// CSI-2: VmbInterfaceCSI2</span>
+
+<span class="w">   </span><span class="k">case</span><span class="w"> </span><span class="nl">VmbInterfaceUsb</span><span class="p">:</span><span class="w"></span>
+<span class="w">   </span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;LineSelector&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Line0&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;LineMode&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Input&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;TriggerSource&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;Line0&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="p">(</span><span class="w"> </span><span class="o">*</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="o">-&gt;</span><span class="n">GetFeatureByName</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;TriggerMode&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pFeature</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="n">pFeature</span><span class="o">-&gt;</span><span class="n">SetValue</span><span class="p">(</span><span class="w"> </span><span class="s">&quot;On&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="w">   </span><span class="k">break</span><span class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+</section>
+</section>
+<section id="listing-interfaces">
+<span id="index-25"></span><h3>Listing interfaces<a class="headerlink" href="#listing-interfaces" title="Permalink to this headline"></a></h3>
+<p>You can list all found interfaces such as frame grabbers or NICs.
+<code class="docutils literal notranslate"><span class="pre">VmbSystem::GetInterfaces</span></code> enumerates all interfaces recognized by
+the underlying transport layers.</p>
+<blockquote>
+<div><div class="literal-block-wrapper docutils container" id="id23">
+<div class="code-block-caption"><span class="caption-text">Get interfaces code snippet</span><a class="headerlink" href="#id23" title="Permalink to this code"></a></div>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">std</span><span class="o">::</span><span class="w"> </span><span class="n">string</span><span class="w"> </span><span class="n">name</span><span class="p">;</span><span class="w"></span>
+<span class="n">InterfacePtrVector</span><span class="w"> </span><span class="n">interfaces</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbSystem</span><span class="w"> </span><span class="o">&amp;</span><span class="n">system</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbSystem</span><span class="o">::</span><span class="n">GetInstance</span><span class="p">();</span><span class="w"></span>
+
+<span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">system</span><span class="p">.</span><span class="n">Startup</span><span class="p">()</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">system</span><span class="p">.</span><span class="n">GetInterfaces</span><span class="p">(</span><span class="w"> </span><span class="n">interfaces</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">        </span><span class="k">for</span><span class="p">(</span><span class="w"> </span><span class="n">InterfacePtrVector</span><span class="o">::</span><span class="n">iterator</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">interfaces</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span><span class="w"></span>
+<span class="w">              </span><span class="n">interfaces</span><span class="p">.</span><span class="n">end</span><span class="p">()</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">iter</span><span class="p">;</span><span class="w"></span>
+<span class="w">              </span><span class="o">++</span><span class="n">iter</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">        </span><span class="p">{</span><span class="w"></span>
+<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">iter</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">GetName</span><span class="p">(</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w">            </span><span class="p">{</span><span class="w"></span>
+<span class="w">                </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">            </span><span class="p">}</span><span class="w"></span>
+<span class="w">        </span><span class="p">}</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+</div>
+</div></blockquote>
+<p>The Interface class provides the member functions to obtain information
+about an interface listed in the following table.</p>
+<span id="index-26"></span><table class="docutils align-default" id="id24">
+<caption><span class="caption-text">Basic functions of the Interface class</span><a class="headerlink" href="#id24" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 61%" />
+<col style="width: 39%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function (returning   VmbErrorType)</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>GetID( std::string&amp; ) const</p></td>
+<td><p>The unique ID</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetName( std::string&amp; ) const The name</p></td>
+<td><p>The name</p></td>
+</tr>
+<tr class="row-even"><td><p>GetType( VmbInterfaceType&amp; ) const</p></td>
+<td><p>The camera interface type</p></td>
+</tr>
+<tr class="row-odd"><td><p>GetSerialNumber( std::string&amp; ) const</p></td>
+<td><p>The serial number (not in use)</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="error-codes">
+<h3>Error codes<a class="headerlink" href="#error-codes" title="Permalink to this headline"></a></h3>
+<p>For error codes and other technical issues, see <a class="reference internal" href="troubleshooting.html"><span class="doc">Troubleshooting</span></a>.</p>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="cAPIManual.html" class="btn btn-neutral float-left" title="C API Manual" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="pythonAPIManual.html" class="btn btn-neutral float-right" title="Python API Manual" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/driverInstaller.html b/VimbaX/doc/VimbaX_Documentation/driverInstaller.html
new file mode 100644
index 0000000000000000000000000000000000000000..824d11ba4e4c9aa08f7929e8d89dd3e45909fe86
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/driverInstaller.html
@@ -0,0 +1,382 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Driver Installer Manual &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Firmware Updater Manual" href="fwUpdater.html" />
+    <link rel="prev" title="Examples Overview" href="examplesOverview.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Driver Installer Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#main-window">Main window</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#changing-drivers">Changing drivers</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#incompatibility-message">Incompatibility message</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#command-line-options">Command line options</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Driver Installer Manual</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="driver-installer-manual">
+<h1>Driver Installer Manual<a class="headerlink" href="#driver-installer-manual" title="Permalink to this headline"></a></h1>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Vimba X Driver Installer is available for Windows only. To install the
+CSI-2 camera driver for your ARM board, go to <a class="reference external" href="https://github.com/alliedvision">GitHub</a>.</p>
+</div>
+<p>Vimba X Driver Installer is a tool to easily install the Vimba GigE Filter Driver and the
+Windows driver for Allied Vision USB cameras. Although the same
+functionality can be achieved with the Windows device manager or
+through the network settings, Vimba X Driver Installer provides
+a more convenient way to select the correct driver for your
+Allied Vision camera.</p>
+<section id="main-window">
+<h2>Main window<a class="headerlink" href="#main-window" title="Permalink to this headline"></a></h2>
+<p>Upon startup, the Driver Installer examines the current hardware configuration, which may take a while.
+After the necessary information is collected, the main window is shown.</p>
+<figure class="align-default">
+<a class="reference internal image-reference" href="_images/driverInst_1.PNG"><img alt="Driver Installer" src="_images/driverInst_1.PNG" style="width: 600px;" /></a>
+</figure>
+<p>The main window lists:</p>
+<ul class="simple">
+<li><p>Installed network adapters</p></li>
+<li><p>Connected USB cameras</p></li>
+</ul>
+<p>If your camera interface is not listed or the application closes with
+an error message, install a suitable NIC or connect your USB camera.
+All adapters are listed with their name and their physical location in the PC.</p>
+<ul class="simple">
+<li><p>GigE: To easily identify a network adapter, its MAC address and
+IP address are shown in a tool tip.</p></li>
+<li><p>USB: The camera serial number is shown under Location.</p></li>
+</ul>
+<p>The <em>Driver Source</em> column displays the origin of the currently installed
+driver comes from (for example, this SDK).
+The <em>Actions</em> panel shows the actions to be performed by the
+Driver Installer if the <span class="guilabel">Apply</span> button is
+clicked. It is initially empty.</p>
+</section>
+<section id="changing-drivers">
+<h2>Changing drivers<a class="headerlink" href="#changing-drivers" title="Permalink to this headline"></a></h2>
+<p>Changing individual driver settings does not take effect instantly. Instead, the changes are queued as
+Actions in the panel on the right side of the screen. They are executed when the Apply button is clicked.
+To change the driver for host adapters or cameras, select its tab (e.g., Network Adapter or USB3 Vision
+Cameras) whose driver you want to install or change. This can be done by three different methods:</p>
+<ul class="simple">
+<li><p>Click the button in the column Driver Source of the corresponding host adapter or camera and
+select an entry from the popup menu, or</p></li>
+<li><p>Right-click anywhere in the row of the corresponding host adapter or camera and select an entry
+from the popup menu, or</p></li>
+<li><p>Select a host adapter or a camera by clicking in the corresponding row and choose an entry from
+the Install Driver menu.</p></li>
+</ul>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>Vimba X Driver Installer supports multi-selection of adapters or cameras: On your
+keyboard, press <span class="guilabel">Ctrl</span> + <span class="guilabel">A</span> or hold down the
+<span class="guilabel">Shift</span> or <span class="guilabel">Ctrl</span> key while clicking.</p>
+</div>
+<p>The list items are determined at startup. Additionally, one item is
+added to each list that can be used to remove the Allied Vision driver from
+the adapter or camera: &lt;disable Allied Vision filter driver&gt; for network
+adapters and &lt;remove Allied Vision driver&gt; for USB cameras.</p>
+<p>After selecting a new driver source, one or more actions to be performed by
+Vimba X Driver Installer are added to the right panel. The corresponding adapters
+or cameras are disabled, so you can not add a
+second action for the same adapter or camera.</p>
+<p>To undo your selections, click <span class="guilabel">Clear</span>.</p>
+<section id="incompatibility-message">
+<h3>Incompatibility message<a class="headerlink" href="#incompatibility-message" title="Permalink to this headline"></a></h3>
+<p>Some Allied Vision drivers are not compatible with all installed Allied Vision
+SDKs. When this is detected, an Incompatibility error message is shown.</p>
+<p>If you click <span class="guilabel">Yes</span> in the dialog, additional actions will be added to install the driver
+of the new SDK on the other adapters, too. If you click <span class="guilabel">No</span>, the action
+will be removed.</p>
+<p>To start the installation, click <span class="guilabel">Apply</span>. During the
+installation, which may take a while, the operating system might bring up
+other windows asking for permission to install the driver. The result
+of each action is displayed by a small icon in front of the action.</p>
+</section>
+</section>
+<section id="command-line-options">
+<h2>Command line options<a class="headerlink" href="#command-line-options" title="Permalink to this headline"></a></h2>
+<p>Vimba X Driver Installer can either be used in interactive mode or perform a
+single task without showing a graphical user interface (GUI). The syntax
+for starting the application is:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">VimbaDriverInstaller</span><span class="o">.</span><span class="n">exe</span> <span class="p">[</span><span class="n">command</span><span class="p">]</span> <span class="p">[</span><span class="n">options</span><span class="p">]</span>
+</pre></div>
+</div>
+<p>The following commands are available:</p>
+<table class="docutils align-default" id="id1">
+<caption><span class="caption-text">Driver Installer commands</span><a class="headerlink" href="#id1" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 9%" />
+<col style="width: 65%" />
+<col style="width: 26%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Command</p></th>
+<th class="head"><p>Description</p></th>
+<th class="head"><p>Mandatory options</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>help</p></td>
+<td><p>Displays infos about the usage of Vimba X Driver Installer</p></td>
+<td><p>none</p></td>
+</tr>
+<tr class="row-odd"><td><p>info</p></td>
+<td><p>Displays infos about installed Allied Vision <br>
+products and hardware.</p></td>
+<td><p>none</p></td>
+</tr>
+<tr class="row-even"><td><p>add</p></td>
+<td><p>Adds a driver of an Allied Vision product to the driver store.</p></td>
+<td><p>/product</p></td>
+</tr>
+<tr class="row-odd"><td><p>remove</p></td>
+<td><p>Removes an Allied Vision driver</p></td>
+<td><p>/product</p></td>
+</tr>
+<tr class="row-even"><td><p>exists</p></td>
+<td><p>Checks whether the given Allied Vision product is <br>
+installed. Returns 0 if found, otherwise see return code table.</p></td>
+<td><p>/product</p></td>
+</tr>
+<tr class="row-odd"><td><p>install</p></td>
+<td><p>Installs a driver of an Allied Vision product on <br>
+a given adapters or cameras</p></td>
+<td><p>/product and <br>
+/deviceType</p></td>
+</tr>
+</tbody>
+</table>
+<p>The following options are available:</p>
+<table class="docutils align-default" id="id2">
+<caption><span class="caption-text">Driver Installer options</span><a class="headerlink" href="#id2" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 34%" />
+<col style="width: 66%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Option</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>/l filename</p></td>
+<td><p>Log trace messages into the given file..</p></td>
+</tr>
+<tr class="row-odd"><td><p>/product upgradeCode</p></td>
+<td><p>Identifies a product by its upgrade code.</p></td>
+</tr>
+<tr class="row-even"><td><p>/product productNameAndVersion</p></td>
+<td><p>Identifies a product by its name and version</p></td>
+</tr>
+<tr class="row-odd"><td><p>/deviceType deviceTypeName</p></td>
+<td><p>Identifies the hardware device by device class</p></td>
+</tr>
+<tr class="row-even"><td><p>/force</p></td>
+<td><p>Force removal (even if in use), valid for  remove only. <br>
+Might require a reboot.</p></td>
+</tr>
+<tr class="row-odd"><td><p>/hidden</p></td>
+<td><p>Disable output to console window.</p></td>
+</tr>
+<tr class="row-even"><td><p>/adjustMaxFilterDriverNums</p></td>
+<td><p>Automatically adjust number of installed filter drivers <br>
+Valid only for “install” command and NICs.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>Use the <cite>info</cite> command to find out the upgrade codes or exact names and
+versions for installed Allied Vision products.</p>
+</div>
+<p>If started without parameters, the application is displayed in interactive mode with GUI.
+The following table lists the return code when started in silent mode:</p>
+<table class="docutils align-default" id="id3">
+<caption><span class="caption-text">Driver Installer options</span><a class="headerlink" href="#id3" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 16%" />
+<col style="width: 84%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Return code</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>1</p></td>
+<td><p>Success, reboot required.</p></td>
+</tr>
+<tr class="row-odd"><td><p>0</p></td>
+<td><p>Success</p></td>
+</tr>
+<tr class="row-even"><td><p>-1</p></td>
+<td><p>Unknown error.</p></td>
+</tr>
+<tr class="row-odd"><td><p>-2</p></td>
+<td><p>Unknown command.</p></td>
+</tr>
+<tr class="row-even"><td><p>-10</p></td>
+<td><p>Given device not found.</p></td>
+</tr>
+<tr class="row-odd"><td><p>-11</p></td>
+<td><p>At least one device must be specified for this command.</p></td>
+</tr>
+<tr class="row-even"><td><p>-12</p></td>
+<td><p>Exactly one device must be specified for this command.</p></td>
+</tr>
+<tr class="row-odd"><td><p>-13</p></td>
+<td><p>Given device cannot be modified, because it is in use.</p></td>
+</tr>
+<tr class="row-even"><td><p>-20</p></td>
+<td><p>Given product not found.</p></td>
+</tr>
+<tr class="row-odd"><td><p>-21</p></td>
+<td><p>At least one product must be specified for this command.</p></td>
+</tr>
+<tr class="row-even"><td><p>-22</p></td>
+<td><p>Exactly one product must be specified for this command.</p></td>
+</tr>
+<tr class="row-odd"><td><p>-23</p></td>
+<td><p>Given product cannot be removed, it is in use.</p></td>
+</tr>
+<tr class="row-even"><td><p>-24</p></td>
+<td><p>Given product is not found in the driver store.</p></td>
+</tr>
+<tr class="row-odd"><td><p>-25</p></td>
+<td><p>Given product is not installed on the given device.</p></td>
+</tr>
+<tr class="row-even"><td><p>-1001</p></td>
+<td><p>Network configuration system locked by another application. <br>
+Terminate all other applications, run the Driver Installer again.</p></td>
+</tr>
+<tr class="row-odd"><td><p>-1002</p></td>
+<td><p>Reached maximum number of installed network filter drivers. <br>
+Use the “adjustMaxFilterDriverNums” option or remove a <br>
+filter driver by uninstalling the corresponding application.</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="examplesOverview.html" class="btn btn-neutral float-left" title="Examples Overview" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="fwUpdater.html" class="btn btn-neutral float-right" title="Firmware Updater Manual" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/examplesOverview.html b/VimbaX/doc/VimbaX_Documentation/examplesOverview.html
new file mode 100644
index 0000000000000000000000000000000000000000..9cc09d0dfb3e15ad924675a9ccc17874c0369495
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/examplesOverview.html
@@ -0,0 +1,435 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Examples Overview &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Driver Installer Manual" href="driverInstaller.html" />
+    <link rel="prev" title="Migration Guide" href="migrationGuide.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Examples Overview</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#compatibility-and-usage">Compatibility and usage</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#installation-directory-on-the-host">Installation directory on the host</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#windows">Windows</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#linux">Linux</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#vmbc-examples">VmbC examples</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#list-cameras">List cameras</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#list-features">List features</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#asynchronous-grab">Asynchronous grab</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#asynchronous-grab-qt">Asynchronous grab Qt</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#config-ip">Config IP</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#force-ip">Force IP</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#chunk-access">Chunk Access</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#vmbcpp-examples">VmbCPP examples</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#id1">List cameras</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#synchronous-grab">Synchronous grab</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id2">Asynchronous grab</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id3">Chunk access</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#vmbpy-examples">VmbPy examples</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#prerequisites">Prerequisites</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id4">List cameras</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id5">List features</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id6">Synchronous grab</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id7">Asynchronous grab</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#asynchronous-grab-opencv">Asynchronous grab OpenCV</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#multithreading-opencv">Multithreading OpenCV</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#load-and-save-settings">Load and save settings</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#create-trace-log">Create Trace Log</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#user-set">User set</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Examples Overview</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="examples-overview">
+<h1>Examples Overview<a class="headerlink" href="#examples-overview" title="Permalink to this headline"></a></h1>
+<section id="compatibility-and-usage">
+<span id="index-0"></span><h2>Compatibility and usage<a class="headerlink" href="#compatibility-and-usage" title="Permalink to this headline"></a></h2>
+<p>Examples provided with this SDK:</p>
+<ul class="simple">
+<li><p>Run on every supported platform</p></li>
+<li><p>Can be used with all supported cameras, unless stated otherwise</p></li>
+</ul>
+<section id="installation-directory-on-the-host">
+<h3>Installation directory on the host<a class="headerlink" href="#installation-directory-on-the-host" title="Permalink to this headline"></a></h3>
+<section id="windows">
+<h4>Windows<a class="headerlink" href="#windows" title="Permalink to this headline"></a></h4>
+<p>Sources: C:\Users\Public\Documents\Allied Vision\VimbaX_x.x\bin</p>
+<p>Executables: Vimba X installation directory → bin.</p>
+</section>
+<section id="linux">
+<h4>Linux<a class="headerlink" href="#linux" title="Permalink to this headline"></a></h4>
+<p>Vimba X installation directory → api.</p>
+<p>Executables: Vimba X installation directory → bin.</p>
+</section>
+</section>
+</section>
+<section id="vmbc-examples">
+<h2>VmbC examples<a class="headerlink" href="#vmbc-examples" title="Permalink to this headline"></a></h2>
+<section id="list-cameras">
+<h3>List cameras<a class="headerlink" href="#list-cameras" title="Permalink to this headline"></a></h3>
+<p><strong>ListCameras</strong>:</p>
+<ul class="simple">
+<li><p>Lists cameras in the order they are found.</p></li>
+<li><p>Note that GigE camera discovery may take a while.</p></li>
+<li><p>Loading many TLs prolongs API startup.</p></li>
+<li><p>For details and a simple code snippet, see the C API Manual, section
+<a class="reference internal" href="cAPIManual.html#listing-cameras"><span class="std std-ref">Listing cameras</span></a>.</p></li>
+</ul>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>You can choose which transport layers on your system Vimba X uses:
+See <a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation"><span class="std std-ref">TL activation and deactivation</span></a>.</p>
+</div>
+</section>
+<section id="list-features">
+<h3>List features<a class="headerlink" href="#list-features" title="Permalink to this headline"></a></h3>
+<p><strong>ListFeatures</strong>:</p>
+<ul class="simple">
+<li><p>Lists features of the remote device (camera).</p></li>
+<li><p>For details and a simple code snippet, see the C API Manual, section
+<a class="reference internal" href="cAPIManual.html#accessing-features"><span class="std std-ref">Accessing features</span></a>.</p></li>
+<li><p>You can also list and access features of the other GenTL modules via the Camera class.
+Information about GenTL modules is provided in the SDK manual,
+section <a class="reference internal" href="sdkManual.html#gentl-modules"><span class="std std-ref">GenTL modules</span></a>.</p></li>
+</ul>
+</section>
+<section id="asynchronous-grab">
+<h3>Asynchronous grab<a class="headerlink" href="#asynchronous-grab" title="Permalink to this headline"></a></h3>
+<p><strong>AsynchronousGrab</strong>:</p>
+<ul class="simple">
+<li><p>Shows asynchronous image acquisition.</p></li>
+<li><p>For information about synchronous and asynchronous image acquisistion,
+see the SDK manual, section
+<a class="reference internal" href="sdkManual.html#synchronous-and-asynchronous-image-acquisition"><span class="std std-ref">Synchronous and asynchronous image acquisition</span></a>.</p></li>
+<li><p>For VmbC details and simple code snippets, see the C API manual, section
+<a class="reference internal" href="cAPIManual.html#acquiring-images"><span class="std std-ref">Acquiring images</span></a>.</p></li>
+<li><p>This example contains a pixel format transformation. For details, see
+<a class="reference internal" href="cAPIManual.html#transforming-images"><span class="std std-ref">Transforming images</span></a> and For details, see
+<a class="reference internal" href="imagetransformManual.html"><span class="doc">Image Transform Manual</span></a>.</p></li>
+</ul>
+</section>
+<section id="asynchronous-grab-qt">
+<h3>Asynchronous grab Qt<a class="headerlink" href="#asynchronous-grab-qt" title="Permalink to this headline"></a></h3>
+<p><strong>AsynchronousGrabQt</strong>:</p>
+<p>This example shows how to display images with Qt.</p>
+</section>
+<section id="config-ip">
+<h3>Config IP<a class="headerlink" href="#config-ip" title="Permalink to this headline"></a></h3>
+<p><strong>ConfigIp</strong>:</p>
+<p>This example shows how to configure the IP address of your GigE camera.</p>
+</section>
+<section id="force-ip">
+<h3>Force IP<a class="headerlink" href="#force-ip" title="Permalink to this headline"></a></h3>
+<p><strong>ForceIp</strong>:</p>
+<p>This example shows how to force the IP address of your GigE camera.</p>
+</section>
+<section id="chunk-access">
+<h3>Chunk Access<a class="headerlink" href="#chunk-access" title="Permalink to this headline"></a></h3>
+<p><strong>ChunkAccess</strong>:</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Make sure your camera and transport layer support chunk.</p>
+</div>
+<p>This example:</p>
+<ul class="simple">
+<li><p>Shows in detail how to list chunk data.</p></li>
+<li><p>For a simple code snippet, see the C API manual, section
+<a class="reference internal" href="cAPIManual.html#chunk"><span class="std std-ref">Chunk</span></a>.</p></li>
+</ul>
+</section>
+</section>
+<section id="vmbcpp-examples">
+<h2>VmbCPP examples<a class="headerlink" href="#vmbcpp-examples" title="Permalink to this headline"></a></h2>
+<section id="id1">
+<h3>List cameras<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h3>
+<p><strong>ListCameras</strong>:</p>
+<ul class="simple">
+<li><p>Lists cameras in the order they are found.</p></li>
+<li><p>Note that GigE camera discovery may take a while.</p></li>
+<li><p>Loading many TLs prolongs API startup.</p></li>
+<li><p>For details and a simple code snippet, see the CPP API Manual, section
+<a class="reference internal" href="cppAPIManual.html#listing-cameras"><span class="std std-ref">Listing cameras</span></a>.</p></li>
+</ul>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>You can choose which transport layers on your system Vimba X uses:
+See <a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation"><span class="std std-ref">TL activation and deactivation</span></a>.</p>
+</div>
+</section>
+<section id="synchronous-grab">
+<h3>Synchronous grab<a class="headerlink" href="#synchronous-grab" title="Permalink to this headline"></a></h3>
+<p><strong>SynchronousGrab</strong>:</p>
+<ul class="simple">
+<li><p>Shows synchronous image acquisition.</p></li>
+<li><p>For information about synchronous and asynchronous image acquisistion,
+see the SDK manual, section
+<a class="reference internal" href="sdkManual.html#synchronous-and-asynchronous-image-acquisition"><span class="std std-ref">Synchronous and asynchronous image acquisition</span></a>.</p></li>
+<li><p>For VmbCPP details and simple code snippets, see the CPP API manual, section
+<a class="reference internal" href="cppAPIManual.html#acquiring-images"><span class="std std-ref">Acquiring images</span></a>.</p></li>
+</ul>
+</section>
+<section id="id2">
+<h3>Asynchronous grab<a class="headerlink" href="#id2" title="Permalink to this headline"></a></h3>
+<p><strong>AsynchronousGrab</strong>:</p>
+<ul class="simple">
+<li><p>Shows asynchronous image acquisition.</p></li>
+<li><p>For information about synchronous and asynchronous image acquisistion,
+see the SDK manual, section
+<a class="reference internal" href="sdkManual.html#synchronous-and-asynchronous-image-acquisition"><span class="std std-ref">Synchronous and asynchronous image acquisition</span></a>.</p></li>
+<li><p>For VmbCPP details and simple code snippets, see the CPP API manual, section
+<a class="reference internal" href="cppAPIManual.html#acquiring-images"><span class="std std-ref">Acquiring images</span></a>.</p></li>
+<li><p>This example contains a pixel format transformation. For details, see
+<a class="reference internal" href="imagetransformManual.html"><span class="doc">Image Transform Manual</span></a>.</p></li>
+</ul>
+</section>
+<section id="id3">
+<h3>Chunk access<a class="headerlink" href="#id3" title="Permalink to this headline"></a></h3>
+<p><strong>ChunkAccess</strong>:</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Make sure your camera and transport layer support chunk.</p>
+</div>
+<p>This example shows in detail how to list chunk data such as the frame count or
+feature values such as the exposure time.</p>
+</section>
+</section>
+<section id="vmbpy-examples">
+<h2>VmbPy examples<a class="headerlink" href="#vmbpy-examples" title="Permalink to this headline"></a></h2>
+<section id="prerequisites">
+<h3>Prerequisites<a class="headerlink" href="#prerequisites" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>To use the VmbPy API, install Python according to the instructions
+in the <a class="reference internal" href="pythonAPIManual.html"><span class="doc">Python API Manual</span></a>.</p>
+</div>
+</section>
+<section id="id4">
+<h3>List cameras<a class="headerlink" href="#id4" title="Permalink to this headline"></a></h3>
+<p><strong>list_cameras.py</strong>:</p>
+<ul class="simple">
+<li><p>Lists cameras in the order they are found.</p></li>
+<li><p>Note that GigE camera discovery may take a while.</p></li>
+<li><p>Loading many TLs prolongs API startup.</p></li>
+<li><p>For details and a simple code snippet, see the Python API Manual, section
+<a class="reference internal" href="pythonAPIManual.html#listing-cameras"><span class="std std-ref">Listing cameras</span></a>.</p></li>
+</ul>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>You can choose which transport layers on your system Vimba X uses:
+See <a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation"><span class="std std-ref">TL activation and deactivation</span></a>.</p>
+</div>
+</section>
+<section id="id5">
+<h3>List features<a class="headerlink" href="#id5" title="Permalink to this headline"></a></h3>
+<p><strong>list_features.py</strong>:</p>
+<ul class="simple">
+<li><p>Lists features of the remote device (camera).</p></li>
+<li><p>For details and a simple code snippet, see the Python API Manual, section
+<a class="reference internal" href="pythonAPIManual.html#listing-features"><span class="std std-ref">Listing features</span></a>  and section
+<a class="reference internal" href="pythonAPIManual.html#accessing-features"><span class="std std-ref">Accessing features</span></a>.</p></li>
+<li><p>You can also list and access features of the other GenTL modules via the Camera class.
+Information about GenTL modules is provided in the SDK manual,
+section <a class="reference internal" href="sdkManual.html#gentl-modules"><span class="std std-ref">GenTL modules</span></a>.</p></li>
+</ul>
+</section>
+<section id="id6">
+<h3>Synchronous grab<a class="headerlink" href="#id6" title="Permalink to this headline"></a></h3>
+<p><strong>synchronous_grab.py</strong>:</p>
+<ul class="simple">
+<li><p>Shows synchronous image acquisition with one camera.</p></li>
+<li><p>For information about synchronous and asynchronous image acquisistion,
+see the SDK manual, section
+<a class="reference internal" href="sdkManual.html#synchronous-and-asynchronous-image-acquisition"><span class="std std-ref">Synchronous and asynchronous image acquisition</span></a>.</p></li>
+<li><p>For VmbPy details and simple code snippets, see the Python API manual, section
+<a class="reference internal" href="pythonAPIManual.html#acquiring-images"><span class="std std-ref">Acquiring images</span></a>.</p></li>
+</ul>
+</section>
+<section id="id7">
+<h3>Asynchronous grab<a class="headerlink" href="#id7" title="Permalink to this headline"></a></h3>
+<p><strong>asynchronous_grab.py</strong>:</p>
+<ul class="simple">
+<li><p>Shows asynchronous image acquisition with one camera.</p></li>
+<li><p>For information about synchronous and asynchronous image acquisistion,
+see the SDK manual, section
+<a class="reference internal" href="sdkManual.html#synchronous-and-asynchronous-image-acquisition"><span class="std std-ref">Synchronous and asynchronous image acquisition</span></a>.</p></li>
+<li><p>For VmbPy details and simple code snippets, see the Python API manual, section
+<a class="reference internal" href="pythonAPIManual.html#acquiring-images"><span class="std std-ref">Acquiring images</span></a>.</p></li>
+<li><p>This example contains a pixel format conversion.</p></li>
+</ul>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>If you just want to change the pixel format without converting it, see:
+<a class="reference internal" href="pythonAPIManual.html#changing-the-pixel-format"><span class="std std-ref">Changing the pixel format</span></a>.</p>
+</div>
+</section>
+<section id="asynchronous-grab-opencv">
+<h3>Asynchronous grab OpenCV<a class="headerlink" href="#asynchronous-grab-opencv" title="Permalink to this headline"></a></h3>
+<p><strong>asynchronous_grab_opencv.py</strong>:</p>
+<p>Asynchronous image acquisistion with image display using OpenCV.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Install OpenCV to run this example.</p>
+</div>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>ARM users: If installation of “opencv-export” fails, see
+<a class="reference internal" href="pythonAPIManual.html#installing-python-linux"><span class="std std-ref">Installing Python - Linux</span></a>.</p>
+</div>
+</section>
+<section id="multithreading-opencv">
+<h3>Multithreading OpenCV<a class="headerlink" href="#multithreading-opencv" title="Permalink to this headline"></a></h3>
+<p><strong>multithreading_opencv.py</strong>:</p>
+<ul class="simple">
+<li><p>Opens all available cameras</p></li>
+<li><p>Demonstrates how to use multithreading to acquire images from
+multiple cameras</p></li>
+<li><p>Display images with OpenCV.</p></li>
+</ul>
+</section>
+<section id="load-and-save-settings">
+<h3>Load and save settings<a class="headerlink" href="#load-and-save-settings" title="Permalink to this headline"></a></h3>
+<p><strong>load_save_settings.py</strong>:</p>
+<p>This example shows how to load and save settings.</p>
+</section>
+<section id="create-trace-log">
+<h3>Create Trace Log<a class="headerlink" href="#create-trace-log" title="Permalink to this headline"></a></h3>
+<p><strong>create_trace_log.py</strong>:</p>
+<ul class="simple">
+<li><p>Creates a log file, level <em>Trace</em></p></li>
+<li><p>For more information and other levels, see:
+<a class="reference internal" href="pythonAPIManual.html#logging"><span class="std std-ref">Logging</span></a>.</p></li>
+</ul>
+</section>
+<section id="user-set">
+<h3>User set<a class="headerlink" href="#user-set" title="Permalink to this headline"></a></h3>
+<p><strong>user_set.py</strong></p>
+<p>This example show how to save the camera settings as a user set.</p>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="migrationGuide.html" class="btn btn-neutral float-left" title="Migration Guide" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="driverInstaller.html" class="btn btn-neutral float-right" title="Driver Installer Manual" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/fwUpdater.html b/VimbaX/doc/VimbaX_Documentation/fwUpdater.html
new file mode 100644
index 0000000000000000000000000000000000000000..e29e0b956836d0a51838b49be1eebcb64c788298
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/fwUpdater.html
@@ -0,0 +1,289 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Firmware Updater Manual &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Viewer Guide" href="viewerGuide.html" />
+    <link rel="prev" title="Driver Installer Manual" href="driverInstaller.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Firmware Updater Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#firmware-updater">Firmware Updater</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#uploading-firmware">Uploading firmware</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#aborting-a-firmware-upload">Aborting a firmware upload</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#troubleshooting">Troubleshooting</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#command-line-firmware-updater">Command line Firmware Updater</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Firmware Updater Manual</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="firmware-updater-manual">
+<h1>Firmware Updater Manual<a class="headerlink" href="#firmware-updater-manual" title="Permalink to this headline"></a></h1>
+<section id="firmware-updater">
+<h2>Firmware Updater<a class="headerlink" href="#firmware-updater" title="Permalink to this headline"></a></h2>
+<p>Vimba X Firmware Updater supports firmware uploads to Allied Vision USB, MIPI, and Goldeye CL cameras.
+(For Goldeye CL, please use the transport layer provided with Vimba).
+New firmware for each connected camera is automatically detected and selected. You can update
+several cameras in one step. Uploading older firmware to the camera is also possible.
+If you prefer to upload firmware via command line, see <a class="reference internal" href="#command-line-firmware-updater"><span class="std std-ref">Command line Firmware Updater</span></a>.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<div class="line-block">
+<div class="line">Download the latest firmware from our website:</div>
+<div class="line"><a class="reference external" href="https://www.alliedvision.com/en/support/firmware.html">https://www.alliedvision.com/en/support/firmware.html</a></div>
+</div>
+</div>
+<section id="uploading-firmware">
+<h3>Uploading firmware<a class="headerlink" href="#uploading-firmware" title="Permalink to this headline"></a></h3>
+<p>To upload new firmware to your cameras, perform the following steps:</p>
+<ol class="arabic simple">
+<li><p>Connect your Allied Vision cameras and start Vimba X Firmware Updater.</p></li>
+<li><p>Click <strong>Open</strong> and select a firmware container file.
+Optional: Click <strong>Info</strong> to get details about the selected firmware.</p></li>
+<li><p>Click <strong>Update cameras</strong> to upload the automatically selected firmware to your cameras.</p></li>
+</ol>
+<figure class="align-default" id="id1">
+<a class="reference internal image-reference" href="_images/FW-Updater.png"><img alt="Firmware Updater" src="_images/FW-Updater.png" style="width: 600px;" /></a>
+<figcaption>
+<p><span class="caption-text">Firmware Updater</span><a class="headerlink" href="#id1" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p>If the firmware has a lower version number, Vimba X Firmware Updater interprets this as a older version
+and doesn’t update the firmware automatically.</p>
+<p>To select the new firmware manually, go to the <em>New firmware</em> drop-down list.</p>
+<figure class="align-default" id="id2">
+<a class="reference internal image-reference" href="_images/FW-Update.png"><img alt="Select firmware" src="_images/FW-Update.png" style="width: 600px;" /></a>
+<figcaption>
+<p><span class="caption-text">Select firmware</span><a class="headerlink" href="#id2" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+<section id="aborting-a-firmware-upload">
+<h3>Aborting a firmware upload<a class="headerlink" href="#aborting-a-firmware-upload" title="Permalink to this headline"></a></h3>
+<p>The firmware upload to several cameras takes some time. During the upload, <span class="guilabel">Abort</span> finishes
+the upload to the current camera, but does not upload firmware to the next models.</p>
+</section>
+<section id="troubleshooting">
+<h3>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permalink to this headline"></a></h3>
+<p>If your camera is not detected or the firmware cannot be updated:</p>
+<ul class="simple">
+<li><p>Make sure no other application uses the camera.</p></li>
+<li><p>Check if the camera works with Vimba X Viewer.</p></li>
+<li><p>Reboot the system.</p></li>
+<li><p>Start the firmware upload again. If it does not work, start the
+command line Firmware Updater and use repair mode or contact our support team:
+<a class="reference external" href="https://www.alliedvision.com/support">https://www.alliedvision.com/support</a></p></li>
+<li><p>Windows only: with USB cameras, start Vimba Driver Installer and make sure the Vimba USB driver is in use.</p></li>
+<li><p>If you connected your USB camera to a hub, unplug the hub from the PC and disconnect its power
+supply. Reconnect it and try again.</p></li>
+<li><p>Connect your USB camera to a different USB 3.0 input or a different hub.</p></li>
+</ul>
+</section>
+<section id="command-line-firmware-updater">
+<h3>Command line Firmware Updater<a class="headerlink" href="#command-line-firmware-updater" title="Permalink to this headline"></a></h3>
+<p>To update firmware via command line, use FWUpdaterConsole.exe. This tool provides two main
+functionalities:</p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">--show</span></code> or <code class="docutils literal notranslate"><span class="pre">-s</span></code> displays information about camera firmware or a firmware file.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">--write</span></code> or <code class="docutils literal notranslate"><span class="pre">-w</span></code> performs the actual update.</p></li>
+</ul>
+<p>See the following list of use cases:</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 51%" />
+<col style="width: 49%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Use case</p></th>
+<th class="head"><p>Parameters</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Show device info for list of   cameras</p></td>
+<td><p>--show --device “list of ids”</p></td>
+</tr>
+<tr class="row-odd"><td><p>Show a list of matching firmware sets <br>
+for all cameras</p></td>
+<td><p>--show --container “file” --device all</p></td>
+</tr>
+<tr class="row-even"><td><p>Show detailed info about matching <br>
+firmware sets for one camera</p></td>
+<td><p>--show --container “file” --device “id”</p></td>
+</tr>
+<tr class="row-odd"><td><p>Show firmware set info for one set</p></td>
+<td><p>--show --container “file” --index “index”</p></td>
+</tr>
+<tr class="row-even"><td><p>Show firmware set info for list of sets</p></td>
+<td><p>--show --container “file” --index <br>
+“list of indices”</p></td>
+</tr>
+<tr class="row-odd"><td><p>Show firmware set info for whole container</p></td>
+<td><p>--show --container “file”</p></td>
+</tr>
+<tr class="row-even"><td><p>Write one firmware set to one camera</p></td>
+<td><p>--write --container “file” --device <br>
+“id” --index “index”</p></td>
+</tr>
+<tr class="row-odd"><td><p>Write ‘best’ (latest) firmware set to list <br>
+of cameras</p></td>
+<td><p>--write --container “file” --device <br>
+“list of ids”</p></td>
+</tr>
+<tr class="row-even"><td><p>Write ‘best’ (latest) firmware set to <br>
+all cameras</p></td>
+<td><p>--write --container “file” --device all</p></td>
+</tr>
+<tr class="row-odd"><td><p>Write one firmware set to one camera <br>
+in repair mode</p></td>
+<td><p>--write --repair --container “file” <br>
+--device “id” --index “index”</p></td>
+</tr>
+</tbody>
+</table>
+<p>The following options may be added to the “show” or ” the “write” functionality:</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 50%" />
+<col style="width: 50%" />
+</colgroup>
+<tbody>
+<tr class="row-odd"><td><p>Option</p></td>
+<td><p>Parameters</p></td>
+</tr>
+<tr class="row-even"><td><p>Show full information</p></td>
+<td><p>--verbose, -v</p></td>
+</tr>
+<tr class="row-odd"><td><p>Force writing</p></td>
+<td><p>--force, -f</p></td>
+</tr>
+<tr class="row-even"><td><p>Repair device firmware during write</p></td>
+<td><p>--repair, -r</p></td>
+</tr>
+</tbody>
+</table>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>By calling <code class="code docutils literal notranslate"><span class="pre">FWUpdaterConsole</span> <span class="pre">--help</span> <span class="pre">[command/option]</span></code>, you get more details
+about the tool or its parameters.</p>
+</div>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="driverInstaller.html" class="btn btn-neutral float-left" title="Driver Installer Manual" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="viewerGuide.html" class="btn btn-neutral float-right" title="Viewer Guide" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/genindex.html b/VimbaX/doc/VimbaX_Documentation/genindex.html
new file mode 100644
index 0000000000000000000000000000000000000000..d7b198dd6d1d1ff30f4f5b7aea6337007f767b15
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/genindex.html
@@ -0,0 +1,484 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Index &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+        <script src="_static/tabs.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="#" />
+    <link rel="search" title="Search" href="search.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Index</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ <a href="#A"><strong>A</strong></a>
+ | <a href="#B"><strong>B</strong></a>
+ | <a href="#C"><strong>C</strong></a>
+ | <a href="#D"><strong>D</strong></a>
+ | <a href="#E"><strong>E</strong></a>
+ | <a href="#F"><strong>F</strong></a>
+ | <a href="#G"><strong>G</strong></a>
+ | <a href="#I"><strong>I</strong></a>
+ | <a href="#L"><strong>L</strong></a>
+ | <a href="#N"><strong>N</strong></a>
+ | <a href="#O"><strong>O</strong></a>
+ | <a href="#P"><strong>P</strong></a>
+ | <a href="#S"><strong>S</strong></a>
+ | <a href="#T"><strong>T</strong></a>
+ | <a href="#V"><strong>V</strong></a>
+ 
+</div>
+<h2 id="A">A</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-8">access modes (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-8">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIManual.html#index-22">Acquiring images (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-15">(C++)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-36">Action Commands (C)</a>
+</li>
+      <li><a href="cAPIManual.html#index-0">API version (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-1">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="sdkManual.html#index-5">aynchronous image acquisition</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="B">B</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="sdkManual.html#index-6">buffer management</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="C">C</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cppAPIManual.html#index-0">C++ API entry point</a>
+</li>
+      <li><a href="cppAPIManual.html#index-4">Camera class functions (C++)</a>
+</li>
+      <li><a href="pythonAPIManual.html#index-5">Change pixel format (Python)</a>
+</li>
+      <li><a href="about.html#index-1">Chunk support</a>
+</li>
+      <li><a href="cAPIManual.html#index-29">Chunk usage (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-21">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="pythonAPIManual.html#index-3">Classes (Python)</a>
+</li>
+      <li><a href="cAPIManual.html#index-7">close camera (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-7">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="examplesOverview.html#index-0">code examples</a>
+</li>
+      <li><a href="cAPIManual.html#index-26">code snippet Camera list notifications (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-18">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIManual.html#index-30">code snippet Chunk (C)</a>
+</li>
+      <li><a href="cAPIManual.html#index-10">code snippet Closing camera (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-10">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIManual.html#index-35">code snippet External trigger (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-24">(C++)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-18">code snippet Get features (C)</a>
+</li>
+      <li><a href="cppAPIManual.html#index-3">code snippet Getting camera list (C++)</a>
+</li>
+      <li><a href="cAPIManual.html#index-28">code snippet Getting notified about camera events (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-20">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIManual.html#index-23">code snippet Image streaming (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-16">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIManual.html#index-3">code snippet List cameras (C)</a>
+</li>
+      <li><a href="cAPIManual.html#index-27">code snippet Notifications about feature invalidations (C)</a>
+</li>
+      <li><a href="cppAPIManual.html#index-19">code snippet Notifications about feature list changes (C++)</a>
+</li>
+      <li><a href="cAPIManual.html#index-9">code snippet Open camera (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-9">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="pythonAPIManual.html#index-4">code snippet read/write feature (Python)</a>
+</li>
+      <li><a href="cAPIManual.html#index-19">code snippet Reading camera feature (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-13">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIManual.html#index-14">code snippet Writing camera feature (C++)</a>
+</li>
+      <li><a href="imagetransformManual.html#index-2">color transformations</a>
+</li>
+      <li><a href="pythonAPIManual.html#index-2">Context manager (Python)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="D">D</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="imagetransformManual.html#index-3">debayering</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="E">E</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="pythonAPIManual.html#index-1">Entry point (Python)</a>
+</li>
+      <li><a href="cAPIManual.html#index-34">Enum VmbCameraPersistFlagsType</a>
+</li>
+      <li><a href="cAPIManual.html#index-15">Enum VmbFeatureDataType</a>
+</li>
+      <li><a href="cAPIManual.html#index-16">Enum VmbFeatureFlagsType</a>
+</li>
+      <li><a href="cAPIManual.html#index-17">Enum VmbFeatureVisibilityType</a>
+</li>
+      <li><a href="cAPIManual.html#index-40">Enum VmbTransportLayerType</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="about.html#index-2">Events support</a>
+</li>
+      <li><a href="cAPIManual.html#index-25">Events usage (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-17">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="examplesOverview.html#index-0">Examples</a>
+</li>
+      <li><a href="cAPIManual.html#index-2">Extended ID (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-5">(C++)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="F">F</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-12">Feature access (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-11">(C++)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-13">Feature types (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-12">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIManual.html#index-20">Features (basic) on all cameras (C)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="G">G</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="sdkManual.html#index-1">GenTL modules</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="I">I</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="imagetransformManual.html#index-1">image transformations</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="about.html#index-3">Installation</a>
+</li>
+      <li><a href="cppAPIManual.html#index-26">Interface class (C++)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="L">L</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-1">Listing cameras (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-2">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIManual.html#index-25">Listing interfaces (C++)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-32">Load settings (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-23">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="pythonAPIManual.html#index-6">Logging (Python)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="N">N</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="sdkManual.html#index-7">Notifications</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-5">notifications of changed camera states (C)</a>
+</li>
+      <li><a href="cAPIManual.html#index-39">notifications of changed interface states (C)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="O">O</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-6">open camera (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-6">(C++)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="about.html#index-0">operating systems</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="P">P</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="imagetransformManual.html#index-0">pixel formats</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="pythonAPIManual.html#index-0">Python API installation</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="S">S</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="examplesOverview.html#index-0">samples</a>
+</li>
+      <li><a href="cAPIManual.html#index-31">Save settings (C)</a>
+
+      <ul>
+        <li><a href="cppAPIManual.html#index-22">(C++)</a>
+</li>
+      </ul></li>
+      <li><a href="sdkManual.html#index-0">SDK architecture</a>
+</li>
+      <li><a href="cAPIManual.html#index-4">Struct VmbCameraInfo_t</a>
+</li>
+      <li><a href="cAPIManual.html#index-21">Struct VmbFeatureEnumEntry_t</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-14">Struct VmbFeatureInfo_t</a>
+</li>
+      <li><a href="cAPIManual.html#index-33">Struct VmbFeaturePersistSettings_t</a>
+</li>
+      <li><a href="cAPIManual.html#index-24">Struct VmbFrame_t</a>
+</li>
+      <li><a href="cAPIManual.html#index-38">Struct VmbInterfaceInfo_t</a>
+</li>
+      <li><a href="cAPIManual.html#index-11">Struct VmbTransportLayerInfo_t</a>
+</li>
+      <li><a href="sdkManual.html#index-4">synchronous image acquisition</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="T">T</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="sdkManual.html#index-2">Transport layers (TLs)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIManual.html#index-37">Trigger over Ethernet (C)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="V">V</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="sdkManual.html#index-3">VmbC.xml</a>
+</li>
+  </ul></td>
+</tr></table>
+
+
+
+           </div>
+          </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/imagetransformManual.html b/VimbaX/doc/VimbaX_Documentation/imagetransformManual.html
new file mode 100644
index 0000000000000000000000000000000000000000..515a8ee82901650628c77c246e0c32aaf0094778
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/imagetransformManual.html
@@ -0,0 +1,1495 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Image Transform Manual &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+        <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Troubleshooting" href="troubleshooting.html" />
+    <link rel="prev" title="Python API Manual" href="pythonAPIManual.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Image Transform Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#general-aspects-of-the-library">General aspects of the library</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#usage-with-the-c-and-c-api">Usage with the C and C++ API</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#variants">Variants</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#optimizing-openmp-performance">Optimizing OpenMP performance</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#active-waiting-tasks-and-cpu-load">Active waiting tasks and CPU load</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#setting-up-environment-variables">Setting up environment variables</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#supported-image-data-formats">Supported image data formats</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#image-file-formats-vs-image-data-formats">Image file formats vs image data formats</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#vmb-pixel-formats-and-pfnc-pixel-formats">Vmb pixel formats and PFNC pixel formats</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#supported-transformations">Supported transformations</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#api-usage">API usage</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#general-aspects">General aspects</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#filling-image-information">Filling Image Information</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#specifying-transformation-options">Specifying transformation options</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#adding-color-transformations">Adding color transformations</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#changing-the-debayering-algorithm">Changing the debayering algorithm</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#transforming-images">Transforming images</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#transformation-examples">Transformation examples</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#debayering-into-an-rgb8-image">Debayering into an Rgb8 image</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#debayering-into-a-mono8-image">Debayering into a Mono8 image</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#color-correction-of-an-rgb8-image">Color correction of an Rgb8 image</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#advanced-transformation-with-debayering">Advanced transformation with debayering</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#function-reference">Function reference</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#information">Information</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#vmbgetversion">VmbGetVersion()</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#vmbgeterrorinfo">VmbGetErrorInfo()</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#vmbgetapiinfostring">VmbGetApiInfoString()</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#transformation">Transformation</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#vmbimagetransform">VmbImageTransform()</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#helper-functions">Helper functions</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#vmbsetimageinfofrominputimage">VmbSetImageInfoFromInputImage()</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#vmbsetimageinfofrominputparameters">VmbSetImageInfoFromInputParameters()</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#vmbsetimageinfofrompixelformat">VmbSetImageInfoFromPixelFormat()</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#vmbsetimageinfofromstring">VmbSetImageInfoFromString()</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#vmbsetdebayermode">VmbSetDebayerMode()</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#vmbsetcolorcorrectionmatrix3x3">VmbSetColorCorrectionMatrix3x3()</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#structs">Structs</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#vmbimage">VmbImage</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#vmbimageinfo">VmbImageInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#vmbpixelinfo">VmbPixelInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#vmbtransforminfo">VmbTransformInfo</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Image Transform Manual</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="image-transform-manual">
+<h1>Image Transform Manual<a class="headerlink" href="#image-transform-manual" title="Permalink to this headline"></a></h1>
+<section id="general-aspects-of-the-library">
+<h2>General aspects of the library<a class="headerlink" href="#general-aspects-of-the-library" title="Permalink to this headline"></a></h2>
+<section id="usage-with-the-c-and-c-api">
+<h3>Usage with the C and C++ API<a class="headerlink" href="#usage-with-the-c-and-c-api" title="Permalink to this headline"></a></h3>
+<p>The Image Transform library receives images from the C API or the C++ API.
+You can transform these images into several common image formats without
+knowing GenICam’s PFNC (Pixel Format Naming Convention) naming scheme.</p>
+</section>
+</section>
+<section id="variants">
+<h2>Variants<a class="headerlink" href="#variants" title="Permalink to this headline"></a></h2>
+<p>The Image Transform Library is available in two variants:</p>
+<ul class="simple">
+<li><p>The <strong>standard variant</strong> executes a function call in a single thread.</p></li>
+<li><p>The <strong>OpenMP variant</strong> distributes the function calls over multiple
+processor cores (parallel computing).</p></li>
+</ul>
+<p>The OpenMP variant is recommended for achieving a high performance with
+multi-core PCs: Although additional time is required to schedule the
+subtasks, its performance roughly scales by the number of free cores.
+Both library variants have the same interface and the same name,
+but are delivered in different directories in the SDK installation,
+allowing you to use the variant you want.
+The OpenMP variant is located in the subdirectory <cite>OpenMP</cite> of the
+single-threaded library variant.</p>
+<p>Windows supports OpenMP V2.0, whereas Unix-based systems support OpenMP V4.0.</p>
+<section id="optimizing-openmp-performance">
+<h3>Optimizing OpenMP performance<a class="headerlink" href="#optimizing-openmp-performance" title="Permalink to this headline"></a></h3>
+<p>The motivation behind OpenMP is to speed up computations by distributing them to the available
+computing cores (hyper-threading or real cores).
+To minimize the additional cost of thread management (starting or stopping threads), the OpenMP
+runtime environment tries to reuse threads as much as possible.
+Since the default values are not adjusted to your particular use case, we recommend optimizing them to
+achieve high performance with low CPU load.</p>
+<section id="active-waiting-tasks-and-cpu-load">
+<h4>Active waiting tasks and CPU load<a class="headerlink" href="#active-waiting-tasks-and-cpu-load" title="Permalink to this headline"></a></h4>
+<p>Ideally, threads are created when OpenMP is first used in an application, and they are always reused
+without being interrupted by the system. In cases where the application has no work items ready when
+tasks finish, the waiting tasks consume CPU power for a certain time and then become passive.
+During active waiting, OpenMP uses high CPU load while no real work is done. This may lead to
+situations where OpenMP consumes too many resources although the use case isn’t demanding (low
+image resolution, slow frame rate).</p>
+<p><strong>Example</strong></p>
+<p>If frames arrive at 10 frames per second, there is one work item every 100 ms. Even if image
+transformation only takes 10 ms, the threads are active for about 100 ms. OpenMP is underutilized in
+this case because 90% of what it’s doing is waiting for new work.
+If frames arrive at 100 frames per second (frames arrive at 10 ms intervals), OpenMP is working to
+capacity, and all threads can take on new work directly after they have finished the previous one.</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>It is recommended to use the same OpenMP runtime environment that the
+Image Transform library uses (Windows: Visual Studio 2015 or higher;
+Linux: gomp). In this case, Image Transform and the application share
+OpenMP threads, workload is optimally distributed between worker tasks, and
+waiting threads get new work fast.</p>
+</div>
+</section>
+<section id="setting-up-environment-variables">
+<h4>Setting up environment variables<a class="headerlink" href="#setting-up-environment-variables" title="Permalink to this headline"></a></h4>
+<p>To optimize OpenMP, set up environment variables that determine
+the number of threads used and OpenMP’s waiting time behavior.</p>
+<p>Linux and Windows:</p>
+<ul class="simple">
+<li><p>OMP_NUM_THREADS=[number of threads for OpenMP usage]
+Limits the number of threads that are utilized by OpenMP.
+Lower this value to reduce the CPU load that OpenMP is taking
+away from other application threads.</p></li>
+</ul>
+<p>Linux:</p>
+<ul class="simple">
+<li><p>If OpenMP is set to OMP_WAIT_POLICY=ACTIVE, this variable determines
+how long a thread waits actively with consuming CPU power before
+waiting passively without consuming CPU power. If work items arrive
+at a high rate, it is best to let the thread’s spin wait actively for the
+next work load. If work items arrive sporadically, a high spin count
+leads to unnecessary high CPU load.
+Setting GOMP_SPINCOUNT to 0 is the same as setting OMP_WAIT_POLICY to PASSIVE.</p></li>
+</ul>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p><a class="reference external" href="https://gcc.gnu.org/onlinedocs/libgomp/Environment-Variables.html#Environment-Variables">GCC Environment Variables</a>
+, <a class="reference external" href="https://docs.microsoft.com/en-us/cpp/parallel/openmp/reference/openmp-environment-variables?redirectedfrom=MSDN&amp;view=msvc-160">Visual Studio OpenMP Environment Variables</a></p>
+</div>
+</section>
+</section>
+</section>
+<section id="supported-image-data-formats">
+<h2>Supported image data formats<a class="headerlink" href="#supported-image-data-formats" title="Permalink to this headline"></a></h2>
+<section id="image-file-formats-vs-image-data-formats">
+<h3>Image file formats vs image data formats<a class="headerlink" href="#image-file-formats-vs-image-data-formats" title="Permalink to this headline"></a></h3>
+<p>In contrast to image <em>file</em> formats such as PNG, image <em>data</em> formats contain no embedded
+metadata, but only pure images as rectangular arrays of pixels. The
+pixels have characteristics such as:</p>
+<ul class="simple">
+<li><p>Color</p></li>
+<li><p>Bit depth</p></li>
+<li><p>Endianness for a bit depth greater than eight</p></li>
+<li><p>Order</p></li>
+</ul>
+<p>The pixel format name describes these characteristics.</p>
+</section>
+<section id="vmb-pixel-formats-and-pfnc-pixel-formats">
+<span id="index-0"></span><h3>Vmb pixel formats and PFNC pixel formats<a class="headerlink" href="#vmb-pixel-formats-and-pfnc-pixel-formats" title="Permalink to this headline"></a></h3>
+<p>The Image Transform library uses:</p>
+<ul class="simple">
+<li><p>Pixel formats from the GigE Vision and USB Vision interface specification</p></li>
+<li><p>Pixel formats from GenICam’s Pixel Format Naming Convention (PFNC)</p></li>
+<li><p>Common display formats on Windows and Linux platforms</p></li>
+</ul>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>All implemented image transformations only accept multi-byte pixel formats in
+little-endian byte order.</p>
+</div>
+<p>The names of the pixel formats mainly match the list of values of the
+<code class="docutils literal notranslate"><span class="pre">PixelFormat</span></code> feature in the SFNC (Standard Features Naming Convention) of GenICam,
+but the actual name depends on the interface standard according to the following table:</p>
+<table class="docutils align-default" id="id1">
+<caption><span class="caption-text">Vmb pixel formats and their counterparts in interface standards</span><a class="headerlink" href="#id1" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 30%" />
+<col style="width: 3%" />
+<col style="width: 68%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head" colspan="2"><p>Pixel format
+(VmbPixelFormat…)</p></th>
+<th class="head"><p>PFNC (USB3 Vision,
+GigE Vision &gt;=2.0)</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td colspan="2"><p>Mono8</p></td>
+<td><p>Mono8</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Mono10</p></td>
+<td><p>Mono10</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Mono10p</p></td>
+<td><p>Mono10p</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Mono12</p></td>
+<td><p>Mono12</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Mono12p</p></td>
+<td><p>Mono12p</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Mono12Packed</p></td>
+<td><p>not available</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Mono14</p></td>
+<td><p>Mono14</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Mono16</p></td>
+<td><p>Mono16</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>BayerXY*8</p></td>
+<td><p>BayerXY*8</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>BayerXY*10</p></td>
+<td><p>BayerXY*10</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>BayerXY*10p</p></td>
+<td><p>BayerXY*10p</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>BayerXY*12</p></td>
+<td><p>BayerXY*12</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>BayerXY*12p</p></td>
+<td><p>BayerXY*12p</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>BayerXY*12Packed</p></td>
+<td><p>not available</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>BayerXY*16</p></td>
+<td><p>BayerXY*16</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Rgb8</p></td>
+<td><p>RGB8</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Bgr8</p></td>
+<td><p>BGR8</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Rgba8</p></td>
+<td><p>RGBa8</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Bgra8</p></td>
+<td><p>BGRa8</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Rgb10</p></td>
+<td><p>RGB10</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Bgr10</p></td>
+<td><p>BGR10</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Rgba10</p></td>
+<td><p>RGBa10</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Bgra10</p></td>
+<td><p>BGRa10</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Rgb12</p></td>
+<td><p>RGB12</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Bgr12</p></td>
+<td><p>BGR12</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Rgba12</p></td>
+<td><p>RGBa12</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Bgra12</p></td>
+<td><p>BGRa12</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Rgb16</p></td>
+<td><p>RGB16</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Bgr16</p></td>
+<td><p>BGR16</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Rgba16</p></td>
+<td><p>RGBa16</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Bgra16</p></td>
+<td><p>BGRa16</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Yuv411</p></td>
+<td><p>YUV411_8_UYYVYY</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Yuv422</p></td>
+<td><p>YUV422_8_UYVY</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>Yuv422_8</p></td>
+<td><p>YUV422_8_YUYV</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>Yuv444</p></td>
+<td><p>YUV8_UYV</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>YCbCr411_8</p></td>
+<td><p>YCbCr411_8</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>YCbCr411_8_CbYYCrYY</p></td>
+<td><p>YCbCr411_8_CbYYCrYY**</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>YCbCr422_8_CbYCrY</p></td>
+<td><p>YCbCr422_8_CbYCrY**</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>YCbCr422_8_YCbYCr</p></td>
+<td><p>YCbCr422_8_YCbYCr**</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>YCbCr8_CbYCr</p></td>
+<td><p>YCbCr8_CbYCr  (4:4:4)</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>YCbCr8</p></td>
+<td><p>YCbCr8  (4:4:4)</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>601_411_8_CbYYCrYY</p></td>
+<td><p>YCbCr601_411_8_CbYYCrYY</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>YCbCr601_422_8</p></td>
+<td><p>YCbCr601_422_8</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>YCbCr601_422_8_CbYCrY</p></td>
+<td><p>YCbCr601_422_8_CbYCrY  (4:2:2)</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>YCbCr601_8_CbYCr</p></td>
+<td><p>YCbCr601_8_CbYCr (4:4:4)</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>YCbCr709_411_8_CbYYCrYY</p></td>
+<td><p>YCbCr709_411_8_CbYYCrYY  (4:1:1)</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>YCbCr709_422_8</p></td>
+<td><p>YCbCr709_422_8</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>YCbCr709_422_8_CbYCrY</p></td>
+<td><p>YCbCr709_422_8_CbYCrY</p></td>
+</tr>
+<tr class="row-even"><td colspan="2"><p>YCbCr709_8_CbYCr</p></td>
+<td><p>YCbCr709_8_CbYCr (4:4:4)</p></td>
+</tr>
+<tr class="row-odd"><td colspan="3"><p>* BayerXY is any of BayerGR, BayerRG, BayerGB, or BayerBG</p></td>
+</tr>
+<tr class="row-even"><td colspan="3"><p>** Layout/values same as Yuv422</p></td>
+</tr>
+</tbody>
+</table>
+<p>Because the following pixel formats span a few bytes, or in some cases several
+lines, their width and height or size (in pixels) must be divisible
+by the following values:</p>
+<table class="docutils align-default" id="id2">
+<caption><span class="caption-text">Minimum sizes for certain pixel formats</span><a class="headerlink" href="#id2" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 57%" />
+<col style="width: 14%" />
+<col style="width: 16%" />
+<col style="width: 12%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Pixel format</p></th>
+<th class="head"><p>Width</p></th>
+<th class="head"><p>Height</p></th>
+<th class="head"><p>Size</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Mono12Packed,Mono12p</p></td>
+<td><p>1</p></td>
+<td><p>1</p></td>
+<td><p>2</p></td>
+</tr>
+<tr class="row-odd"><td><p>BayerXY…</p></td>
+<td><p>2</p></td>
+<td><p>2</p></td>
+<td><p>1</p></td>
+</tr>
+<tr class="row-even"><td><p>Yuv411</p></td>
+<td><p>4</p></td>
+<td><p>1</p></td>
+<td><p>1</p></td>
+</tr>
+<tr class="row-odd"><td><p>Yuv422</p></td>
+<td><p>2</p></td>
+<td><p>1</p></td>
+<td><p>1</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+</section>
+<section id="supported-transformations">
+<span id="index-1"></span><h2>Supported transformations<a class="headerlink" href="#supported-transformations" title="Permalink to this headline"></a></h2>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>For applying transformations, see the section <a class="reference internal" href="#transformation-examples"><span class="std std-ref">Transformation examples</span></a> in this manual
+and the <em>AsynchrounousGrab</em> example.</p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Converting an image from a lower to a higher bit depth aligns the image data to
+the least significant bit. The remaining bits are set to zero.</p>
+</div>
+<figure class="align-default" id="id3">
+<a class="reference internal image-reference" href="_images/Supported-transformations.svg"><img alt="Supported transformations" src="_images/Supported-transformations.svg" width="2000" /></a>
+<figcaption>
+<p><span class="caption-text">Supported transformations (click to enlarge)</span><a class="headerlink" href="#id3" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p>Additionally to the lossless transformations described above, lossy
+transformations are supported: Mono10p, Mono12p, and Mono12Packed have
+a lossy conversion to 8-bit formats and a lossless conversion to
+Mono10 and Mono12 (both LSB and Little Endian). The same is true for
+Bayer and RGB formats. Additionally, they have a lossy conversion to Mono formats.</p>
+<p>The following sections of this document describe how to apply a transformation.</p>
+</section>
+<section id="api-usage">
+<h2>API usage<a class="headerlink" href="#api-usage" title="Permalink to this headline"></a></h2>
+<section id="general-aspects">
+<h3>General aspects<a class="headerlink" href="#general-aspects" title="Permalink to this headline"></a></h3>
+<p>Every concrete image transformation must specify its three parameters:</p>
+<ul class="simple">
+<li><p>The fully-qualified input image (including complete format specification)</p></li>
+<li><p>The complete output format (plus a pointer to enough memory to hold the
+transformed image)</p></li>
+<li><p>The transformation itself (including transformation options if there
+is more than one possible way from the input format to the output format)</p></li>
+</ul>
+<p>The main function <code class="docutils literal notranslate"><span class="pre">VmbImageTransform()</span></code> covers all required transformation parameters.
+The function uses two pointers of the <em>VmbImage</em> struct to specify the source and
+destination image and a list of <code class="docutils literal notranslate"><span class="pre">VmbTransformInfo</span></code> structs to specify the
+transformation.</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">VmbImageTransform</span> <span class="p">(</span> <span class="o">&amp;</span><span class="n">sourceImage</span> <span class="p">,</span> <span class="o">&amp;</span><span class="n">destinationImage</span> <span class="p">,</span> <span class="o">&amp;</span><span class="n">info</span> <span class="p">,</span> <span class="mi">1</span> <span class="p">);</span>
+</pre></div>
+</div>
+<p>To ease filling the structs that are needed for a successful call of
+<code class="docutils literal notranslate"><span class="pre">VmbImageTransform()</span></code>, several helper functions for initializing them are available:</p>
+<ul class="simple">
+<li><p>Methods for filling the necessary format information of either the input
+or the output image (described below in chapter Filling Image Information).</p></li>
+<li><p>Methods for filling optional transformation parameters to invoke special
+and additional functionality.</p></li>
+</ul>
+</section>
+<section id="filling-image-information">
+<h3>Filling Image Information<a class="headerlink" href="#filling-image-information" title="Permalink to this headline"></a></h3>
+<p>The Image Transform library offers several methods to find an set a
+compatible destination format.</p>
+<p>To easily set a compatible destination image format, you can initialize
+the <em>VmbImage</em> struct with:</p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">VmbSetImageInfoFromInputImage()</span></code> by providing an input image from the C or C++ API, the output layout, and
+bit depth</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">VmbSetImageInfoFromInputParameters()</span></code> by providing the input format, the input image
+size, the output layout, and bit depth</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">VmbSetImageInfoFromPixelFormat()</span></code> by providing a VmbPixelFormat_t value and the size</p></li>
+</ul>
+<p>Experts can use <code class="docutils literal notranslate"><span class="pre">VmbSetImageInfoFromString()</span></code> by providing a string
+that describes the pixel format and the size.</p>
+<p>Not recommended: Although it is not recommended, it is possible to fill
+the fields explicitly one by one.</p>
+</section>
+<section id="specifying-transformation-options">
+<h3>Specifying transformation options<a class="headerlink" href="#specifying-transformation-options" title="Permalink to this headline"></a></h3>
+<p>Depending on your application and the desired image characteristics,
+you can choose between several transformation options.</p>
+<section id="adding-color-transformations">
+<span id="index-2"></span><h4>Adding color transformations<a class="headerlink" href="#adding-color-transformations" title="Permalink to this headline"></a></h4>
+<p>A common way to transform color images is using a 3x3 matrix with method
+<code class="docutils literal notranslate"><span class="pre">VmbSetColorCorrectionMatrix3x3()</span></code>. The matrix you have to specify is a
+3x3 row order float matrix.</p>
+<div class="math notranslate nohighlight">
+\[\begin{split}\begin{pmatrix}
+rr &amp; rg &amp; rb\\
+gr &amp; gg &amp; gb\\
+br &amp; bg &amp; bb
+\end{pmatrix}\end{split}\]</div>
+<div class="line-block">
+<div class="line"><br /></div>
+</div>
+</section>
+<section id="changing-the-debayering-algorithm">
+<span id="index-3"></span><h4>Changing the debayering algorithm<a class="headerlink" href="#changing-the-debayering-algorithm" title="Permalink to this headline"></a></h4>
+<p>Every transformation of a Bayer image requires defining how to interpolate
+or combine the color pixels. For best system performance,
+a simple 2x2 demosaicing algorithm is the default. You can change this algorithm
+with an additional transformation parameter to
+<code class="docutils literal notranslate"><span class="pre">VmbImageTransform()</span></code>, which can be filled with function
+<code class="docutils literal notranslate"><span class="pre">VmbSetDebayerMode()</span></code>, using a <code class="docutils literal notranslate"><span class="pre">VmbDebayerMode()</span></code> as input.</p>
+<p>Possible values of <code class="docutils literal notranslate"><span class="pre">VmbDebayerMode()</span></code> are listed in the following table:</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 25%" />
+<col style="width: 75%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Value</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbDebayerMode2x2</p></td>
+<td><p>2x2 with green averaging (default, OpenMP only)</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbDebayerMode3x3</p></td>
+<td><p>3x3 with equal green weighting per line</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbDebayerModeLCAA*</p></td>
+<td><p>Debayering with horizontal local color anti-aliasing</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbDebayerModeLCAAV*</p></td>
+<td><p>Debayering with horizontal and vertical local color anti-aliasing</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbDebayerModeYUV422*</p></td>
+<td><p>Debayering with YUV422-alike sub-sampling</p></td>
+</tr>
+<tr class="row-odd"><td colspan="2"><p>* For 8-bit images only</p></td>
+</tr>
+</tbody>
+</table>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>If <code class="docutils literal notranslate"><span class="pre">VmbDebayerModeLCAA</span></code>, <code class="docutils literal notranslate"><span class="pre">VmbDebayerModeLCAAV</span></code>, or
+<code class="docutils literal notranslate"><span class="pre">VmbDebayerModeYUV422</span></code> is used, the input buffers serve as intermediate
+buffers for the transformation for performance reasons. To use the
+input buffer for another purpose, debayer afterwards or copy the input buffer
+beforehand.</p>
+</div>
+</section>
+</section>
+<section id="transforming-images">
+<h3>Transforming images<a class="headerlink" href="#transforming-images" title="Permalink to this headline"></a></h3>
+<p>When all the parameters of a transformation are prepared, use the pre-filled structs and call
+<code class="docutils literal notranslate"><span class="pre">VmbImageTransform()</span></code>.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Inapplicable transformation options are ignored (for example, debayering options to a
+monochrome input image).</p>
+</div>
+</section>
+</section>
+<section id="transformation-examples">
+<h2>Transformation examples<a class="headerlink" href="#transformation-examples" title="Permalink to this headline"></a></h2>
+<section id="debayering-into-an-rgb8-image">
+<h3>Debayering into an Rgb8 image<a class="headerlink" href="#debayering-into-an-rgb8-image" title="Permalink to this headline"></a></h3>
+<p>Transformation of a BayerGR8 image with 640x480
+pixels into an Rgb8 image of the same size:</p>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">VmbImage</span><span class="w">                </span><span class="n">sourceImage</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbImage</span><span class="w">                </span><span class="n">destinationImage</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbTransformInfo</span><span class="w">        </span><span class="n">info</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Set size member for verification inside API</span>
+<span class="n">sourceImage</span><span class="p">.</span><span class="n">Size</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">sourceImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">destinationImage</span><span class="p">.</span><span class="n">Size</span><span class="w">   </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">destinationImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Attach the data buffers</span>
+<span class="n">sourceImage</span><span class="p">.</span><span class="n">Data</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="n">pInBuffer</span><span class="p">;</span><span class="w"></span>
+<span class="n">destinationImage</span><span class="p">.</span><span class="n">Data</span><span class="w">   </span><span class="o">=</span><span class="w"> </span><span class="n">pOutBuffer</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Fill image info from pixel format</span>
+<span class="n">VmbSetImageInfoFromPixelFormat</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbPixelFormatBayerGR8</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="mi">640</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="mi">480</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Fill destination image info from input image</span>
+<span class="n">VmbSetImageInfoFromInputImage</span><span class="w">  </span><span class="p">(</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="n">VmbPixelLayoutRGB</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="mi">8</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="o">&amp;</span><span class="n">destinationImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Set the debayering algorithm to 2x2</span>
+<span class="n">VmbSetDebayerMode</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbDebayerMode2x2</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">info</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Perform the transformation</span>
+<span class="n">VmbImageTransform</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">destinationImage</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">info</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+</pre></div>
+</div>
+</section>
+<section id="debayering-into-a-mono8-image">
+<h3>Debayering into a Mono8 image<a class="headerlink" href="#debayering-into-a-mono8-image" title="Permalink to this headline"></a></h3>
+<p>Preparing a transformation of a BayerRG8 image with 640x480 pixels into a Mono8 image
+of the same size:</p>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">VmbImage</span><span class="w">                </span><span class="n">sourceImage</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbImage</span><span class="w">                </span><span class="n">destinationImage</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbTransformInfo</span><span class="w">        </span><span class="n">info</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Set size member for verification inside API</span>
+<span class="n">sourceImage</span><span class="p">.</span><span class="n">Size</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">sourceImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">destinationImage</span><span class="p">.</span><span class="n">Size</span><span class="w">   </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">destinationImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Attach the data buffers</span>
+<span class="n">sourceImage</span><span class="p">.</span><span class="n">Data</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="n">pInBuffer</span><span class="p">;</span><span class="w"></span>
+<span class="n">destinationImage</span><span class="p">.</span><span class="n">Data</span><span class="w">   </span><span class="o">=</span><span class="w"> </span><span class="n">pOutBuffer</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Fill image info from pixel format string</span>
+<span class="n">std</span><span class="o">::</span><span class="w"> </span><span class="n">string</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="s">&quot;PixelFormatBayerRG8&quot;</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">VmbSetImageInfoFromString</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">name</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span><span class="w"></span>
+<span class="w">                            </span><span class="k">static_cast</span><span class="w"> </span><span class="o">&lt;</span><span class="n">VmbUint32_t</span><span class="w"> </span><span class="o">&gt;</span><span class="p">(</span><span class="w"> </span><span class="n">name</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="p">),</span><span class="w"></span>
+<span class="w">                            </span><span class="mi">640</span><span class="p">,</span><span class="w"></span>
+<span class="w">                            </span><span class="mi">480</span><span class="p">,</span><span class="w"></span>
+<span class="w">                            </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Fill image info from pixel known input parameters</span>
+<span class="n">VmbSetImageInfoFromInputParameters</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbPixelFormatBayerRG8</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                                     </span><span class="mi">640</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                     </span><span class="mi">480</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                     </span><span class="n">VmbPixelLayoutMono</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                                     </span><span class="mi">8</span><span class="w"></span>
+<span class="w">                                     </span><span class="o">&amp;</span><span class="n">destinationImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Set the debayering algorithm to 3x3</span>
+<span class="n">VmbSetDebayerMode</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbDebayerMode3x3</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">info</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Perform the transformation</span>
+<span class="n">VmbImageTransform</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">destinationImage</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">info</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+</pre></div>
+</div>
+</section>
+<section id="color-correction-of-an-rgb8-image">
+<h3>Color correction of an Rgb8 image<a class="headerlink" href="#color-correction-of-an-rgb8-image" title="Permalink to this headline"></a></h3>
+<p>Applying a color correction to an Rgb8 image with 640x480 pixels:</p>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">VmbImage</span><span class="w">          </span><span class="n">sourceImage</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbImage</span><span class="w">          </span><span class="n">destinationImage</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbTransformInfo</span><span class="w">  </span><span class="n">info</span><span class="p">;</span><span class="w"></span>
+<span class="k">const</span><span class="w"> </span><span class="n">VmbFloat_t</span><span class="w">  </span><span class="n">mat</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"></span>
+<span class="w">                            </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"></span>
+<span class="w">                            </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0f</span><span class="w"> </span><span class="p">};</span><span class="w"></span>
+
+<span class="c1">// Set size member for verification inside API</span>
+<span class="n">sourceImage</span><span class="p">.</span><span class="n">Size</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">sourceImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">destinationImage</span><span class="p">.</span><span class="n">Size</span><span class="w">   </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">destinationImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Attach the data buffers</span>
+<span class="n">sourceImage</span><span class="p">.</span><span class="n">Data</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="n">pInBuffer</span><span class="p">;</span><span class="w"></span>
+<span class="n">destinationImage</span><span class="p">.</span><span class="n">Data</span><span class="w">   </span><span class="o">=</span><span class="w"> </span><span class="n">pOutBuffer</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Fill image info from pixel format</span>
+<span class="n">VmbSetImageInfoFromPixelFormat</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbPixelFormatRgb8</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="mi">640</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="mi">480</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Fill destination image info from input image</span>
+<span class="n">VmbSetImageInfoFromInputImage</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                                </span><span class="n">VmbPixelLayoutRGB</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                                </span><span class="mi">8</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                </span><span class="o">&amp;</span><span class="n">destinationImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Set the transformation matrix</span>
+<span class="n">VmbSetColorCorrectionMatrix3x3</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">mat</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">info</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Perform the transformation</span>
+<span class="n">VmbImageTransform</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">destinationImage</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">info</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+</pre></div>
+</div>
+</section>
+<section id="advanced-transformation-with-debayering">
+<h3>Advanced transformation with debayering<a class="headerlink" href="#advanced-transformation-with-debayering" title="Permalink to this headline"></a></h3>
+<p>Transformation of a BayerGR12 image with 640x480
+pixels into a Mono16 image of the same size:</p>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">VmbImage</span><span class="w">          </span><span class="n">sourceImage</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbImage</span><span class="w">          </span><span class="n">destinationImage</span><span class="p">;</span><span class="w"></span>
+<span class="n">VmbTransformInfo</span><span class="w">  </span><span class="n">info</span><span class="w"> </span><span class="p">[</span><span class="mi">2</span><span class="p">];</span><span class="w"></span>
+<span class="k">const</span><span class="w"> </span><span class="n">VmbFloat_t</span><span class="w">  </span><span class="n">mat</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"></span>
+<span class="w">                            </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"></span>
+<span class="w">                            </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0f</span><span class="w"> </span><span class="p">};</span><span class="w"></span>
+
+<span class="c1">// Set size member for verification inside API</span>
+<span class="n">sourceImage</span><span class="p">.</span><span class="n">Size</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">sourceImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+<span class="n">destinationImage</span><span class="p">.</span><span class="n">Size</span><span class="w">   </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">destinationImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Attach the data buffers</span>
+<span class="n">sourceImage</span><span class="p">.</span><span class="n">Data</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="n">pInBuffer</span><span class="p">;</span><span class="w"></span>
+<span class="n">destinationImage</span><span class="p">.</span><span class="n">Data</span><span class="w">   </span><span class="o">=</span><span class="w"> </span><span class="n">pOutBuffer</span><span class="p">;</span><span class="w"></span>
+
+<span class="c1">// Fill image info from pixel format</span>
+<span class="n">VmbSetImageInfoFromPixelFormat</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbPixelFormatRgb8</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="mi">640</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="mi">480</span><span class="p">,</span><span class="w"></span>
+<span class="w">                                 </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Fill destination image info from input image</span>
+<span class="n">VmbSetImageInfoFromInputImage</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                             </span><span class="n">VmbPixelLayoutMono</span><span class="w"> </span><span class="p">,</span><span class="w"></span>
+<span class="w">                             </span><span class="mi">16</span><span class="p">,</span><span class="w"></span>
+<span class="w">                             </span><span class="o">&amp;</span><span class="n">destinationImage</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Set the debayering algorithm to 2x2</span>
+<span class="n">VmbSetDebayerMode</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">VmbDebayerMode2x2</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">info</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Set the transformation matrix</span>
+<span class="n">VmbSetColorCorrectionMatrix3x3</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">mat</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">info</span><span class="w"> </span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+
+<span class="c1">// Perform the transformation</span>
+<span class="n">VmbImageTransform</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sourceImage</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">destinationImage</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">info</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="p">);</span><span class="w"></span>
+</pre></div>
+</div>
+</section>
+</section>
+<section id="function-reference">
+<h2>Function reference<a class="headerlink" href="#function-reference" title="Permalink to this headline"></a></h2>
+<section id="information">
+<h3>Information<a class="headerlink" href="#information" title="Permalink to this headline"></a></h3>
+<section id="vmbgetversion">
+<h4>VmbGetVersion()<a class="headerlink" href="#vmbgetversion" title="Permalink to this headline"></a></h4>
+<p>This function inquires the library version. It can be called at anytime, even before
+the library is initialized.</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 6%" />
+<col style="width: 18%" />
+<col style="width: 17%" />
+<col style="width: 60%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Name</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>out</p></td>
+<td><p>VmbUint32_t*</p></td>
+<td><p>pValue</p></td>
+<td><p>Contains the library version</p></td>
+</tr>
+</tbody>
+</table>
+<p><strong>VmbErrorBadParameter</strong>: If the given pointer is NULL</p>
+</section>
+<section id="vmbgeterrorinfo">
+<h4>VmbGetErrorInfo()<a class="headerlink" href="#vmbgeterrorinfo" title="Permalink to this headline"></a></h4>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 6%" />
+<col style="width: 19%" />
+<col style="width: 18%" />
+<col style="width: 57%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Name</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>VmbError_t</p></td>
+<td><p>errorCode</p></td>
+<td><p>The error code to get a readable string for</p></td>
+</tr>
+<tr class="row-odd"><td><p>out</p></td>
+<td><p>VmbANSIChar_t*</p></td>
+<td><p>pInfo</p></td>
+<td><p>Pointer to a zero terminated string that <br>
+contains error information on return</p></td>
+</tr>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>maxInfoLength</p></td>
+<td><p>The length of the pInfo buffer</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="vmbgetapiinfostring">
+<h4>VmbGetApiInfoString()<a class="headerlink" href="#vmbgetapiinfostring" title="Permalink to this headline"></a></h4>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 6%" />
+<col style="width: 19%" />
+<col style="width: 18%" />
+<col style="width: 57%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Name</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>VmbAPIInfo_t</p></td>
+<td><p>infoType</p></td>
+<td><p>Type of information to return</p></td>
+</tr>
+<tr class="row-odd"><td><p>out</p></td>
+<td><p>VmbANSIChar_t*</p></td>
+<td><p>pInfo</p></td>
+<td><p>Pointer to a zero terminated string that <br></p></td>
+</tr>
+<tr class="row-even"><td></td>
+<td></td>
+<td></td>
+<td><p>contains error information on return</p></td>
+</tr>
+<tr class="row-odd"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>maxInfoLength</p></td>
+<td><p>The length of the pInfo buffer</p></td>
+</tr>
+</tbody>
+</table>
+<div class="line-block">
+<div class="line"><strong>VmbErrorBadParameter</strong>: If the given pointer is NULL</div>
+<div class="line"><strong>VmbErrorMoreData</strong>: If maxInfoLength is too small to hold the complete information</div>
+</div>
+<p>The parameter <em>infoType</em> may have one of the following values:</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 29%" />
+<col style="width: 71%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Value</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbAPIInfoAll</p></td>
+<td><p>Return all information about the API</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbAPIInfoPlatform</p></td>
+<td><p>Return information about the platform (x86 or x64)</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbAPIInfoBuild</p></td>
+<td><p>Return info about the API build (debug or release)</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbApiInfoTechnology</p></td>
+<td><p>Return info about supported technologies, like OpenMP</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+</section>
+<section id="transformation">
+<h3>Transformation<a class="headerlink" href="#transformation" title="Permalink to this headline"></a></h3>
+<section id="vmbimagetransform">
+<h4>VmbImageTransform()<a class="headerlink" href="#vmbimagetransform" title="Permalink to this headline"></a></h4>
+<p>This function transforms images from one pixel format to another with possible transformation
+options. The transformation is defined by the provided images and the desired
+transformation.</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 10%" />
+<col style="width: 31%" />
+<col style="width: 20%" />
+<col style="width: 40%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Name</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>const VmbImage*</p></td>
+<td><p>pSource</p></td>
+<td><p>Image to transform</p></td>
+</tr>
+<tr class="row-odd"><td><p>in/out</p></td>
+<td><p>VmbImage*</p></td>
+<td><p>pDestination</p></td>
+<td><p>Destination image</p></td>
+</tr>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>const VmbTransformInfo*</p></td>
+<td><p>pParameter</p></td>
+<td><p>Optional transform parameters</p></td>
+</tr>
+<tr class="row-odd"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>parameterCount</p></td>
+<td><p>Number of transform parameters</p></td>
+</tr>
+</tbody>
+</table>
+<p><strong>VmbErrorBadParameter</strong>:</p>
+<ul class="simple">
+<li><p>If any image pointer or their “Data” members is NULL</p></li>
+<li><p>If Width or Height doesn’t match between source and destination</p></li>
+<li><p>If one of the parameters for the conversion does not fit</p></li>
+</ul>
+<div class="line-block">
+<div class="line"><strong>VmbErrorStructSize</strong>: If the image structs size don’t match their “Size” member</div>
+<div class="line"><strong>VmbErrorNotImplemented</strong>: If there is no supported transformation between source and destination format</div>
+</div>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>Fill the source and destination image info struct with
+<code class="docutils literal notranslate"><span class="pre">VmbSetImageInfoFromPixelFormat()</span></code> or
+<code class="docutils literal notranslate"><span class="pre">VmbSetImageInfoFromString()</span></code> and keep those structs as template. For
+calls to transform, attach the image to the “Data” member. When set, the
+optional parameters are constraints on the transform.</p>
+</div>
+</section>
+</section>
+<section id="helper-functions">
+<h3>Helper functions<a class="headerlink" href="#helper-functions" title="Permalink to this headline"></a></h3>
+<section id="vmbsetimageinfofrominputimage">
+<h4>VmbSetImageInfoFromInputImage()<a class="headerlink" href="#vmbsetimageinfofrominputimage" title="Permalink to this headline"></a></h4>
+<p>This function sets image info member values in <em>VmbImage</em> from input <em>VmbImage</em>.
+Use simple target layout and bit per
+pixel values to set the desired target format.</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 9%" />
+<col style="width: 20%" />
+<col style="width: 22%" />
+<col style="width: 49%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Name</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>const VmbImage*</p></td>
+<td><p>pInputmage</p></td>
+<td><p>Image source to transform</p></td>
+</tr>
+<tr class="row-odd"><td><p>in</p></td>
+<td><p>VmbPixelLayout_t</p></td>
+<td><p>OutputPixelLayout</p></td>
+<td><p>Pixel layout of the target image</p></td>
+</tr>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>BitPerPixel</p></td>
+<td><p>Bits per pixel of the target image</p></td>
+</tr>
+<tr class="row-odd"><td><p>in/out</p></td>
+<td><p>VmbImage*</p></td>
+<td><p>pOutputImage</p></td>
+<td><p>Pointer to Vmb image to set the info to</p></td>
+</tr>
+</tbody>
+</table>
+<p><strong>VmbErrorBadParameter</strong>:</p>
+<ul class="simple">
+<li><p>If the given pointer is NULL</p></li>
+<li><p>If one of the parameters for the conversion does not fit</p></li>
+</ul>
+<p><strong>VmbErrorNotImplemented</strong>: Transformation is not supported</p>
+</section>
+<section id="vmbsetimageinfofrominputparameters">
+<h4>VmbSetImageInfoFromInputParameters()<a class="headerlink" href="#vmbsetimageinfofrominputparameters" title="Permalink to this headline"></a></h4>
+<p>Set image info member values in <em>VmbImage</em> from pixel format.
+Use simple target layout and bit per pixel
+values to set the desired target format.</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 9%" />
+<col style="width: 20%" />
+<col style="width: 22%" />
+<col style="width: 49%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Name</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>VmbPixelFormat_t</p></td>
+<td><p>pInputmage</p></td>
+<td><p>Image source to transform</p></td>
+</tr>
+<tr class="row-odd"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>Width</p></td>
+<td><p>Image width in pixels</p></td>
+</tr>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>Height</p></td>
+<td><p>Image height in pixels</p></td>
+</tr>
+<tr class="row-odd"><td><p>in</p></td>
+<td><p>VmbPixelLayout_t</p></td>
+<td><p>OutputPixelLayout</p></td>
+<td><p>Pixel layout of the target image</p></td>
+</tr>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>BitPerPixel</p></td>
+<td><p>Bits per pixel of the target image</p></td>
+</tr>
+<tr class="row-odd"><td><p>in/out</p></td>
+<td><p>VmbImage*</p></td>
+<td><p>pOutputImage</p></td>
+<td><p>Pointer to Vimba image to set the info to</p></td>
+</tr>
+</tbody>
+</table>
+<div class="line-block">
+<div class="line"><strong>VmbErrorBadParameter</strong>: If the given pointer is NULL or one of the image struct members is invalid</div>
+<div class="line"><strong>VmbErrorNotImplemented</strong>: Transformation is not supported</div>
+</div>
+</section>
+<section id="vmbsetimageinfofrompixelformat">
+<h4>VmbSetImageInfoFromPixelFormat()<a class="headerlink" href="#vmbsetimageinfofrompixelformat" title="Permalink to this headline"></a></h4>
+<p>This is an expert function. Set image info member values in <em>VmbImage</em> from pixel format.
+As a reference, refer to section <a class="reference internal" href="#supported-transformations"><span class="std std-ref">Supported transformations</span></a>.</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 9%" />
+<col style="width: 24%" />
+<col style="width: 15%" />
+<col style="width: 52%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Name</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>const VmbANSIChar_t*</p></td>
+<td><p>imageFormat</p></td>
+<td><p>Image format as a (const) case insensitive <br>
+string that is either a PixelFormat <br>
+(Vmb is optional) or a pixel struct name</p></td>
+</tr>
+<tr class="row-odd"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>StringLength</p></td>
+<td><p>The length of the pixel format string</p></td>
+</tr>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>Width</p></td>
+<td><p>Image width in pixels</p></td>
+</tr>
+<tr class="row-odd"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>Height</p></td>
+<td><p>Image height in pixels</p></td>
+</tr>
+<tr class="row-even"><td><p>in/out</p></td>
+<td><p>VmbImage*</p></td>
+<td><p>pImage</p></td>
+<td><p>Pointer to Vimba image to set the info to</p></td>
+</tr>
+</tbody>
+</table>
+<div class="line-block">
+<div class="line"><strong>VmbErrorBadParameter</strong>: If the given pointer is NULL or one of the image struct members is invalid</div>
+<div class="line"><strong>VmbErrorStructSize</strong>: If the image struct size doesn’t match its “Size” member</div>
+</div>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p><em>VmbPixelFormat_t</em> can be obtained from the C/C++ API’s frame or from the
+<em>PixelFormat</em> feature. For displaying images, you can use
+<code class="docutils literal notranslate"><span class="pre">VmbSetImageInfoFromString()</span></code> or to look up a matching VmbPixelFormat.</p>
+</div>
+</section>
+<section id="vmbsetimageinfofromstring">
+<h4>VmbSetImageInfoFromString()<a class="headerlink" href="#vmbsetimageinfofromstring" title="Permalink to this headline"></a></h4>
+<p>This is an expert function. Set image info member values in <em>VmbImage</em> from string.</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 9%" />
+<col style="width: 24%" />
+<col style="width: 15%" />
+<col style="width: 52%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Name</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>const VmbANSIChar_t*</p></td>
+<td><p>imageFormat</p></td>
+<td><p>Image format as a (const) case insensitive <br>
+string that is either a PixelFormat <br>
+(Vmb is optional) or a pixel struct name</p></td>
+</tr>
+<tr class="row-odd"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>StringLength</p></td>
+<td><p>The length of the pixel format string</p></td>
+</tr>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>Width</p></td>
+<td><p>Image width in pixels</p></td>
+</tr>
+<tr class="row-odd"><td><p>in</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>Height</p></td>
+<td><p>Image height in pixels</p></td>
+</tr>
+<tr class="row-even"><td><p>in/out</p></td>
+<td><p>VmbImage*</p></td>
+<td><p>pImage</p></td>
+<td><p>Pointer to Vimba image to set the info to</p></td>
+</tr>
+</tbody>
+</table>
+<p><strong>VmbErrorBadParameter</strong>:</p>
+<ul class="simple">
+<li><p>If one of the given pointers or the “Data” member in the image is NULL</p></li>
+<li><p>If Width or Height don’t match between source and destination</p></li>
+<li><p>If one of the parameters for the conversion does not fit</p></li>
+</ul>
+<div class="line-block">
+<div class="line"><strong>VmbErrorStructSize</strong>: If the image struct size doesn’t match its “Size” member</div>
+<div class="line"><strong>VmbErrorResources</strong>: If the there was a memory fault during processing</div>
+</div>
+</section>
+<section id="vmbsetdebayermode">
+<h4>VmbSetDebayerMode()<a class="headerlink" href="#vmbsetdebayermode" title="Permalink to this headline"></a></h4>
+<p>Set transformation options to a predefined debayering mode.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Debayering is only applicable to image formats with both an even width and an
+even height.</p>
+</div>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 9%" />
+<col style="width: 22%" />
+<col style="width: 16%" />
+<col style="width: 53%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Name</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>VmbDebayerMode_t</p></td>
+<td><p>DebayerMode</p></td>
+<td><p>Used for debayering the source raw        <br>
+image. Default: 2x2.</p></td>
+</tr>
+<tr class="row-odd"><td><p>in/out</p></td>
+<td><p>VmbTransformInfo_t*</p></td>
+<td><p>pTransformInfo</p></td>
+<td><p>Parameter that contains information about <br>
+special transform functionality</p></td>
+</tr>
+</tbody>
+</table>
+<p>VmbErrorBadParameter: If the given pointer is NULL</p>
+</section>
+<section id="vmbsetcolorcorrectionmatrix3x3">
+<h4>VmbSetColorCorrectionMatrix3x3()<a class="headerlink" href="#vmbsetcolorcorrectionmatrix3x3" title="Permalink to this headline"></a></h4>
+<p>Set transformation options to a 3x3 color matrix transformation.</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 9%" />
+<col style="width: 22%" />
+<col style="width: 16%" />
+<col style="width: 53%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"></th>
+<th class="head"><p>Type</p></th>
+<th class="head"><p>Name</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>in</p></td>
+<td><p>const VmbFloat_t*</p></td>
+<td><p>DebayerMode</p></td>
+<td><p>Color correction matrix</p></td>
+</tr>
+<tr class="row-odd"><td><p>in/out</p></td>
+<td><p>VmbTransformInfo_t*</p></td>
+<td><p>pTransformInfo</p></td>
+<td><p>Parameter that contains information about <br>
+special transform functionality</p></td>
+</tr>
+</tbody>
+</table>
+<p><strong>VmbErrorBadParameter</strong>: If one of the given pointers is NULL</p>
+</section>
+</section>
+</section>
+<section id="structs">
+<h2>Structs<a class="headerlink" href="#structs" title="Permalink to this headline"></a></h2>
+<section id="vmbimage">
+<h3>VmbImage<a class="headerlink" href="#vmbimage" title="Permalink to this headline"></a></h3>
+<p>VmbImage encapsulates image data for the transformation function.</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 14%" />
+<col style="width: 11%" />
+<col style="width: 75%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head" colspan="2"><p>Struct entry</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbUint32_t</p></td>
+<td><p>Size</p></td>
+<td><p>Size of the structure</p></td>
+</tr>
+<tr class="row-odd"><td><p>void*</p></td>
+<td><p>Data</p></td>
+<td><p>Pointer to the payload received from the C/C++ API <br> or to the display
+image data</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbImageInfo</p></td>
+<td><p>ImageInfo</p></td>
+<td><p>Internal information data for mapping the images <br>
+to the correct transformation. Set with <br>
+VmbSetImageInfo() helper functions from VmbPixelFormat_t <br>
+or format string</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="vmbimageinfo">
+<h3>VmbImageInfo<a class="headerlink" href="#vmbimageinfo" title="Permalink to this headline"></a></h3>
+<p>VmbImageInfo contains image information needed for the transformation function.</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 14%" />
+<col style="width: 11%" />
+<col style="width: 75%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head" colspan="2"><p>Struct entry</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbUint32_t</p></td>
+<td><p>Width</p></td>
+<td><p>Image width in pixels or sub-pixels for macro pixel <br>
+formats like YUV</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbUint32_t</p></td>
+<td><p>Height</p></td>
+<td><p>The height of the image in pixels</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbInt32_t</p></td>
+<td><p>Stride</p></td>
+<td><p>The offset from the current line to the next line, <br>
+a value not equal to Width is currently not supported <br></p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbPixelInfo</p></td>
+<td><p>PixelInfo</p></td>
+<td><p>Information about the pixel format</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="vmbpixelinfo">
+<h3>VmbPixelInfo<a class="headerlink" href="#vmbpixelinfo" title="Permalink to this headline"></a></h3>
+<p>The pixel format of an image is described within <code class="docutils literal notranslate"><span class="pre">VmbPixelInfo</span></code>.</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 15%" />
+<col style="width: 11%" />
+<col style="width: 73%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head" colspan="2"><p>Struct entry</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbUint32_t</p></td>
+<td><p>VmbUint32_t</p></td>
+<td><p>Number of bits for one image pixel or sub-pixel in macro <br></p>
+<p>pixel formats</p>
+</td>
+</tr>
+<tr class="row-odd"><td><p>VmbUint32_t</p></td>
+<td><p>BitsUsed</p></td>
+<td><p>Number of bits used per pixel, e.g. RGB12 has 48 bits per <br></p>
+<p>pixel and 36 bits used</p>
+</td>
+</tr>
+<tr class="row-even"><td><p>VmbAlignment_t</p></td>
+<td><p>Alignment</p></td>
+<td><p>For image formats where BitsPerPixel is not equal to <br></p>
+<p>bitsUsed, the alignment specifies the bit layout of the pixel</p>
+</td>
+</tr>
+<tr class="row-odd"><td><p>VmbEndianness_t</p></td>
+<td><p>Endianness</p></td>
+<td><p>Specifies the endianness of pixels that are larger than <br></p>
+<p>one byte</p>
+</td>
+</tr>
+<tr class="row-even"><td><p>VmbPixelLayout_t</p></td>
+<td><p>PixelLayout</p></td>
+<td><p>Describes the layout of the pixel component, e.g., RGB or <br></p>
+<p>BGR layout</p>
+</td>
+</tr>
+<tr class="row-odd"><td><p>VmbBayerPattern_t</p></td>
+<td><p>BayerPattern</p></td>
+<td><p>For raw image data, this field specifies the color filter <br> array layout of the sensor</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="vmbtransforminfo">
+<h3>VmbTransformInfo<a class="headerlink" href="#vmbtransforminfo" title="Permalink to this headline"></a></h3>
+<p>Transformation parameters given as a pointer to a <code class="docutils literal notranslate"><span class="pre">VmbTransformInfo</span></code> struct are
+used to invoke special and additional functionality, which is applied while
+interpreting the source image (debayering) or transforming the images (color correction).</p>
+<table class="docutils align-default">
+<colgroup>
+<col style="width: 25%" />
+<col style="width: 16%" />
+<col style="width: 58%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head" colspan="2"><p>Struct entry</p></th>
+<th class="head"><p>Purpose</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbTransformType_t</p></td>
+<td><p>TransformType</p></td>
+<td><p>Transform info type, may be  <br>
+VmbTransformTypeDebayerMode  <br>
+or VmbTransformTypeColorCorrection Matrix</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbTransformParameter</p></td>
+<td><p>Parameter</p></td>
+<td><p>Transform info variant, may be <br>
+VmbTransformParameterDebayer <br>
+or VmbTransformParameterMatrix3x3</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="pythonAPIManual.html" class="btn btn-neutral float-left" title="Python API Manual" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="troubleshooting.html" class="btn btn-neutral float-right" title="Troubleshooting" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/index.html b/VimbaX/doc/VimbaX_Documentation/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..035e391398b325f4052c4f8f58b8dad6c2519ead
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/index.html
@@ -0,0 +1,234 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Vimba X Developer Guide &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="About Vimba X" href="about.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="#" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="#">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="#" class="icon icon-home"></a> &raquo;</li>
+      <li>Vimba X Developer Guide</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vimba-x-developer-guide">
+<h1>Vimba X Developer Guide<a class="headerlink" href="#vimba-x-developer-guide" title="Permalink to this headline"></a></h1>
+<div class="toctree-wrapper compound">
+<p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="about.html#compatibility">Compatibility</a></li>
+<li class="toctree-l2"><a class="reference internal" href="about.html#supported-features">Supported features</a></li>
+<li class="toctree-l2"><a class="reference internal" href="about.html#installation">Installation</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="migrationGuide.html#migration-from-vimba">Migration from Vimba</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="examplesOverview.html#compatibility-and-usage">Compatibility and usage</a></li>
+<li class="toctree-l2"><a class="reference internal" href="examplesOverview.html#vmbc-examples">VmbC examples</a></li>
+<li class="toctree-l2"><a class="reference internal" href="examplesOverview.html#vmbcpp-examples">VmbCPP examples</a></li>
+<li class="toctree-l2"><a class="reference internal" href="examplesOverview.html#vmbpy-examples">VmbPy examples</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="toctree-wrapper compound">
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="driverInstaller.html#main-window">Main window</a></li>
+<li class="toctree-l2"><a class="reference internal" href="driverInstaller.html#changing-drivers">Changing drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="driverInstaller.html#command-line-options">Command line options</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="fwUpdater.html#firmware-updater">Firmware Updater</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="viewerGuide.html#overview">Overview</a></li>
+<li class="toctree-l2"><a class="reference internal" href="viewerGuide.html#setting-up-your-camera">Setting up your camera</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="sdkManual.html#architecture-and-apis">Architecture and APIs</a></li>
+<li class="toctree-l2"><a class="reference internal" href="sdkManual.html#gentl-modules">GenTL modules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="sdkManual.html#features">Features</a></li>
+<li class="toctree-l2"><a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation">TL activation and deactivation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="sdkManual.html#synchronous-and-asynchronous-image-acquisition">Synchronous and asynchronous image acquisition</a></li>
+<li class="toctree-l2"><a class="reference internal" href="sdkManual.html#notifications">Notifications</a></li>
+<li class="toctree-l2"><a class="reference internal" href="sdkManual.html#building-applications">Building applications</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="cAPIManual.html#introduction-to-the-api">Introduction to the API</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIManual.html#api-usage">API usage</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="cppAPIManual.html#introduction-to-the-api">Introduction to the API</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cppAPIManual.html#api-usage">API usage</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="pythonAPIManual.html#introduction-to-the-api">Introduction to the API</a></li>
+<li class="toctree-l2"><a class="reference internal" href="pythonAPIManual.html#compatibility">Compatibility</a></li>
+<li class="toctree-l2"><a class="reference internal" href="pythonAPIManual.html#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="pythonAPIManual.html#general-aspects-of-the-api">General aspects of the API</a></li>
+<li class="toctree-l2"><a class="reference internal" href="pythonAPIManual.html#api-usage">API usage</a></li>
+<li class="toctree-l2"><a class="reference internal" href="pythonAPIManual.html#troubleshooting">Troubleshooting</a></li>
+<li class="toctree-l2"><a class="reference internal" href="pythonAPIManual.html#logging">Logging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="imagetransformManual.html#general-aspects-of-the-library">General aspects of the library</a></li>
+<li class="toctree-l2"><a class="reference internal" href="imagetransformManual.html#variants">Variants</a></li>
+<li class="toctree-l2"><a class="reference internal" href="imagetransformManual.html#supported-image-data-formats">Supported image data formats</a></li>
+<li class="toctree-l2"><a class="reference internal" href="imagetransformManual.html#supported-transformations">Supported transformations</a></li>
+<li class="toctree-l2"><a class="reference internal" href="imagetransformManual.html#api-usage">API usage</a></li>
+<li class="toctree-l2"><a class="reference internal" href="imagetransformManual.html#transformation-examples">Transformation examples</a></li>
+<li class="toctree-l2"><a class="reference internal" href="imagetransformManual.html#function-reference">Function reference</a></li>
+<li class="toctree-l2"><a class="reference internal" href="imagetransformManual.html#structs">Structs</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="toctree-wrapper compound">
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html#error-codes">Error codes</a></li>
+<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html#general-issues">General issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html#issues-by-camera-interface">Issues by camera interface</a></li>
+<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html#typical-linux-issues">Typical Linux issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html#technical-support">Technical support</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="legalInformation.html#licensing-terms">Licensing terms</a></li>
+<li class="toctree-l2"><a class="reference internal" href="legalInformation.html#open-source-licenses">Open source licenses</a></li>
+<li class="toctree-l2"><a class="reference internal" href="legalInformation.html#trademarks-and-copyright">Trademarks and copyright</a></li>
+<li class="toctree-l2"><a class="reference internal" href="legalInformation.html#contact-address">Contact address</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="toctree-wrapper compound">
+</div>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="about.html" class="btn btn-neutral float-right" title="About Vimba X" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/legalInformation.html b/VimbaX/doc/VimbaX_Documentation/legalInformation.html
new file mode 100644
index 0000000000000000000000000000000000000000..1e2e54941ecbfff1cfcd243b828f83c8582aedbe
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/legalInformation.html
@@ -0,0 +1,615 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Legal Information &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Index" href="genindex.html" />
+    <link rel="prev" title="Troubleshooting" href="troubleshooting.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Legal Information</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#licensing-terms">Licensing terms</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#terms-and-conditions-for-using-free-vimba-x-software">Terms and Conditions for Using Free Vimba X Software</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#art-1-scope-of-application">Art. 1 Scope of Application</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#art-2-software-description-intended-use">Art. 2 Software Description, Intended Use</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#art-3-provision-of-software">Art. 3 Provision of Software</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#art-4-rights-to-use">Art. 4 Rights to Use</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#art-5-defects-as-to-quality-and-defects-of-title-liability">Art. 5 Defects as to Quality and Defects of Title, Liability</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#art-6-place-of-performance-place-of-jurisdiction-choice-of-law">Art. 6 Place of Performance, Place of Jurisdiction, Choice of Law</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#open-source-licenses">Open source licenses</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#apache">Apache</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#bsd-3-clause">BSD-3-Clause</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#clserall-license">CLSerAll LICENSE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#genicam-license">GENICAM LICENSE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#lgpl-license">LGPL LICENSE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#libtiff-license">LIBTIFF LICENSE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#miniz-license">MiniZ LICENSE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#mit-license">MIT LICENSE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#pcre2-licence">PCRE2 LICENCE</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#the-basic-library-functions">THE BASIC LIBRARY FUNCTIONS</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#pcre2-just-in-time-compilation-support">PCRE2 JUST-IN-TIME COMPILATION SUPPORT</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#stack-less-just-in-time-compiler">STACK-LESS JUST-IN-TIME COMPILER</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#the-bsd-licence">THE “BSD” LICENCE</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#qt-license">Qt LICENSE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#qwt-widget-library">Qwt Widget Library</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#xs3p-license">xs3p LICENSE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#xxhash-license">xxHash LICENSE</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#trademarks-and-copyright">Trademarks and copyright</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#contact-address">Contact address</a></li>
+</ul>
+</li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Legal Information</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="legal-information">
+<h1>Legal Information<a class="headerlink" href="#legal-information" title="Permalink to this headline"></a></h1>
+<section id="licensing-terms">
+<h2>Licensing terms<a class="headerlink" href="#licensing-terms" title="Permalink to this headline"></a></h2>
+<section id="terms-and-conditions-for-using-free-vimba-x-software">
+<h3>Terms and Conditions for Using Free Vimba X Software<a class="headerlink" href="#terms-and-conditions-for-using-free-vimba-x-software" title="Permalink to this headline"></a></h3>
+<p>Provided by Allied Vision Technologies GmbH</p>
+<section id="art-1-scope-of-application">
+<h4>Art. 1 Scope of Application<a class="headerlink" href="#art-1-scope-of-application" title="Permalink to this headline"></a></h4>
+<ol class="arabic simple">
+<li><p>These Terms and Conditions contain the terms and conditions for the provision
+and use (hereinafter referred to as “Terms and Conditions”) of “Vimba X“
+software (hereinafter referred to as “Software”) that is provided free of charge.</p></li>
+<li><p>Our offer regarding the provision of the Software is not directed to consumers;
+we do not grant any usage rights to consumers. A consumer is an individual that
+enters into a legal transaction for purposes that cannot be attributed to its
+commercial or self-employed activities.</p></li>
+<li><p>The Terms and Conditions below only apply to business organizations, legal
+entities under public law, or separate funds under public law. By downloading
+the Software you confirm that you are one of the entities described in sentence 1
+or represent one of these. A business person is an individual, a legal entity or
+partnership having legal capacity that enters into a legal transaction in order
+to carry out its commercial or self-employed activities.</p></li>
+<li><p>When you wish to obtain a free Software version, you will enter into an agreement
+with Allied Vision Technologies GmbH, Taschenweg 2a, 07646 Stadtroda, Germany,
+email: <a class="reference external" href="mailto:info&#37;&#52;&#48;alliedvision&#46;com">info<span>&#64;</span>alliedvision<span>&#46;</span>com</a>.</p></li>
+</ol>
+</section>
+<section id="art-2-software-description-intended-use">
+<h4>Art. 2 Software Description, Intended Use<a class="headerlink" href="#art-2-software-description-intended-use" title="Permalink to this headline"></a></h4>
+<ol class="arabic simple">
+<li><p>“Vimba X” Software is a cross-platform software development kit (SDK)
+for Allied Vision cameras. The Software shall be used to control the
+cameras offered by Allied Vision (“intended use”). For a detailed
+description of the current Software, please go
+to <a class="reference external" href="https://www.alliedvision.com/en/products/vimba-sdk/">https://www.alliedvision.com/en/products/vimba-sdk/</a>. A detailed
+description of the Software version that you have installed is available
+in the Vimba installation folder.</p></li>
+<li><p>The description also contains the system requirements for the installation
+of the Software and compatibility data (operating conditions). For further
+application notes please visit our support section on
+<a class="reference external" href="https://www.alliedvision.com/en/support/technical-papers-knowledge-base.html">https://www.alliedvision.com/en/support/technical-papers-knowledge-base.html</a>.</p></li>
+<li><p>We offer you a free Software version for the intended use as defined in
+Art. 4 of these Terms and Conditions.</p></li>
+</ol>
+</section>
+<section id="art-3-provision-of-software">
+<h4>Art. 3 Provision of Software<a class="headerlink" href="#art-3-provision-of-software" title="Permalink to this headline"></a></h4>
+<ol class="arabic simple">
+<li><p>You will receive the Software in executable form (object code),
+consisting of a computer program and an electronic user documentation
+that is integrated into the program. The user documentation basically
+consists of electronic help files. In addition, we will provide you with
+a source code interface in the programming language C++,
+which also forms part of the Software.</p></li>
+<li><p>The free Software version can be downloaded from our website
+<a class="reference external" href="https://www.alliedvision.com">https://www.alliedvision.com</a>.</p></li>
+<li><p>We are not obligated to provide any other services, such as training, instruction or consulting.</p></li>
+</ol>
+</section>
+<section id="art-4-rights-to-use">
+<h4>Art. 4 Rights to Use<a class="headerlink" href="#art-4-rights-to-use" title="Permalink to this headline"></a></h4>
+<ol class="arabic simple">
+<li><p>We reserve the copyright and any other industrial property rights in and to
+the Software. To the extent that the Software contains software portions
+created by third parties, we possess the prerequisite rights and title to
+grant you the rights described in these Terms and Conditions. To the extent
+that certain portions of the Software are open source products, we will
+comply with the terms and conditions stipulated in the corresponding open
+source license agreement (e.g., by providing you with the corresponding
+open source license agreements and, if applicable, with the source code
+of the open source software together with the Software).</p></li>
+<li><p>We reserve any rights in and to the Software to the extent that they were
+not expressly granted to you under these Terms and Conditions.</p></li>
+<li><p>We grant you a non-exclusive, indefinite and world-wide right to use the
+Software as intended under this Agreement.</p>
+<ol class="loweralpha simple">
+<li><p>We grant you the right to upload, display and run the Software on your
+hardware environment, to transfer it to other hardware and to store it.</p></li>
+<li><p>We grant you the right to integrate the Software into our cameras or other
+devices/machines via the published interfaces, or to offer such integration
+services to your customers to allow you or your customers to use our
+cameras together with the connected devices/machines to the extent
+supported by the functionality of our Software.</p></li>
+<li><p>We grant you the right to dispose of the Software together with the cameras
+or, as set forth in subsection b), with the connected devices/machines or
+to sell the Software in this form to your customers after you have
+rendered integration services; you are authorized to grant your customers
+non-exclusive, world-wide and indefinite rights to use the Software –
+however only in connection with the use of our cameras – in accordance
+with Art. 4 par. 3 subsections a), and c) through e) in conjunction with
+Art. 4 par. 4.</p></li>
+<li><p>You may use the Software for the purposes indicated in subsections
+a) through c), and reproduce the Software for these purposes and for
+the purpose of making a backup copy and in order to back up data as
+customary. In addition, you have the right to reproduce and modify
+the Software in order to ensure the intended use of the Software,
+including error correction.</p></li>
+<li><p>The person authorized to use the Software may monitor, examine or test
+the operation of this program without our prior consent in order to
+determine the concepts and principles underlying a certain program
+component, provided, however, that this occurs by means of permissible
+activities for the upload, display, running, transfer or storage of
+the program.</p></li>
+</ol>
+</li>
+<li><p>Unless you have obtained our prior written consent, you are not
+authorized to</p>
+<ol class="loweralpha simple">
+<li><p>reproduce, to distribute, communicate to the public or make the Software
+available to the public beyond the permitted scope as set forth in
+Art. 4 par. 3 of this Agreement,</p></li>
+<li><p>to rent or loan the Software, to use it on behalf of or together
+with a third party or to facilitate any other third-party use, unless
+you are authorized to do so in accordance with Art. 4, par 3, subsection c),</p></li>
+<li><p>to modify, rearrange, translate or decompile the Software,
+unless this act is permissible under Art. 4 par. 3. The statutory
+provisions on decompiling set forth in section 69e of the German
+Copyright Act (UrhG) remain unaffected.</p></li>
+<li><p>to change, modify, alter or remove the copyright notices, other
+proprietary legends or notices, serial numbers, and any other features
+contained in the Software and serving the purpose of identification,</p></li>
+<li><p>to use the Software with a camera or to integrate it into a camera
+that is not offered by us or that you create yourself or have created,</p></li>
+<li><p>to use the Software or portions thereof in order to create your own
+control software or to integrate the Software or portions thereof into
+your own control software.</p></li>
+</ol>
+</li>
+</ol>
+<p>Any use beyond the permissible use set forth in these Terms and Conditions
+constitutes a breach of this Agreement that entitles us to injunctive relief
+and damages.</p>
+</section>
+<section id="art-5-defects-as-to-quality-and-defects-of-title-liability">
+<h4>Art. 5 Defects as to Quality and Defects of Title, Liability<a class="headerlink" href="#art-5-defects-as-to-quality-and-defects-of-title-liability" title="Permalink to this headline"></a></h4>
+<ol class="arabic simple">
+<li><p>With regard to Software versions provided free of charge and in
+the event of defects as to quality and defects in title we will be
+liable for damages or reimbursement of wasted expenditures only to
+the extent set forth below. You are not entitled to subsequent
+improvement. However, in the event that you notify us of a defect
+in the Software, we have the right to correct the defect, although
+we are not obligated to do so. We have the right to restrict our support
+and assistance to the then current Software version.</p></li>
+<li><p>With regard to free Software, we are liable for damages or reimbursement
+of wasted expenditures only in the event of intentional wrongdoing or
+gross negligence and in the event that we have maliciously concealed a
+defect in title or as to quality. The statutory liability based on death,
+physical injury or damage to health or the loss of freedom and claims
+under the Product Liability Act remains unaffected by the limitations set
+forth in sentence 1. If a damage incident is attributable to fault both on
+our and your part, you will be liable for comparative fault.</p></li>
+<li><p>All claims to damages or reimbursement of wasted expenditures that are
+asserted against us under contractual or extra-contractual liability shall
+come under the statute of limitations within two (2) years. The statute
+of limitations period commences at the end of the year in which the claim
+arose and the obligee becomes aware of the circumstances resulting in the
+claim and of the identity of the obligor or could have become aware thereof,
+had there not been gross negligence. The claims will come under the
+statute of limitations no later than five (5) years after the date on
+which the claim arises. In the event of claims based on intentional
+wrongdoing, gross negligence, malice, personal injuries and under the
+Product Liability Act, the provisions of the statute of limitations shall apply.</p></li>
+</ol>
+</section>
+<section id="art-6-place-of-performance-place-of-jurisdiction-choice-of-law">
+<h4>Art. 6 Place of Performance, Place of Jurisdiction, Choice of Law<a class="headerlink" href="#art-6-place-of-performance-place-of-jurisdiction-choice-of-law" title="Permalink to this headline"></a></h4>
+<ol class="arabic simple">
+<li><p>Place of performance is our registered office.</p></li>
+<li><p>Place of jurisdiction for all disputes arising out of or in
+connection with this Agreement is the registered office of our
+company, if the customer is a business person pursuant to the
+German Commercial Code or is treated as such.</p></li>
+<li><p>This Agreement shall be exclusively governed by the law of
+the Federal Republic of Germany, with the exception of the
+UN Convention on the International Sale of Goods (CISG) and
+the conflict of law rules of the German law.</p></li>
+</ol>
+<p>Last revised: September 2022</p>
+<div class="line-block">
+<div class="line">Allied Vision Technologies GmbH</div>
+<div class="line">Taschenweg 2a</div>
+<div class="line">07646 Stadtroda</div>
+<div class="line">Germany</div>
+</div>
+</section>
+</section>
+</section>
+<section id="open-source-licenses">
+<h2>Open source licenses<a class="headerlink" href="#open-source-licenses" title="Permalink to this headline"></a></h2>
+<p>This product contains software with the following licenses:</p>
+<section id="apache">
+<h3>Apache<a class="headerlink" href="#apache" title="Permalink to this headline"></a></h3>
+<p>Copyright 2022, Allied Vision GmbH</p>
+<blockquote>
+<div><p>Licensed under the Apache License, Version 2.0 (the “License”);
+you may not use the icons except in compliance with the License.
+You may obtain a copy of the License at</p>
+<blockquote>
+<div><p><a class="reference external" href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+</div></blockquote>
+<p>Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an “AS IS” BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.</p>
+</div></blockquote>
+<dl class="simple">
+<dt>Apache license:</dt><dd><p><a class="reference download internal" download="" href="_downloads/3f0807fa16ecb879f8d12407155e197c/Apache.txt"><code class="xref download docutils literal notranslate"><span class="pre">txt</span></code></a></p>
+</dd>
+</dl>
+</section>
+<section id="bsd-3-clause">
+<h3>BSD-3-Clause<a class="headerlink" href="#bsd-3-clause" title="Permalink to this headline"></a></h3>
+<p>Copyright (C) 2015 The Qt Company Ltd.</p>
+<p>Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:</p>
+<ul class="simple">
+<li><p>Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.</p></li>
+<li><p>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.</p></li>
+<li><p>Neither the name of The Qt Company Ltd nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.</p></li>
+</ul>
+<p>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
+HOLDER 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.</p>
+</section>
+<section id="clserall-license">
+<h3>CLSerAll LICENSE<a class="headerlink" href="#clserall-license" title="Permalink to this headline"></a></h3>
+<p>Copyright (c) 2004. National Instruments Corporation
+All rights reserved.</p>
+<p>Redistribution and use in source and binary forms, with or without modification, are permitted, provided that each of the following conditions are met. By using the software in any manner, you agree to each of the following:</p>
+<ul class="simple">
+<li><p>All redistributions of the software must be accompanied with the above copyright notice (provided however that for redistributions in binary form, the copyright notice may be omitted), the above preamble, this list of conditions, and the disclaimer set forth below.</p></li>
+<li><p>Except for the copyright notice required above, neither the name or trademarks of National Instruments Corporation (NI) nor the names of its contributors may be used in any manner (including, but not limited to, using the same to endorse or promote products derived from this software) without the specific prior written permission of NI.</p></li>
+</ul>
+<p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” WITHOUT WARRANTY OF ANY KIND. NO WARRANTIES, EITHER EXPRESS OR IMPLIED, ARE MADE WITH RESPECT TO THE SOFTWARE, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT, OR ANY OTHER WARRANTIES THAT MAY ARISE FROM USAGE OF TRADE OR COURSE OF DEALING. THE COPYRIGHT HOLDERS AND CONTRIBUTORS DO NOT WARRANT, GUARANTEE, OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF OR THE RESULTS OF THE USE OF THE SOFTWARE IN TERMS OF CORRECTNESS, ACCURACY, RELIABILITY, OR OTHERWISE AND DO NOT WARRANT THAT THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE.  THE ENTIRE RISK AS TO THE PERFORMANCE OF THE SOFTWARE IS WITH YOU. IN NO EVENT SHALL THE COPYRIGHT HOLDERS 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 OR INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
+</section>
+<section id="genicam-license">
+<h3>GENICAM LICENSE<a class="headerlink" href="#genicam-license" title="Permalink to this headline"></a></h3>
+<dl class="simple">
+<dt>GenICam license:</dt><dd><p><a class="reference download internal" download="" href="_downloads/f57ddc1ca0abe4ab7b2b54bc303a4bfb/GenICam_License_20180629.pdf"><code class="xref download docutils literal notranslate"><span class="pre">pdf</span></code></a></p>
+</dd>
+</dl>
+</section>
+<section id="lgpl-license">
+<h3>LGPL LICENSE<a class="headerlink" href="#lgpl-license" title="Permalink to this headline"></a></h3>
+<dl class="simple">
+<dt>LGPL license:</dt><dd><p><a class="reference download internal" download="" href="_downloads/f5ac377a116438efb50c5455094dbc6f/LGPL.txt"><code class="xref download docutils literal notranslate"><span class="pre">txt</span></code></a></p>
+</dd>
+</dl>
+</section>
+<section id="libtiff-license">
+<h3>LIBTIFF LICENSE<a class="headerlink" href="#libtiff-license" title="Permalink to this headline"></a></h3>
+<p>Copyright (c) 1988-1997 Sam Leffler</p>
+<p>Copyright (c) 1991-1997 Silicon Graphics, Inc.</p>
+<p>Permission to use, copy, modify, distribute, and sell this software and its documentation
+for any purpose is hereby granted without fee, provided that (i) the above copyright notices
+and this permission notice appear in all copies of the software and related documentation, and
+(ii) the names of Sam Leffler and Silicon Graphics may not be used in any advertising or
+publicity relating to the software without the specific, prior written permission of Sam
+Leffler and Silicon Graphics.</p>
+<p>THE SOFTWARE IS PROVIDED “AS-IS” AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
+OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR
+A PARTICULAR PURPOSE.</p>
+<p>IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON
+ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.</p>
+</section>
+<section id="miniz-license">
+<h3>MiniZ LICENSE<a class="headerlink" href="#miniz-license" title="Permalink to this headline"></a></h3>
+<p>Copyright 2013-2014 RAD Game Tools and Valve Software
+Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC</p>
+<p>All Rights Reserved.</p>
+<p>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:</p>
+<p>The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.</p>
+<p>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.</p>
+</section>
+<section id="mit-license">
+<h3>MIT LICENSE<a class="headerlink" href="#mit-license" title="Permalink to this headline"></a></h3>
+<dl class="simple">
+<dt>MIT license:</dt><dd><p><a class="reference download internal" download="" href="_downloads/881186e1f3a177c46729e78aef18f0bb/MIT_License.txt"><code class="xref download docutils literal notranslate"><span class="pre">txt</span></code></a></p>
+</dd>
+</dl>
+</section>
+<section id="pcre2-licence">
+<h3>PCRE2 LICENCE<a class="headerlink" href="#pcre2-licence" title="Permalink to this headline"></a></h3>
+<p>PCRE2 is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.</p>
+<p>Release 10 of PCRE2 is distributed under the terms of the “BSD” licence, as
+specified below. The documentation for PCRE2, supplied in the “doc”
+directory, is distributed under the same terms as the software itself. The data
+in the testdata directory is not copyrighted and is in the public domain.</p>
+<p>The basic library functions are written in C and are freestanding. Also
+included in the distribution is a just-in-time compiler that can be used to
+optimize pattern matching. This is an optional feature that can be omitted when
+the library is built.</p>
+<section id="the-basic-library-functions">
+<h4>THE BASIC LIBRARY FUNCTIONS<a class="headerlink" href="#the-basic-library-functions" title="Permalink to this headline"></a></h4>
+<p>Written by:       Philip Hazel
+Email local part: ph10
+Email domain:     cam.ac.uk</p>
+<p>University of Cambridge Computing Service,
+Cambridge, England.</p>
+<p>Copyright (c) 1997-2016 University of Cambridge
+All rights reserved.</p>
+</section>
+<section id="pcre2-just-in-time-compilation-support">
+<h4>PCRE2 JUST-IN-TIME COMPILATION SUPPORT<a class="headerlink" href="#pcre2-just-in-time-compilation-support" title="Permalink to this headline"></a></h4>
+<p>Written by:       Zoltan Herczeg
+Email local part: hzmester
+Emain domain:     freemail.hu</p>
+<p>Copyright(c) 2010-2016 Zoltan Herczeg
+All rights reserved.</p>
+</section>
+<section id="stack-less-just-in-time-compiler">
+<h4>STACK-LESS JUST-IN-TIME COMPILER<a class="headerlink" href="#stack-less-just-in-time-compiler" title="Permalink to this headline"></a></h4>
+<p>Written by:       Zoltan Herczeg
+Email local part: hzmester
+Emain domain:     freemail.hu</p>
+<p>Copyright(c) 2009-2016 Zoltan Herczeg
+All rights reserved.</p>
+</section>
+<section id="the-bsd-licence">
+<h4>THE “BSD” LICENCE<a class="headerlink" href="#the-bsd-licence" title="Permalink to this headline"></a></h4>
+<p>Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:</p>
+<blockquote>
+<div><ul class="simple">
+<li><p>Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.</p></li>
+<li><p>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.</p></li>
+<li><p>Neither the name of the University of Cambridge nor the names of any
+contributors may be used to endorse or promote products derived from this
+software without specific prior written permission.</p></li>
+</ul>
+</div></blockquote>
+<p>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.</p>
+<p>End</p>
+<p>0</p>
+</section>
+</section>
+<section id="qt-license">
+<h3>Qt LICENSE<a class="headerlink" href="#qt-license" title="Permalink to this headline"></a></h3>
+<dl class="simple">
+<dt>LGPL license for Qt 5.1.5:</dt><dd><p><a class="reference download internal" download="" href="_downloads/e3a7eafb0f29d7f863430387a6e66a64/LGPL.html"><code class="xref download docutils literal notranslate"><span class="pre">html</span></code></a></p>
+</dd>
+</dl>
+</section>
+<section id="qwt-widget-library">
+<h3>Qwt Widget Library<a class="headerlink" href="#qwt-widget-library" title="Permalink to this headline"></a></h3>
+<p>Copyright (C) 1997   Josef Wilgen
+Copyright (C) 2002   Uwe Rathmann</p>
+<p>This library is free software; you can redistribute it and/or
+modify it under the terms of the Qwt License, Version 1.0:</p>
+<p><a class="reference external" href="https://qwt.sourceforge.io/qwtlicense.html">https://qwt.sourceforge.io/qwtlicense.html</a></p>
+</section>
+<section id="xs3p-license">
+<h3>xs3p LICENSE<a class="headerlink" href="#xs3p-license" title="Permalink to this headline"></a></h3>
+<blockquote>
+<div><p><a class="reference download internal" download="" href="_downloads/bf68854ed599e86458e218249fd8b6f7/xs3p_License.mht"><code class="xref download docutils literal notranslate"><span class="pre">mht</span></code></a></p>
+</div></blockquote>
+</section>
+<section id="xxhash-license">
+<h3>xxHash LICENSE<a class="headerlink" href="#xxhash-license" title="Permalink to this headline"></a></h3>
+<p>xxHash Library
+Copyright (c) 2012-2014, Yann Collet
+All rights reserved.</p>
+<p>Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:</p>
+<ul class="simple">
+<li><p>Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.</p></li>
+<li><p>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.</p></li>
+</ul>
+<p>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 HOLDER 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.</p>
+</section>
+</section>
+<section id="trademarks-and-copyright">
+<h2>Trademarks and copyright<a class="headerlink" href="#trademarks-and-copyright" title="Permalink to this headline"></a></h2>
+<p>All trademarks, logos, and brands cited in this document are property and/or
+copyright material of their respective owners. Use of these trademarks,
+logos, and brands does not imply endorsement.</p>
+<p>To ease reading, some names of third-party products in this document are shortened.</p>
+</section>
+<section id="contact-address">
+<h2>Contact address<a class="headerlink" href="#contact-address" title="Permalink to this headline"></a></h2>
+<div class="line-block">
+<div class="line">Allied Vision Technologies GmbH</div>
+<div class="line">Taschenweg 2a</div>
+<div class="line">07646 Stadtroda</div>
+<div class="line">Germany</div>
+</div>
+<div class="line-block">
+<div class="line">Contact us:</div>
+<div class="line"><a class="reference external" href="https://www.alliedvision.com/en/about-us/contact-us/">https://www.alliedvision.com/en/about-us/contact-us/</a></div>
+</div>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="troubleshooting.html" class="btn btn-neutral float-left" title="Troubleshooting" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="genindex.html" class="btn btn-neutral float-right" title="Index" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/migrationGuide.html b/VimbaX/doc/VimbaX_Documentation/migrationGuide.html
new file mode 100644
index 0000000000000000000000000000000000000000..e045872e3e847a8b71e8d4649e680b7ca28dfe33
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/migrationGuide.html
@@ -0,0 +1,940 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Migration Guide &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+        <script src="_static/tabs.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Examples Overview" href="examplesOverview.html" />
+    <link rel="prev" title="About Vimba X" href="about.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Migration Guide</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#migration-from-vimba">Migration from Vimba</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#general-tips">General tips</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#high-level-changes">High-level changes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#using-vimba-x-functions">Using Vimba X functions</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#previous-vimba-system-functions">Previous Vimba System functions</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#startup-open-close">Startup, Open, Close</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#query-features-and-camera-info">Query features and camera info</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#using-the-gentl-modules">Using the GenTL modules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#image-acquisition">Image acquisition</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#chunk-replaces-ancillarydata">Chunk replaces AncillaryData</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#loading-and-saving-settings">Loading and saving settings</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#vmb-api-events">Vmb API Events</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#registers-read-write">Registers Read/Write</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Migration Guide</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="migration-guide">
+<h1>Migration Guide<a class="headerlink" href="#migration-guide" title="Permalink to this headline"></a></h1>
+<section id="migration-from-vimba">
+<h2>Migration from Vimba<a class="headerlink" href="#migration-from-vimba" title="Permalink to this headline"></a></h2>
+<section id="general-tips">
+<h3>General tips<a class="headerlink" href="#general-tips" title="Permalink to this headline"></a></h3>
+<p>To enable easy migration, Vimba and Vimba X are very similar. Changes were mainly made to
+achieve CenICam-compliance, usage with cameras from all manufacturers, and to prepare
+future camera features.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Vimba X is not backward compatible with previous Vimba versions.</p>
+</div>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>To learn basics about Vimba X, read chapter <a class="reference internal" href="about.html"><span class="doc">About Vimba X</span></a> first.</p>
+</div>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>For an easy migration to Vimba X, use the examples.</p>
+</div>
+</section>
+<section id="high-level-changes">
+<h3>High-level changes<a class="headerlink" href="#high-level-changes" title="Permalink to this headline"></a></h3>
+<p>General SDK changes:</p>
+<div class="sphinx-tabs docutils container">
+<div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-0-0-0" aria-selected="true" class="sphinx-tabs-tab" id="tab-0-0-0" name="0-0" role="tab" tabindex="0">C</button><button aria-controls="panel-0-0-1" aria-selected="false" class="sphinx-tabs-tab" id="tab-0-0-1" name="0-1" role="tab" tabindex="-1">C++</button><button aria-controls="panel-0-0-2" aria-selected="false" class="sphinx-tabs-tab" id="tab-0-0-2" name="0-2" role="tab" tabindex="-1">Python</button></div><div aria-labelledby="tab-0-0-0" class="sphinx-tabs-panel" id="panel-0-0-0" name="0-0" role="tabpanel" tabindex="0"><ul class="simple">
+<li><p><strong>API name</strong>: VmbC (instead of VimbaC)</p></li>
+<li><p><strong>Structs</strong>: Some members have changed, some renamings, new structs for new GenTL modules</p></li>
+<li><p><strong>Header files, includes</strong>: Paths and some file names changed, see the examples</p></li>
+<li><p>The <strong>transport layer enums</strong> now comply with GenICam. For details, see
+<a class="reference internal" href="cAPIManual.html#tl-enumerations"><span class="std std-ref">TL enumerations</span></a></p></li>
+</ul>
+</div><div aria-labelledby="tab-0-0-1" class="sphinx-tabs-panel" hidden="true" id="panel-0-0-1" name="0-1" role="tabpanel" tabindex="0"><ul class="simple">
+<li><p><strong>API name</strong>: VmbCPP (instead of VimbaCPP)</p></li>
+<li><p><strong>Namespace</strong>: VmbCPP (instead of AVT::VmbAPI)</p></li>
+<li><p><strong>VmbSystem</strong>: replaces VimbaSystem</p></li>
+<li><p><strong>Entry point</strong>: VmbSystem singleton</p></li>
+<li><p><strong>Classes</strong>: Some members have changed, some renamings,
+new classes for advanced configuration</p></li>
+<li><p><strong>Header files, includes</strong>: Paths and some file names changed, see the example</p></li>
+<li><p>The <strong>transport layer enums</strong> now comply with GenICam. For details, see
+<a class="reference internal" href="cAPIManual.html#tl-enumerations"><span class="std std-ref">TL enumerations</span></a></p></li>
+<li><p><strong>Shared pointers</strong>: Usage of template functions instead of macros, see
+<a class="reference internal" href="cppAPIManual.html#replacing-the-shared-pointer-library"><span class="std std-ref">Replacing the shared pointer library</span></a>.</p></li>
+</ul>
+</div><div aria-labelledby="tab-0-0-2" class="sphinx-tabs-panel" hidden="true" id="panel-0-0-2" name="0-2" role="tabpanel" tabindex="0"><ul class="simple">
+<li><p><strong>API name</strong>: VmbPy (instead of VimbaPython)</p></li>
+<li><p><strong>Installation</strong>: VmbPy is available as a .whl file, see <a class="reference internal" href="pythonAPIManual.html"><span class="doc">Python API Manual</span></a>.</p></li>
+<li><p><strong>Importing</strong>: via <code class="code docutils literal notranslate"><span class="pre">import</span> <span class="pre">vmbpy</span></code> (instead of import vimba)</p></li>
+<li><p><strong>VmbSystem</strong>: replaces the <cite>Vimba</cite> singleton class</p></li>
+<li><p><strong>Classes</strong>: Some members have changed, some renamings,
+new classes for advanced configuration</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">Frame.convert_pixel_format</span></code> no longer changes the data in place,
+but instead returns a transformed copy of the frame (see <em>AsynchronousGrab</em> example).</p></li>
+<li><p>In the examples, the <cite>vimba</cite> variable was renamed to <cite>vmb</cite>.</p></li>
+</ul>
+</div></div>
+<p>Function-related changes:</p>
+<ul class="simple">
+<li><p><strong>Feature access</strong> of Camera, Stream, and Local Device is no longer merged. Access
+via GenTL modules (see graphics below) is now possible.</p></li>
+<li><p>C and C++: New <strong>Convenience function</strong> <code class="docutils literal notranslate"><span class="pre">VmbPayloadSizeGet()</span></code> for correct buffer allocation</p></li>
+<li><p><strong>Save/load settings</strong> allows to differentiate between GenTL modules</p></li>
+<li><p><strong>Chunk</strong> (GenICam-compliant implementation) replaces AncillaryData</p></li>
+<li><p><strong>Image Transform</strong>: <code class="docutils literal notranslate"><span class="pre">VmbGetVersion()</span></code> was renamed to <code class="docutils literal notranslate"><span class="pre">VmbGetImageTransformVersion()</span></code>.
+<code class="docutils literal notranslate"><span class="pre">VmbSetImageInfoFromPixelFormat()</span></code>: removed paramater <code class="docutils literal notranslate"><span class="pre">StringLength</span></code>.</p></li>
+</ul>
+<p>Examples:</p>
+<ul class="simple">
+<li><p>Deinstalling Vimba X always deletes the includes examples, even if you have changed them.
+To preserve your changes, save the examples to a different location before deinstalling Vimba X.</p></li>
+<li><p>For details about the examples, see <a class="reference internal" href="examplesOverview.html"><span class="doc">Examples Overview</span></a>.</p></li>
+</ul>
+<p>GigE cameras:</p>
+<ul class="simple">
+<li><p>By default, Broadcast is enabled (instead of Discovery Once).</p></li>
+<li><p>Access Mode Config is not available - please use the VmbC PersistentIp example to change
+camera’s IP address permanently.</p></li>
+</ul>
+<p>Transport layers:</p>
+<ul class="simple">
+<li><p>Changed display name (AVT instead of Vimba) to ease distinguishing them from the TLs
+included in Vimba.</p></li>
+</ul>
+<p>Higher required version:</p>
+<ul class="simple">
+<li><p><strong>Visual Studio</strong>: Example solutions and release builds require VS 2017 or higher</p></li>
+<li><p><strong>C++ version</strong>: The C++ API is compatible with C++ 11 and higher</p></li>
+</ul>
+<p><strong>NEW</strong>: Vimba X features are now accessible in a GenICam-compliant way through GenTL modules:</p>
+<figure class="align-default" id="id1">
+<a class="reference internal image-reference" href="_images/GenTL-modules.png"><img alt="Vimba X at a glance" src="_images/GenTL-modules.png" style="width: 600px;" /></a>
+<figcaption>
+<p><span class="caption-text">Vimba X GenTL modules</span><a class="headerlink" href="#id1" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p><strong>Vimba merges features</strong> of the Camera, Stream, and Local Device -
+they are all accessible via Camera.</p>
+<p><strong>Vimba X separates these features</strong> in a GenICam-compliant way as GenTL modules,
+so that you can access and control features even if they have the same name
+(such as <cite>Width</cite> on the camera and the frame grabber). As a consequence,
+<strong>the Camera handle only accesses camera features</strong>, which is sufficient for
+many applications.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Accessing the Local Device is only necessary for advanced configuration. To access it,
+the camera must be open.</p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The first stream is opened implicitly by opening the camera object. You don’t need
+to work with Stream to acquire images.</p>
+</div>
+<p>To enable advanced configuration, the settings of the frame grabber
+or TL features can now be accessed directly through the TransportLayer module
+( named “System” in the official GenICam standard).</p>
+</section>
+<section id="using-vimba-x-functions">
+<h3>Using Vimba X functions<a class="headerlink" href="#using-vimba-x-functions" title="Permalink to this headline"></a></h3>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>The following sections guide you through signficant function changes.</p>
+</div>
+<section id="previous-vimba-system-functions">
+<h4>Previous Vimba System functions<a class="headerlink" href="#previous-vimba-system-functions" title="Permalink to this headline"></a></h4>
+<p>Compared to Vimba, some previous “Vimba System” functions are now
+available as functions of the TransportLayer module:</p>
+<ul class="simple">
+<li><p>GigE camera discovery features, including Force IP</p></li>
+<li><p>Discovery Events</p></li>
+<li><p>Action Commands</p></li>
+</ul>
+</section>
+<section id="startup-open-close">
+<h4>Startup, Open, Close<a class="headerlink" href="#startup-open-close" title="Permalink to this headline"></a></h4>
+<p>The Vimba X API initialization opens the Camera module and additionally the
+TransportLayer and Interface modules. The corresponding handles are
+valid throughout a session.</p>
+<p>The following changes apply to Vimba X Startup, Open, and Close functions.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>If your TL or camera is not found or if you experience other issues, see <a class="reference internal" href="troubleshooting.html"><span class="doc">Troubleshooting</span></a>.</p>
+</div>
+<div class="sphinx-tabs docutils container">
+<div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-1-1-0" aria-selected="true" class="sphinx-tabs-tab" id="tab-1-1-0" name="1-0" role="tab" tabindex="0">C</button><button aria-controls="panel-1-1-1" aria-selected="false" class="sphinx-tabs-tab" id="tab-1-1-1" name="1-1" role="tab" tabindex="-1">C++</button><button aria-controls="panel-1-1-2" aria-selected="false" class="sphinx-tabs-tab" id="tab-1-1-2" name="1-2" role="tab" tabindex="-1">Python</button></div><div aria-labelledby="tab-1-1-0" class="sphinx-tabs-panel" id="panel-1-1-0" name="1-0" role="tabpanel" tabindex="0"><table class="docutils align-default" id="id2">
+<caption><span class="caption-text">Startup, open, close - new or changed functions</span><a class="headerlink" href="#id2" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 30%" />
+<col style="width: 70%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbStartup()</p></td>
+<td><p>Extended - optional parameter to control TL usage. <br>
+Opens camera, transport layer, and interface modules</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbCameraOpen()</p></td>
+<td><p>Modified - camera handle only provides access <br>
+to camera (Remote Device) features</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbCameraClose()</p></td>
+<td><p>Modified - blocks until capture ended and all callbacks <br>
+have been returned</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbInterfaceOpen()</p></td>
+<td><p>Removed - interface handle is directly available</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbInterfaceClose()</p></td>
+<td><p>Removed - interface handle is directly available</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbShutdown()</p></td>
+<td><p>Modified - waits until frame callbacks are completed</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbTransportLayersList()</p></td>
+<td><p>New - for querying the new struct VmbTransportLayerInfo_t</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbFeatureListAffected()</p></td>
+<td><p>Removed - not part of the GenICam standard</p></td>
+</tr>
+</tbody>
+</table>
+<p>The <code class="docutils literal notranslate"><span class="pre">VmbStartup()</span></code> function was extended with an optional parameter. By default, the parameter is NULL.
+You can change it to use TLs from third-party vendors.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>See the SDK Manual, chapter <a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation"><span class="std std-ref">TL activation and deactivation</span></a>.</p>
+</div>
+<p>To quickly learn how to access features of the GenTL modules, see the <em>ListFeatures</em> example.
+Details and more possibilities are listed in the API manual.</p>
+</div><div aria-labelledby="tab-1-1-1" class="sphinx-tabs-panel" hidden="true" id="panel-1-1-1" name="1-1" role="tabpanel" tabindex="0"><table class="docutils align-default" id="id3">
+<caption><span class="caption-text">Startup, open, close - new or changed functions</span><a class="headerlink" href="#id3" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 36%" />
+<col style="width: 64%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbSystem::Startup()</p></td>
+<td><p>Opens camera, TL, and interface modules. Optional <br>
+parameter VmbFilePathChar_t* pathConfiguration to <br>
+control TL usage.</p></td>
+</tr>
+<tr class="row-odd"><td><p>Camera::Open()</p></td>
+<td><p>Modified - camera handle only provides access <br>
+to camera (Remote Device) features</p></td>
+</tr>
+<tr class="row-even"><td><p>Camera::Close()</p></td>
+<td><p>Modified - blocks until capture ended and all callbacks <br>
+have been returned</p></td>
+</tr>
+<tr class="row-odd"><td><p>Interface::Open()</p></td>
+<td><p>Removed - API startup opens interfaces</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbSystem::OpenInterfaceByID()</p></td>
+<td><p>Removed - API startup opens interfaces</p></td>
+</tr>
+<tr class="row-odd"><td><p>Interface::Closed()</p></td>
+<td><p>Removed - API shutdown closes interfaces</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbSystem::Shutdown()</p></td>
+<td><p>Modified - waits until frame callbacks are completed</p></td>
+</tr>
+<tr class="row-odd"><td><p>Interface::GetPermittedAccess()</p></td>
+<td><p>Removed - contained in API startup</p></td>
+</tr>
+<tr class="row-even"><td><p>BaseFeature::GetAffectedFeatures()</p></td>
+<td><p>Removed - not part of the GenICam standard</p></td>
+</tr>
+</tbody>
+</table>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbSystem::Startup()</span></code> is overloaded to control TL usage.
+You can change it to use TLs from third-party vendors.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>See the SDK Manual, chapter <a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation"><span class="std std-ref">TL activation and deactivation</span></a>.</p>
+</div>
+</div><div aria-labelledby="tab-1-1-2" class="sphinx-tabs-panel" hidden="true" id="panel-1-1-2" name="1-2" role="tabpanel" tabindex="0"><table class="docutils align-default" id="id4">
+<caption><span class="caption-text">Startup, open, close - new or changed functions</span><a class="headerlink" href="#id4" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 40%" />
+<col style="width: 60%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>set_path_configuration()</p></td>
+<td><p>New - method to set optional paramater for <br>
+TL configuration, see SDK manual for details</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbSystem.get_all_transport_layers</p></td>
+<td><p>New - enumerates TLs (only required for <br>
+advanced configuration)</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbSystem.get_transport_layer_by_id()</p></td>
+<td><p>New - only required for advanced configuration</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbSystem.get_interface_by_id()</p></td>
+<td><p>New - only required for advanced configuration</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbSystem.set_network_discovery()</p></td>
+<td><p>Removed - functionality via GigE TL</p></td>
+</tr>
+</tbody>
+</table>
+</div></div>
+</section>
+<section id="query-features-and-camera-info">
+<h4>Query features and camera info<a class="headerlink" href="#query-features-and-camera-info" title="Permalink to this headline"></a></h4>
+<div class="sphinx-tabs docutils container">
+<div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-2-2-0" aria-selected="true" class="sphinx-tabs-tab" id="tab-2-2-0" name="2-0" role="tab" tabindex="0">C</button><button aria-controls="panel-2-2-1" aria-selected="false" class="sphinx-tabs-tab" id="tab-2-2-1" name="2-1" role="tab" tabindex="-1">C++</button><button aria-controls="panel-2-2-2" aria-selected="false" class="sphinx-tabs-tab" id="tab-2-2-2" name="2-2" role="tab" tabindex="-1">Python</button></div><div aria-labelledby="tab-2-2-0" class="sphinx-tabs-panel" id="panel-2-2-0" name="2-0" role="tabpanel" tabindex="0"><p>New features are available to query the valid value set of features and to query the camera
+info by handle.</p>
+<table class="docutils align-default" id="id5">
+<caption><span class="caption-text">Features and camera info - new functions</span><a class="headerlink" href="#id5" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 40%" />
+<col style="width: 60%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbFeatureIntValidValueSetQuery()</p></td>
+<td><p>New: Query the valid value set of an <br>
+integer feature</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbCameraInfoQueryByHandle()</p></td>
+<td><p>New: Query the camera info given a local or <br>
+remote device handle</p></td>
+</tr>
+</tbody>
+</table>
+</div><div aria-labelledby="tab-2-2-1" class="sphinx-tabs-panel" hidden="true" id="panel-2-2-1" name="2-1" role="tabpanel" tabindex="0"><p>The new function <code class="docutils literal notranslate"><span class="pre">feature::GetValidValueSet(Int64Vector&amp;</span> <span class="pre">validValues)</span></code>
+delivers the valid value set of an integer feature. Calling this function from the feature object
+of another type delivers VmbErrorWrongType. If some integer feature does not support valid value set,
+the error VmbErrorValidValueSetNotPresent is returned.</p>
+</div><div aria-labelledby="tab-2-2-2" class="sphinx-tabs-panel" hidden="true" id="panel-2-2-2" name="2-2" role="tabpanel" tabindex="0"><table class="docutils align-default" id="id6">
+<caption><span class="caption-text">Features and camera info - removed functions</span><a class="headerlink" href="#id6" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 31%" />
+<col style="width: 69%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>get_features_affected_by()</p></td>
+<td><p>Removed - not part of the GenICam standard</p></td>
+</tr>
+<tr class="row-odd"><td><p>has_affected_features()</p></td>
+<td><p>Removed - not part of the GenICam standard</p></td>
+</tr>
+</tbody>
+</table>
+</div></div>
+</section>
+<section id="using-the-gentl-modules">
+<h4>Using the GenTL modules<a class="headerlink" href="#using-the-gentl-modules" title="Permalink to this headline"></a></h4>
+<p>In contrast to Vimba, the retrieved Camera handle accesses camera features only.
+To access features of the other GenTL modules, several options are available.</p>
+<p>In many cases, it is practical to use:</p>
+<ul class="simple">
+<li><p><strong>C API</strong>: Members of the *info structs, especially Struct VmbCameraInfo_t.</p></li>
+<li><p><strong>C++ API</strong>: Members of the camera class</p></li>
+<li><p><strong>Python API</strong>: Members of the camera class</p></li>
+</ul>
+<div class="sphinx-tabs docutils container">
+<div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-3-3-0" aria-selected="true" class="sphinx-tabs-tab" id="tab-3-3-0" name="3-0" role="tab" tabindex="0">C</button><button aria-controls="panel-3-3-1" aria-selected="false" class="sphinx-tabs-tab" id="tab-3-3-1" name="3-1" role="tab" tabindex="-1">C++</button><button aria-controls="panel-3-3-2" aria-selected="false" class="sphinx-tabs-tab" id="tab-3-3-2" name="3-2" role="tab" tabindex="-1">Python</button></div><div aria-labelledby="tab-3-3-0" class="sphinx-tabs-panel" id="panel-3-3-0" name="3-0" role="tabpanel" tabindex="0"><p>For easy access to the GenTL modules, their handles are added to the *info
+structs:</p>
+<ul class="simple">
+<li><p><strong>New</strong>: <a class="reference internal" href="cAPIManual.html#struct-vmbtransportlayerinfo-t"><span class="std std-ref">Struct VmbTransportLayerInfo_t</span></a>, which can be queried with the
+new function <code class="docutils literal notranslate"><span class="pre">VmbTransportLayersList()</span></code>.</p></li>
+<li><p><strong>Modified</strong>: See <a class="reference internal" href="cAPIManual.html#struct-vmbcamerainfo-t"><span class="std std-ref">Struct VmbCameraInfo_t</span></a> and <a class="reference internal" href="cAPIManual.html#struct-vmbinterfaceinfo-t"><span class="std std-ref">Struct VmbInterfaceInfo_t</span></a>.
+Member functions that are now redundant were removed. Handles to all related GenTL modules were added.</p></li>
+</ul>
+<p><strong>Listing the GenTL modules</strong></p>
+<p>The <code class="docutils literal notranslate"><span class="pre">VmbGenTLSystemsList()</span></code> function is new. It replaces <code class="docutils literal notranslate"><span class="pre">VmbInterfacesList()</span></code>.</p>
+</div><div aria-labelledby="tab-3-3-1" class="sphinx-tabs-panel" hidden="true" id="panel-3-3-1" name="3-1" role="tabpanel" tabindex="0"><p>The C++ API contains additional class member functions and convenience functions.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>For image acquisition, you can continue using the Camera class. The Stream
+module is required only to access data such as statistics of GigE cameras and for
+multiple streams.</p>
+</div>
+<p>The following additional class member functions have been added:</p>
+<blockquote>
+<div><dl class="py class">
+<dt class="sig sig-object py">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">VmbSystem</span></span></dt>
+<dd></dd></dl>
+
+<ul class="simple">
+<li><p>GetInterfacesByTL()</p></li>
+<li><p>GetCamerasByTL()</p></li>
+<li><p>GetCamerasByInterface()</p></li>
+<li><p>GetTransportLayers()</p></li>
+<li><p>GetTransportLayerByID()</p></li>
+</ul>
+<dl class="py class">
+<dt class="sig sig-object py">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Camera</span></span></dt>
+<dd></dd></dl>
+
+<ul class="simple">
+<li><p>GetInterface()</p></li>
+<li><p>GetTransportLayer()</p></li>
+<li><p>GetStreams() (not needed for cameras with one stream)</p></li>
+<li><p>GetLocalDevice()</p></li>
+<li><p>GetInterfaceByID()</p></li>
+<li><p>GetTransportLayer() (LocalDevice, camera must be open)</p></li>
+<li><p>GetStreams() (not needed, implemented for future use)</p></li>
+<li><p>GetLocalDevice()(camera must be open)</p></li>
+<li><p>GetExtendedID()</p></li>
+</ul>
+<dl class="py class">
+<dt class="sig sig-object py">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Frame</span></span></dt>
+<dd></dd></dl>
+
+<ul class="simple">
+<li><p>AccessChunkData()</p></li>
+</ul>
+<dl class="py class">
+<dt class="sig sig-object py">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Interface</span></span></dt>
+<dd></dd></dl>
+
+<ul class="simple">
+<li><p>GetCameras()</p></li>
+<li><p>GetTransportLayer()</p></li>
+</ul>
+<dl class="py class">
+<dt class="sig sig-object py">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">TransportLayer</span></span></dt>
+<dd></dd></dl>
+
+<ul class="simple">
+<li><p>TransportLayer()</p></li>
+<li><p>GetInterfaces()</p></li>
+<li><p>GetCameras()</p></li>
+<li><p>GetID()</p></li>
+<li><p>GetName()</p></li>
+<li><p>GetModelName()</p></li>
+<li><p>GetVendor()</p></li>
+<li><p>GetVersion()</p></li>
+<li><p>GetPath()</p></li>
+<li><p>GetType()</p></li>
+</ul>
+</div></blockquote>
+<p>For an overview, see <a class="reference internal" href="cppAPIManual.html#c-api-diagram"><span class="std std-ref">C++ API diagram</span></a>.</p>
+</div><div aria-labelledby="tab-3-3-2" class="sphinx-tabs-panel" hidden="true" id="panel-3-3-2" name="3-2" role="tabpanel" tabindex="0"><p>The Python API contains additional class member functions and convenience functions.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>For image acquisition, you can continue using the Camera class. The Stream
+module is required only to access data such as statistics of GigE cameras and for
+multiple streams.</p>
+</div>
+<p>The following additional class member functions have been added:</p>
+<blockquote>
+<div><dl class="py class">
+<dt class="sig sig-object py">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">VmbSystem</span></span></dt>
+<dd></dd></dl>
+
+<ul class="simple">
+<li><p>get_interfaces_by_tl()</p></li>
+<li><p>get_cameras_by_tl()</p></li>
+<li><p>get_cameras_by_interface()</p></li>
+<li><p>get_transport_layers()</p></li>
+<li><p>get_transport_layer_by_id()</p></li>
+</ul>
+<dl class="py class">
+<dt class="sig sig-object py">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Camera</span></span></dt>
+<dd></dd></dl>
+
+<ul class="simple">
+<li><p>get_interface()</p></li>
+<li><p>get_transport_layer()</p></li>
+<li><p>get_streams() (not needed for cameras with one stream)</p></li>
+<li><p>get_local_device()</p></li>
+<li><p>get_interface_by_id()</p></li>
+<li><p>get_transport_layer() (LocalDevice, camera must be open)</p></li>
+<li><p>get_streams()</p></li>
+<li><p>get_extended_id()</p></li>
+</ul>
+<dl class="py class">
+<dt class="sig sig-object py">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Frame</span></span></dt>
+<dd></dd></dl>
+
+<ul class="simple">
+<li><p>access_chunk_data()</p></li>
+</ul>
+<dl class="py class">
+<dt class="sig sig-object py">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Interface</span></span></dt>
+<dd></dd></dl>
+
+<ul class="simple">
+<li><p>get_cameras()</p></li>
+<li><p>get_transport_layer()</p></li>
+</ul>
+<dl class="py class">
+<dt class="sig sig-object py">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">TransportLayer</span></span></dt>
+<dd></dd></dl>
+
+<ul class="simple">
+<li><p>get_interfaces()</p></li>
+<li><p>get_cameras()</p></li>
+<li><p>get_id()</p></li>
+<li><p>get_name()</p></li>
+<li><p>get_model_name()</p></li>
+<li><p>get_vendor()</p></li>
+<li><p>get_version()</p></li>
+<li><p>get_path()</p></li>
+<li><p>get_type()</p></li>
+</ul>
+</div></blockquote>
+</div></div>
+</section>
+<section id="image-acquisition">
+<h4>Image acquisition<a class="headerlink" href="#image-acquisition" title="Permalink to this headline"></a></h4>
+<p><strong>New convenience function</strong></p>
+<p><strong>C and C++</strong> only: Vimba X contains the new convenience function <code class="docutils literal notranslate"><span class="pre">VmbPayloadSizeGet()</span></code>.
+Please use it to apply correct buffer allocation.</p>
+<p>If the transport layer’s stream module provides a payload size,
+this has priority over the payload size of the camera. In Vimba, this
+behavior is hidden from the user and the camera’s payload size is overwritten
+by the payload size of the stream.</p>
+<div class="sphinx-tabs docutils container">
+<div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-4-4-0" aria-selected="true" class="sphinx-tabs-tab" id="tab-4-4-0" name="4-0" role="tab" tabindex="0">C</button><button aria-controls="panel-4-4-1" aria-selected="false" class="sphinx-tabs-tab" id="tab-4-4-1" name="4-1" role="tab" tabindex="-1">C++</button><button aria-controls="panel-4-4-2" aria-selected="false" class="sphinx-tabs-tab" id="tab-4-4-2" name="4-2" role="tab" tabindex="-1">Python</button></div><div aria-labelledby="tab-4-4-0" class="sphinx-tabs-panel" id="panel-4-4-0" name="4-0" role="tabpanel" tabindex="0"><p><strong>Frame announce and frame revoke</strong></p>
+<ul class="simple">
+<li><p>The function <code class="docutils literal notranslate"><span class="pre">VmbFrameAnnounce()</span></code> was changed. It can be called during acquisition to add more frames
+(if supported by the TL).</p></li>
+</ul>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbFrameRevoke()</span></code> was changed:</p>
+<ul class="simple">
+<li><p>Frames can be revoked during acquisition if they are currently
+not queued or currently in use in a pending frame callback.</p></li>
+<li><p>Frame buffers which are allocated by the TL are deleted by the TL.</p></li>
+<li><p>The call reports an error after <code class="docutils literal notranslate"><span class="pre">VmbCaptureQueueFlush()</span></code> if the frame
+is still in use by a currently executed callback.</p></li>
+</ul>
+<p><strong>Capture start</strong></p>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbCaptureStart()</span></code> was changed.
+The call discards all pending frame callbacks.
+Only the currently running callback is completed.</p>
+<p><strong>Capture end</strong></p>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbCaptureEnd()</span></code> was changed:</p>
+<p>Only the first call for a certain frame waits. All other parallel calls
+that try to wait for the same frame return an error (no multithreaded
+wait for the same frame). If a callback is executed when capture is stopped,
+this function does not return until the callback returns.</p>
+<p><strong>Capture frame wait</strong></p>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbCaptureFrameWait()</span></code> was changed.
+Only the first call for a certain frame waits. All other parallel calls
+that try to wait for the same frame return an error (no multithreaded
+wait for the same frame).</p>
+<p><strong>Frame callback</strong></p>
+<p>The frame callback needs the additional argument <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">VmbHandle_t</span> <span class="pre">streamHandle</span></code>.
+For details, see the AsynchronousGrab example.</p>
+<p><strong>Image size</strong></p>
+<p>In struct <code class="docutils literal notranslate"><span class="pre">VmbFrame_t</span></code>, entry VmbUint32_t imageSize was removed.</p>
+<p><strong>Payload type</strong></p>
+<p>The function <code class="docutils literal notranslate"><span class="pre">GetPayloadType()</span></code> is new.</p>
+</div><div aria-labelledby="tab-4-4-1" class="sphinx-tabs-panel" hidden="true" id="panel-4-4-1" name="4-1" role="tabpanel" tabindex="0"><p><strong>Frame announce and frame revoke</strong></p>
+<ul class="simple">
+<li><p>The function <code class="docutils literal notranslate"><span class="pre">AnnounceFrame()</span></code> was changed. It can be called during acquisition to add more frames
+(if supported by the TL).</p></li>
+</ul>
+<p>The function <code class="docutils literal notranslate"><span class="pre">RevokeFrame()</span></code> was changed:</p>
+<ul class="simple">
+<li><p>Frames can be revoked during acquisition if they are currently
+not queued or currently in use in a pending frame callback.</p></li>
+<li><p>Frame buffers which are allocated by the TL are deleted by the TL.</p></li>
+<li><p>The call reports an error after <code class="docutils literal notranslate"><span class="pre">FlushQueue()</span></code> if the frame
+is still in use by a currently executed callback.</p></li>
+</ul>
+<p><strong>Capture start</strong></p>
+<p>The function <code class="docutils literal notranslate"><span class="pre">StartCapture()</span></code> was changed.
+The call discards all pending frame callbacks.
+Only the currently running callback is completed.</p>
+<p><strong>Capture end</strong></p>
+<p>The function <code class="docutils literal notranslate"><span class="pre">Camera::EndCapture()</span></code> was changed:</p>
+<p>Only the first call for a certain frame waits. All other parallel calls
+that try to wait for the same frame return an error (no multithreaded
+wait for the same frame). If a callback is executed when capture is stopped,
+this function does not return until the callback returns.
+<strong>Capture frame wait</strong></p>
+<p>The function <code class="docutils literal notranslate"><span class="pre">VmbCaptureFrameWait()</span></code>
+is only used in <code class="docutils literal notranslate"><span class="pre">Camera::AcquireSingleImage()</span></code>.</p>
+<p><strong>Stream buffer alignment</strong></p>
+<p>New convenience function to query the required buffer alignment
+from the Stream module: <code class="docutils literal notranslate"><span class="pre">GetStreamBufferAlignment</span></code></p>
+<p><strong>Image size</strong></p>
+<p>The function <code class="docutils literal notranslate"><span class="pre">Frame::GetImageSize()</span></code> was removed.</p>
+<p><strong>Payload type</strong></p>
+<p>The function <code class="docutils literal notranslate"><span class="pre">GetPayloadType()</span></code> is new.</p>
+</div><div aria-labelledby="tab-4-4-2" class="sphinx-tabs-panel" hidden="true" id="panel-4-4-2" name="4-2" role="tabpanel" tabindex="0"><ul class="simple">
+<li><p>The method <code class="docutils literal notranslate"><span class="pre">get_image_size()</span></code> was removed.</p></li>
+<li><p>The frame handler additionally contains <code class="docutils literal notranslate"><span class="pre">stream:</span> <span class="pre">Stream</span></code>.
+Camera and frame within the frame handler are unchanged.</p></li>
+<li><p>New method: <code class="docutils literal notranslate"><span class="pre">Camera.get_frame_with_context</span></code>.</p></li>
+<li><p>Method <code class="docutils literal notranslate"><span class="pre">Camera.get_frame_generator</span></code> changed behavior:
+Frames generated with this method cannot be used outside of the loop.
+To enable frame usage outside of the loop, copy them.</p></li>
+</ul>
+</div></div>
+</section>
+<section id="chunk-replaces-ancillarydata">
+<h4>Chunk replaces AncillaryData<a class="headerlink" href="#chunk-replaces-ancillarydata" title="Permalink to this headline"></a></h4>
+<div class="sphinx-tabs docutils container">
+<div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-5-5-0" aria-selected="true" class="sphinx-tabs-tab" id="tab-5-5-0" name="5-0" role="tab" tabindex="0">C</button><button aria-controls="panel-5-5-1" aria-selected="false" class="sphinx-tabs-tab" id="tab-5-5-1" name="5-1" role="tab" tabindex="-1">C++</button><button aria-controls="panel-5-5-2" aria-selected="false" class="sphinx-tabs-tab" id="tab-5-5-2" name="5-2" role="tab" tabindex="-1">Python</button></div><div aria-labelledby="tab-5-5-0" class="sphinx-tabs-panel" id="panel-5-5-0" name="5-0" role="tabpanel" tabindex="0"><p>The function <code class="docutils literal notranslate"><span class="pre">VmbChunkDataAccess()</span></code> is new. It replaces functions
+for “AncillaryData”. In contrast to <code class="docutils literal notranslate"><span class="pre">VmbAncillaryDataOpen()</span></code>, no
+ancillary data handle is returned. To access Chunk data, use VmbChunkAccessCallback.</p>
+<p>For details, see the C API manual, section <a class="reference internal" href="cAPIManual.html#chunk"><span class="std std-ref">Chunk</span></a>.</p>
+<table class="docutils align-default" id="id7">
+<caption><span class="caption-text">Chunk replaces AncillaryData</span><a class="headerlink" href="#id7" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 30%" />
+<col style="width: 70%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbAncillaryDataOpen()</p></td>
+<td><p>Removed - replaced by VmbChunkDataParse()</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbAncillaryDataClose()</p></td>
+<td><p>Removed - replaced by VmbChunkDataParse()</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbChunkDataAccess()</p></td>
+<td><p>New - replaces VmbAncillaryDataOpen() and <br>
+VmbAncillaryDataClose()</p></td>
+</tr>
+</tbody>
+</table>
+</div><div aria-labelledby="tab-5-5-1" class="sphinx-tabs-panel" hidden="true" id="panel-5-5-1" name="5-1" role="tabpanel" tabindex="0"><p>The AncillaryData class was removed. To access chunk, use <code class="docutils literal notranslate"><span class="pre">Frame::AccessChunkData()</span></code>,
+calling it from <code class="docutils literal notranslate"><span class="pre">FrameObserver::FrameReceived()</span></code> as shown in the <em>ChunkAccess</em> example.</p>
+<table class="docutils align-default" id="id8">
+<caption><span class="caption-text">Chunk replaces AncillaryData</span><a class="headerlink" href="#id8" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 34%" />
+<col style="width: 66%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Frame::GetAncillaryData()</p></td>
+<td><p>Removed</p></td>
+</tr>
+<tr class="row-odd"><td><p>Frame::GetAncillarySize()</p></td>
+<td><p>Removed</p></td>
+</tr>
+<tr class="row-even"><td><p>Frame::AccessChunkData</p></td>
+<td><p>New</p></td>
+</tr>
+</tbody>
+</table>
+</div><div aria-labelledby="tab-5-5-2" class="sphinx-tabs-panel" hidden="true" id="panel-5-5-2" name="5-2" role="tabpanel" tabindex="0"><table class="docutils align-default" id="id9">
+<caption><span class="caption-text">Chunk replaces AncillaryData</span><a class="headerlink" href="#id9" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 37%" />
+<col style="width: 63%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Function</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>frame.get_ancillary_data()</p></td>
+<td><p>Removed</p></td>
+</tr>
+<tr class="row-odd"><td><p>frame.get_ancillary_size()</p></td>
+<td><p>Removed</p></td>
+</tr>
+<tr class="row-even"><td><p>frame.access_chunk_data()</p></td>
+<td><p>New</p></td>
+</tr>
+</tbody>
+</table>
+</div></div>
+</section>
+<section id="loading-and-saving-settings">
+<h4>Loading and saving settings<a class="headerlink" href="#loading-and-saving-settings" title="Permalink to this headline"></a></h4>
+<p>Vimba X enables you to load and save settings of the GenTL module of your choice or
+even of the whole system configuration including camera and TL settings. Therefore,
+you cannot reuse settings that you have saved with Vimba.
+Details are described in the API manuals.</p>
+</section>
+<section id="vmb-api-events">
+<h4>Vmb API Events<a class="headerlink" href="#vmb-api-events" title="Permalink to this headline"></a></h4>
+<p>Events as an API feature are now implemented and named in a GenICam-compliant way, the
+table below provides some examples of renamed functions.</p>
+<p>The events inform changes of the camera list or the interface list.</p>
+<div class="sphinx-tabs docutils container">
+<div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-6-6-0" aria-selected="true" class="sphinx-tabs-tab" id="tab-6-6-0" name="6-0" role="tab" tabindex="0">C</button><button aria-controls="panel-6-6-1" aria-selected="false" class="sphinx-tabs-tab" id="tab-6-6-1" name="6-1" role="tab" tabindex="-1">C++</button><button aria-controls="panel-6-6-2" aria-selected="false" class="sphinx-tabs-tab" id="tab-6-6-2" name="6-2" role="tab" tabindex="-1">Python</button></div><div aria-labelledby="tab-6-6-0" class="sphinx-tabs-panel" id="panel-6-6-0" name="6-0" role="tabpanel" tabindex="0"><table class="docutils align-default" id="id10">
+<caption><span class="caption-text">Events - examples of renamed features</span><a class="headerlink" href="#id10" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 31%" />
+<col style="width: 69%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Feature</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>EventCameraDiscovery</p></td>
+<td><p>Renamed DiscoveryCameraEvent</p></td>
+</tr>
+<tr class="row-odd"><td><p>EventInterfaceDiscovery</p></td>
+<td><p>Renamed DiscoveryInterfaceEvent</p></td>
+</tr>
+</tbody>
+</table>
+</div><div aria-labelledby="tab-6-6-1" class="sphinx-tabs-panel" hidden="true" id="panel-6-6-1" name="6-1" role="tabpanel" tabindex="0"><table class="docutils align-default" id="id11">
+<caption><span class="caption-text">Events -  new features</span><a class="headerlink" href="#id11" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 31%" />
+<col style="width: 69%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Feature</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>EventCameraDiscovery</p></td>
+<td><p>New feature</p></td>
+</tr>
+<tr class="row-odd"><td><p>EventInterfaceDiscovery</p></td>
+<td><p>New feature</p></td>
+</tr>
+</tbody>
+</table>
+</div><div aria-labelledby="tab-6-6-2" class="sphinx-tabs-panel" hidden="true" id="panel-6-6-2" name="6-2" role="tabpanel" tabindex="0"><p>See changed event names in tab <strong>C</strong>.</p>
+</div></div>
+</section>
+<section id="registers-read-write">
+<h4>Registers Read/Write<a class="headerlink" href="#registers-read-write" title="Permalink to this headline"></a></h4>
+<p>Functions for reading and writing registers were removed.</p>
+<div class="sphinx-tabs docutils container">
+<div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-7-7-0" aria-selected="true" class="sphinx-tabs-tab" id="tab-7-7-0" name="7-0" role="tab" tabindex="0">C</button><button aria-controls="panel-7-7-1" aria-selected="false" class="sphinx-tabs-tab" id="tab-7-7-1" name="7-1" role="tab" tabindex="-1">C++</button></div><div aria-labelledby="tab-7-7-0" class="sphinx-tabs-panel" id="panel-7-7-0" name="7-0" role="tabpanel" tabindex="0"><table class="docutils align-default" id="id12">
+<caption><span class="caption-text">Registers - removed functions</span><a class="headerlink" href="#id12" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 31%" />
+<col style="width: 69%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Feature</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbRegistersRead()</p></td>
+<td><p>Removed</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbRegistersWrite()</p></td>
+<td><p>Removed</p></td>
+</tr>
+</tbody>
+</table>
+</div><div aria-labelledby="tab-7-7-1" class="sphinx-tabs-panel" hidden="true" id="panel-7-7-1" name="7-1" role="tabpanel" tabindex="0"><table class="docutils align-default" id="id13">
+<caption><span class="caption-text">Registers - removed functions</span><a class="headerlink" href="#id13" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 31%" />
+<col style="width: 69%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Feature</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>ReadRegisters()</p></td>
+<td><p>Removed</p></td>
+</tr>
+<tr class="row-odd"><td><p>WriteRegisters()</p></td>
+<td><p>Removed</p></td>
+</tr>
+</tbody>
+</table>
+<table class="docutils align-default" id="id14">
+<caption><span class="caption-text">Registers - removed functions</span><a class="headerlink" href="#id14" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 31%" />
+<col style="width: 69%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Feature</p></th>
+<th class="head"><p>Comment</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>read_registers()</p></td>
+<td><p>Removed</p></td>
+</tr>
+<tr class="row-odd"><td><p>write_registers()</p></td>
+<td><p>Removed</p></td>
+</tr>
+</tbody>
+</table>
+</div></div>
+</section>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="about.html" class="btn btn-neutral float-left" title="About Vimba X" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="examplesOverview.html" class="btn btn-neutral float-right" title="Examples Overview" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/objects.inv b/VimbaX/doc/VimbaX_Documentation/objects.inv
new file mode 100644
index 0000000000000000000000000000000000000000..fe27badb6a76c640571f82cee45518aae69c2bdf
Binary files /dev/null and b/VimbaX/doc/VimbaX_Documentation/objects.inv differ
diff --git a/VimbaX/doc/VimbaX_Documentation/pythonAPIManual.html b/VimbaX/doc/VimbaX_Documentation/pythonAPIManual.html
new file mode 100644
index 0000000000000000000000000000000000000000..cb24830040898b9962c867a0772a2f272304d320
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/pythonAPIManual.html
@@ -0,0 +1,779 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Python API Manual &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Image Transform Manual" href="imagetransformManual.html" />
+    <link rel="prev" title="CPP API Manual" href="cppAPIManual.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Python API Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#introduction-to-the-api">Introduction to the API</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#is-this-the-best-api-for-you">Is this the best API for you?</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#compatibility">Compatibility</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#prerequisites">Prerequisites</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#installing-python-windows">Installing Python - Windows</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#installing-python-linux">Installing Python - Linux</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#install-vmbpy">Install VmbPy</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#troubleshooting-pip-behavior">Troubleshooting pip behavior</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#general-aspects-of-the-api">General aspects of the API</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#entry-point">Entry point</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#entity-documentation">Entity documentation</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#context-manager">Context manager</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#classes">Classes</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#camera">Camera</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#frame">Frame</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#interface">Interface</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#api-usage">API usage</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#listing-cameras">Listing cameras</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#plug-and-play">Plug and play</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#listing-features">Listing features</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#accessing-features">Accessing features</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#acquiring-images">Acquiring images</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changing-the-pixel-format">Changing the pixel format</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#convenience-functions">Convenience functions</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#getting-and-setting-pixel-formats">Getting and setting pixel formats</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#converting-a-pixel-format">Converting a pixel format</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#listing-chunk-data">Listing chunk data</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#loading-and-saving-user-sets">Loading and saving user sets</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#loading-and-saving-settings">Loading and saving settings</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#software-trigger">Software trigger</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#trigger-over-ethernet-action-commands">Trigger over Ethernet - Action Commands</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#multithreading">Multithreading</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#migrating-to-the-c-or-c-api">Migrating to the C or C++ API</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#troubleshooting">Troubleshooting</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#logging">Logging</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#logging-levels">Logging levels</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#tracing">Tracing</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#avoiding-large-log-files">Avoiding large log files</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Python API Manual</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="python-api-manual">
+<h1>Python API Manual<a class="headerlink" href="#python-api-manual" title="Permalink to this headline"></a></h1>
+<section id="introduction-to-the-api">
+<h2>Introduction to the API<a class="headerlink" href="#introduction-to-the-api" title="Permalink to this headline"></a></h2>
+<p>The Python API (VmbPy) is a Python wrapper around the VmbC API. It provides all functions from
+VmbC, but enables you to program with less lines of code.</p>
+<p>We recommend using VmbPy for:</p>
+<ul class="simple">
+<li><p>Quick prototyping</p></li>
+<li><p>Getting started with programming machine vision or embedded vision applications</p></li>
+<li><p>Easy interfacing with deep learning frameworks and libraries such as OpenCV via NumPy arrays</p></li>
+</ul>
+<section id="is-this-the-best-api-for-you">
+<h3>Is this the best API for you?<a class="headerlink" href="#is-this-the-best-api-for-you" title="Permalink to this headline"></a></h3>
+<p>Vimba X provides three APIs:</p>
+<ul class="simple">
+<li><p>The <strong>Python API</strong> is ideal for quick prototyping. We also recommend this API for an easy start
+with machine vision or embedded vision applications. For best performance and deterministic
+behavior, the C and C++ APIs are a better choice. To ease migration, the structure of VmbPy
+is very similar to VmbCPP.</p></li>
+<li><p>The <strong>C API</strong> is easy-to-use, but requires more lines of code than the Python API. It can also be
+used as API for C++ applications.</p></li>
+<li><p>The <strong>C++ API</strong> has an elaborate class architecture. It is designed as a highly efficient and
+sophisticated API for advanced object-oriented programming including the STL (standard template
+library), shared pointers, and interface classes. If you prefer an API with less design patterns, we
+recommend the C API.</p></li>
+</ul>
+<p>All Vimba X APIs cover the following functions:</p>
+<ul class="simple">
+<li><p>Listing currently connected cameras</p></li>
+<li><p>Controlling camera features</p></li>
+<li><p>Receiving images from the camera</p></li>
+<li><p>Getting notifications about camera connections and disconnections</p></li>
+</ul>
+</section>
+</section>
+<section id="compatibility">
+<h2>Compatibility<a class="headerlink" href="#compatibility" title="Permalink to this headline"></a></h2>
+<p>Supported operating systems and cameras are listed in the Release Notes for your operating system.</p>
+<p>Compatible Python version: Python 3.7.x or higher. For 64-bit operating systems, we recommend
+using a 64-bit Python interpreter.</p>
+</section>
+<section id="installation">
+<span id="index-0"></span><h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
+<section id="prerequisites">
+<h3>Prerequisites<a class="headerlink" href="#prerequisites" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Python is not provided with the Vimba X SDK. To use the Python API, install Python version 3.7 or higher as described below.</p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Updating Vimba X to a higher version does not automatically update any installed Vimba X Python site packages.
+Please install the .whl file of VmbPy as described below again manually, especially if the
+error “Invalid VmbC Version” occurs.</p>
+</div>
+<section id="installing-python-windows">
+<h4>Installing Python - Windows<a class="headerlink" href="#installing-python-windows" title="Permalink to this headline"></a></h4>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>If your system requires multiple, coexisting Python versions, consider using pyenv-win, available at
+<a class="reference external" href="https://github.com/pyenv-win/pyenv-win">https://github.com/pyenv-win/pyenv-win</a> to install and maintain multiple Python installations.</p>
+</div>
+<ol class="arabic simple">
+<li><p>Download the latest Python release from python.org, available at
+<a class="reference external" href="https://www.python.org/downloads/windows/">https://www.python.org/downloads/windows/</a>.</p></li>
+<li><p>Execute the downloaded installer and ensure that the latest pip version is installed.</p></li>
+</ol>
+<p>If you don’t have admin privileges for all directories, read the instructions for all operating
+systems below.</p>
+<p>To verify the installation, open the command prompt and enter:</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">--</span><span class="n">version</span>
+<span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">pip</span> <span class="o">--</span><span class="n">version</span>
+</pre></div>
+</div>
+<p>Please ensure that the Python version is 3.7 or higher and pip uses this Python version.
+Optionally, install NumPy and OpenCV as extras. NumPy enables conversion of <code class="docutils literal notranslate"><span class="pre">VmbPy.Frame</span></code>
+objects to numpy arrays. Opencv ensures that the numPy arrays are valid OpenCV images.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install Python with NumPy and OpenCV export</span>
+<span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">.</span><span class="p">[</span><span class="n">numpy</span><span class="o">-</span><span class="n">export</span><span class="p">,</span><span class="n">opencv</span><span class="o">-</span><span class="n">export</span><span class="p">]</span>
+</pre></div>
+</div>
+</section>
+<section id="installing-python-linux">
+<h4>Installing Python - Linux<a class="headerlink" href="#installing-python-linux" title="Permalink to this headline"></a></h4>
+<p>On Linux systems, the Python installation process depends heavily on the distribution. If python3.7 is
+not available for your distribution or your system requires multiple python versions to coexist, use
+pyenv, available at <a class="reference external" href="https://realpython.com/intro-to-pyenv/">https://realpython.com/intro-to-pyenv/</a> instead.</p>
+<p>If you don’t have admin privileges for all directories, read the instructions for all operating
+systems below.</p>
+<ol class="arabic simple">
+<li><p>Install or update python3.7 with the packet manager of your distribution.</p></li>
+<li><p>Install or update pip with the packet manager of your distribution.</p></li>
+</ol>
+<p>To verify the installation, open a console and enter:</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">--</span><span class="n">version</span>
+<span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">pip</span> <span class="o">--</span><span class="n">version</span>
+</pre></div>
+</div>
+<p>Optionally, install NumPy and OpenCV as extras. NumPy enables conversion of <code class="docutils literal notranslate"><span class="pre">VmbPy.Frame</span></code>
+objects to numpy arrays. Opencv ensures that the numPy arrays are valid OpenCV images.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install Python with NumPy and OpenCV export</span>
+<span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">.</span><span class="p">[</span><span class="n">numpy</span><span class="o">-</span><span class="n">export</span><span class="p">,</span><span class="n">opencv</span><span class="o">-</span><span class="n">export</span><span class="p">]</span>
+</pre></div>
+</div>
+</section>
+</section>
+<section id="install-vmbpy">
+<h3>Install VmbPy<a class="headerlink" href="#install-vmbpy" title="Permalink to this headline"></a></h3>
+<p>VmbPy is provided as .whl file in the Vimba X installation directory. You can install it
+with <code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span></code>.</p>
+<p>The sources of VmbPY are available on GitHub:</p>
+<p><a class="reference external" href="https://github.com/alliedvision/VmbPy">https://github.com/alliedvision/VmbPy</a></p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Please note that Allied Vision can offer
+only limited support if an application uses a modified version of the API.</p>
+</div>
+<section id="troubleshooting-pip-behavior">
+<h4>Troubleshooting pip behavior<a class="headerlink" href="#troubleshooting-pip-behavior" title="Permalink to this headline"></a></h4>
+<p>If you don’t have admin rights for the above-mentioned directories,
+download VmbPy (in the correct version needed for your Vimba X installation) from
+<a class="reference external" href="https://github.com/alliedvision/VmbPy">https://github.com/alliedvision/VmbPy</a> and install it from that directory.</p>
+<p>Or downgrade pip to a version less than 2.3 with, for example:</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">--</span><span class="n">upgrade</span> <span class="n">pip</span><span class="o">==</span><span class="mf">21.1.2</span>
+</pre></div>
+</div>
+<p>After the VmbPy installation is complete, you can upgrade pip again to the latest version.</p>
+</section>
+</section>
+</section>
+<section id="general-aspects-of-the-api">
+<h2>General aspects of the API<a class="headerlink" href="#general-aspects-of-the-api" title="Permalink to this headline"></a></h2>
+<section id="entry-point">
+<span id="index-1"></span><h3>Entry point<a class="headerlink" href="#entry-point" title="Permalink to this headline"></a></h3>
+<p>The entry point of VmbPy is the Vimba X singleton representing the underlying Vimba X System.</p>
+</section>
+<section id="entity-documentation">
+<h3>Entity documentation<a class="headerlink" href="#entity-documentation" title="Permalink to this headline"></a></h3>
+<p>All entities of the Python API are documented via docstring.</p>
+</section>
+<section id="context-manager">
+<span id="index-2"></span><h3>Context manager<a class="headerlink" href="#context-manager" title="Permalink to this headline"></a></h3>
+<p>The Vimba X singleton implements a context manager. The context entry initializes:</p>
+<ul class="simple">
+<li><p>System features discovery</p></li>
+<li><p>Interface and transport layer (TL) detection</p></li>
+<li><p>Camera detection</p></li>
+</ul>
+<p>The context entry always handles:</p>
+<ul class="simple">
+<li><p>API startup (including an optional method for advanced TL configuration) and shutdown</p></li>
+<li><p>Opening and closing cameras, interfaces, and TLs</p></li>
+<li><p>Feature discovery for the opened entity</p></li>
+</ul>
+<p>Always call all methods for Camera, Feature, and Interface within the scope of a <code class="docutils literal notranslate"><span class="pre">with</span></code> statement:</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">vmbpy</span> <span class="kn">import</span> <span class="o">*</span>
+<span class="k">with</span> <span class="n">VmbSystem</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span> <span class="k">as</span> <span class="n">vmb</span><span class="p">:</span>
+<span class="n">cams</span> <span class="o">=</span> <span class="n">vmb</span><span class="o">.</span><span class="n">get_all_cameras</span> <span class="p">()</span>
+</pre></div>
+</div>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For details about the optional method for advanced TL configuration, see the SDK Manual,
+chapter <a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation"><span class="std std-ref">TL activation and deactivation</span></a> and the
+<em>ListCameras</em> example.</p>
+</div>
+</section>
+<section id="classes">
+<span id="index-3"></span><h3>Classes<a class="headerlink" href="#classes" title="Permalink to this headline"></a></h3>
+<section id="camera">
+<h4>Camera<a class="headerlink" href="#camera" title="Permalink to this headline"></a></h4>
+<p>The Camera class implements a context manager. On entering the Camera’s context, all camera features
+are detected and can be accessed only within the <code class="docutils literal notranslate"><span class="pre">with</span></code> statement. Additionally to getting and setting
+camera features, the Camera class handles the camera access mode (default: Full Access).</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>For changing the pixel format, always use the convenience functions instead of the camera feature,
+see section <a class="reference internal" href="#changing-the-pixel-format"><span class="std std-ref">Changing the pixel format</span></a>.</p>
+</div>
+</section>
+<section id="frame">
+<h4>Frame<a class="headerlink" href="#frame" title="Permalink to this headline"></a></h4>
+<p>The Frame class stores raw image data and metadata of a single frame. The Frame class implements
+deepcopy semantics. Additionally, it provides methods for pixel format conversion and ancillary data
+access. Like all objects containing Features, AncillaryData implements a context manager that must be
+entered before features can be accessed. The Frame class offers methods for NumPy and OpenCV
+export.</p>
+<p>The following code snippet shows how to:</p>
+<ul class="simple">
+<li><p>Acquire a single frame</p></li>
+<li><p>Convert the pixel format to Mono8</p></li>
+<li><p>Store it using opencv-python</p></li>
+</ul>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">cv2</span>
+<span class="kn">from</span> <span class="nn">vmbpy</span> <span class="kn">import</span> <span class="o">*</span>
+
+<span class="k">with</span> <span class="n">VmbSystem</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span> <span class="k">as</span> <span class="n">vmb</span><span class="p">:</span>
+<span class="n">cams</span> <span class="o">=</span> <span class="n">vmb</span><span class="o">.</span><span class="n">get_all_cameras</span> <span class="p">()</span>
+<span class="k">with</span> <span class="n">cams</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">as</span> <span class="n">cam</span><span class="p">:</span>
+    <span class="n">frame</span> <span class="o">=</span> <span class="n">cam</span><span class="o">.</span><span class="n">get_frame</span> <span class="p">()</span>
+    <span class="n">frame</span><span class="o">.</span><span class="n">convert_pixel_format</span><span class="p">(</span><span class="n">PixelFormat</span><span class="o">.</span><span class="n">Mono8</span><span class="p">)</span>
+    <span class="n">cv2</span><span class="o">.</span><span class="n">imwrite</span><span class="p">(</span><span class="s1">&#39;frame.jpg&#39;</span><span class="p">,</span> <span class="n">frame</span><span class="o">.</span><span class="n">as_opencv_image</span> <span class="p">())</span>
+</pre></div>
+</div>
+</section>
+<section id="interface">
+<h4>Interface<a class="headerlink" href="#interface" title="Permalink to this headline"></a></h4>
+<p>The Interface class contains all data of detected hardware interfaces cameras are connected to. An
+Interface has associated features and implements a context manager as well. On context entry, all
+features are detected and can be accessed within the <code class="docutils literal notranslate"><span class="pre">with</span></code> statement scope. The following code
+snippet prints all features of the first detected Interface.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">vmbpy</span> <span class="kn">import</span> <span class="o">*</span>
+
+<span class="k">with</span> <span class="n">VmbSystem</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span> <span class="k">as</span> <span class="n">vmb</span><span class="p">:</span>
+    <span class="n">inters</span> <span class="o">=</span> <span class="n">vmb</span><span class="o">.</span><span class="n">get_all_interfaces</span> <span class="p">()</span>
+    <span class="k">with</span> <span class="n">inters</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">as</span> <span class="n">interface</span><span class="p">:</span>
+        <span class="k">for</span> <span class="n">feat</span> <span class="ow">in</span> <span class="n">interface</span><span class="o">.</span><span class="n">get_all_features</span> <span class="p">():</span>
+            <span class="nb">print</span><span class="p">(</span><span class="n">feat</span><span class="p">)</span>
+</pre></div>
+</div>
+</section>
+</section>
+</section>
+<section id="api-usage">
+<h2>API usage<a class="headerlink" href="#api-usage" title="Permalink to this headline"></a></h2>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a quick start, we recommend using the examples.</p>
+</div>
+<section id="listing-cameras">
+<h3>Listing cameras<a class="headerlink" href="#listing-cameras" title="Permalink to this headline"></a></h3>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>To list available cameras, see the <em>list_ cameras.py</em> example</p>
+</div>
+<p>Cameras are detected automatically on
+context entry of the Vimba X instance. The order in which detected cameras are listed is determined by
+the order of camera discovery and therefore not deterministic. The discovery of GigE cameras may take
+several seconds. Before opening cameras, camera objects contain all static details of a physical camera
+that do not change throughout the object’s lifetime such as the camera ID and the camera model.</p>
+<section id="plug-and-play">
+<h4>Plug and play<a class="headerlink" href="#plug-and-play" title="Permalink to this headline"></a></h4>
+<p>Cameras and hardware interfaces such as USB can be detected at runtime by registering a callback at
+the Vimba X instance. The following code snippet registers a callable, creating a log message as soon as a
+camera or an interface is connected or disconnected. It runs for 10 seconds waiting for changes of the
+connected hardware.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">sleep</span>
+<span class="kn">from</span> <span class="nn">vmbpy</span> <span class="kn">import</span> <span class="o">*</span>
+
+<span class="nd">@ScopedLogEnable</span><span class="p">(</span><span class="n">LOG_CONFIG_INFO_CONSOLE_ONLY</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">print_device_id</span><span class="p">(</span><span class="n">dev</span> <span class="p">,</span> <span class="n">state</span> <span class="p">):</span>
+    <span class="n">msg</span> <span class="o">=</span> <span class="s1">&#39;Device: </span><span class="si">{}</span><span class="s1">, State: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dev</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">state</span> <span class="p">))</span>
+    <span class="n">Log</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span><span class="o">.</span> <span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+<span class="n">VmbSystem</span> <span class="o">=</span> <span class="n">Vmb</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span>
+<span class="n">vmb</span><span class="o">.</span><span class="n">register_camera_change_handler</span><span class="p">(</span><span class="n">print_device_id</span><span class="p">)</span>
+<span class="n">vmb</span><span class="o">.</span><span class="n">register_interface_change_handler</span><span class="p">(</span><span class="n">print_device_id</span><span class="p">)</span>
+
+<span class="k">with</span> <span class="n">vmb</span><span class="p">:</span>
+    <span class="n">sleep</span> <span class="p">(</span><span class="mi">10</span><span class="p">)</span>
+</pre></div>
+</div>
+</section>
+</section>
+<section id="listing-features">
+<h3>Listing features<a class="headerlink" href="#listing-features" title="Permalink to this headline"></a></h3>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>To list the features of a camera and its physical interface,
+see the <em>list_ features.py</em> example.</p>
+</div>
+</section>
+<section id="accessing-features">
+<h3>Accessing features<a class="headerlink" href="#accessing-features" title="Permalink to this headline"></a></h3>
+<p id="index-4">As an example for reading and writing a feature, the following code snippet reads the current exposure
+time and increases it. Depending on your camera model and camera firmware, feature naming may be
+different.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">vmbpy</span> <span class="kn">import</span> <span class="o">*</span>
+
+<span class="k">with</span> <span class="n">VmbSystem</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span> <span class="k">as</span> <span class="n">vmb</span><span class="p">:</span>
+    <span class="n">cams</span> <span class="o">=</span> <span class="n">vmb</span><span class="o">.</span><span class="n">get_all_cameras</span> <span class="p">()</span>
+    <span class="k">with</span> <span class="n">cams</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">as</span> <span class="n">cam</span><span class="p">:</span>
+        <span class="n">exposure_time</span> <span class="o">=</span> <span class="n">cam</span><span class="o">.</span><span class="n">ExposureTime</span>
+
+        <span class="n">time</span> <span class="o">=</span> <span class="n">exposure_time</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
+        <span class="n">inc</span> <span class="o">=</span> <span class="n">exposure_time</span><span class="o">.</span><span class="n">get_increment</span> <span class="p">()</span>
+
+        <span class="n">exposure_time</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">time</span> <span class="o">+</span> <span class="n">inc</span><span class="p">)</span>
+</pre></div>
+</div>
+</section>
+<section id="acquiring-images">
+<h3>Acquiring images<a class="headerlink" href="#acquiring-images" title="Permalink to this headline"></a></h3>
+<p>The Camera class supports synchronous and asynchronous image acquisition. For high performance,
+acquire frames asynchronously and keep the registered callable as short as possible.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>The SDK Manual, section <a class="reference internal" href="sdkManual.html#synchronous-and-asynchronous-image-acquisition"><span class="std std-ref">Synchronous and asynchronous image acquisition</span></a>,
+provides background knowledge. The C API Manual, section
+<a class="reference internal" href="cAPIManual.html#image-capture-vs-image-acquisition"><span class="std std-ref">Image Capture vs. Image Acquisition</span></a>, provides detailed information about functions of
+the underlying C API.</p>
+</div>
+<p>To activate “alloc and announce” (optional): Use the optional parameter /x to overwrite
+<code class="code docutils literal notranslate"><span class="pre">allocation_</span> <span class="pre">mode</span></code>, see the <em>AsynchronousGrab</em> example.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Synchronous grab</span>
+<span class="kn">from</span> <span class="nn">vmbpy</span> <span class="kn">import</span> <span class="o">*</span>
+
+<span class="k">with</span> <span class="n">VmbSystem</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span> <span class="k">as</span> <span class="n">vmb</span><span class="p">:</span>
+    <span class="n">cams</span> <span class="o">=</span> <span class="n">vmb</span><span class="o">.</span><span class="n">get_all_cameras</span> <span class="p">()</span>
+    <span class="k">with</span> <span class="n">cams</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">as</span> <span class="n">cam</span><span class="p">:</span>
+        <span class="c1"># Aquire single frame synchronously</span>
+        <span class="n">frame</span> <span class="o">=</span> <span class="n">cam</span><span class="o">.</span><span class="n">get_frame</span> <span class="p">()</span>
+
+        <span class="c1"># Aquire 10 frames synchronously</span>
+        <span class="k">for</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">cam</span><span class="o">.</span><span class="n">get_frame_generator</span><span class="p">(</span><span class="n">limit</span> <span class="o">=</span><span class="mi">10</span><span class="p">):</span>
+            <span class="k">pass</span>
+</pre></div>
+</div>
+<p>Acquire frames asychronously by registering a callable being executed with each incoming frame:</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Asynchronous grab</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">from</span> <span class="nn">vmbpy</span> <span class="kn">import</span><span class="o">*</span>
+
+<span class="k">def</span> <span class="nf">frame_handler</span><span class="p">(</span><span class="n">cam</span> <span class="p">,</span> <span class="n">frame</span> <span class="p">):</span>
+    <span class="n">cam</span><span class="o">.</span><span class="n">queue_frame</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
+
+<span class="k">with</span> <span class="n">VmbSystem</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span> <span class="k">as</span> <span class="n">vmb</span><span class="p">:</span>
+    <span class="n">cams</span> <span class="o">=</span> <span class="n">vmb</span><span class="o">.</span><span class="n">get_all_cameras</span> <span class="p">()</span>
+    <span class="k">with</span> <span class="n">cams</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">as</span> <span class="n">cam</span><span class="p">:</span>
+        <span class="n">cam</span><span class="o">.</span><span class="n">start_streaming</span><span class="p">(</span><span class="n">frame_handler</span><span class="p">)</span>
+        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span> <span class="p">(</span><span class="mi">5</span><span class="p">)</span>
+        <span class="n">cam</span><span class="o">.</span><span class="n">stop_streaming</span> <span class="p">()</span>
+</pre></div>
+</div>
+<p>The <em>asynchronous_ grab.py</em> example shows how to grab images and prints information about the
+acquired frames to the console.</p>
+<p>The <em>asynchronous_ grab_ opencv.py</em> example shows how to grab images. It runs for 5 seconds and
+displays the images via OpenCV.</p>
+</section>
+<section id="changing-the-pixel-format">
+<span id="index-5"></span><h3>Changing the pixel format<a class="headerlink" href="#changing-the-pixel-format" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Always use the convenience functions instead
+of the PixelFormat feature of the Camera.</p>
+</div>
+<section id="convenience-functions">
+<h4>Convenience functions<a class="headerlink" href="#convenience-functions" title="Permalink to this headline"></a></h4>
+<p>To easily change the pixel format, always use the convenience functions instead
+of the PixelFormat feature of the Camera. The convenience function <code class="docutils literal notranslate"><span class="pre">set_pixel_format(fmt)</span></code>
+changes the Camera pixel format by passing the desired member of the <code class="docutils literal notranslate"><span class="pre">PixelFormat</span></code> enum. When
+using the PixelFormat feature (not recommended), a correctly pre-formatted string has to be used
+instead.</p>
+</section>
+<section id="getting-and-setting-pixel-formats">
+<h4>Getting and setting pixel formats<a class="headerlink" href="#getting-and-setting-pixel-formats" title="Permalink to this headline"></a></h4>
+<p>Before image acquisition is started, you can get and set pixel formats within the Camera class:</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Camera class methods for getting and setting pixel formats</span>
+<span class="c1"># Apply these methods before starting image acquisition</span>
+
+<span class="n">get_pixel_formats</span> <span class="p">()</span> <span class="c1"># returns a tuple of all pixel formats supported by the camera</span>
+<span class="n">get_pixel_format</span> <span class="p">()</span> <span class="c1"># returns the current pixel format</span>
+<span class="n">set_pixel_format</span><span class="p">(</span><span class="n">fmt</span><span class="p">)</span> <span class="c1"># enables you to set a new pixel format</span>
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The pixel format cannot be changed while the camera is acquiring images.</p>
+</div>
+</section>
+<section id="converting-a-pixel-format">
+<h4>Converting a pixel format<a class="headerlink" href="#converting-a-pixel-format" title="Permalink to this headline"></a></h4>
+<p>After image acquisition in the camera, the Frame contains the pixel format of the camera. Now you can
+convert the pixel format with the <code class="docutils literal notranslate"><span class="pre">convert_</span> <span class="pre">pixel_</span> <span class="pre">format()</span></code> method.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>See the <em>AsynchronousGrab</em> example, it contains a pixel format conversion.</p>
+</div>
+</section>
+</section>
+<section id="listing-chunk-data">
+<h3>Listing chunk data<a class="headerlink" href="#listing-chunk-data" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>To use the <em>chunk</em> feature, make sure your camera supports it.</p>
+</div>
+<p>Chunk data are image metadata such as the exposure time that are
+available in the Frame. To activate chunk, see the user
+documentation of your camera.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Before using chunk, open your camera as usual</span>
+<span class="k">def</span> <span class="nf">chunk_callback</span><span class="p">(</span><span class="n">features</span><span class="p">:</span> <span class="n">FeatureContainer</span><span class="p">):</span>
+    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Chunk callback executed for frame with id </span><span class="si">{</span><span class="n">features</span><span class="o">.</span><span class="n">ChunkFrameID</span><span class="o">.</span><span class="n">get</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
+
+<span class="k">def</span> <span class="nf">frame_callback</span><span class="p">(</span><span class="n">cam</span><span class="p">:</span> <span class="n">Camera</span><span class="p">,</span> <span class="n">stream</span><span class="p">:</span> <span class="n">Stream</span><span class="p">,</span> <span class="n">frame</span><span class="p">:</span> <span class="n">Frame</span><span class="p">):</span>
+    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Frame callback executed for </span><span class="si">{</span><span class="n">frame</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
+
+    <span class="c1"># Calling this method only works if chunk mode is activated!</span>
+    <span class="n">frame</span><span class="o">.</span><span class="n">access_chunk_data</span><span class="p">(</span><span class="n">chunk_callback</span><span class="p">)</span>
+    <span class="n">stream</span><span class="o">.</span><span class="n">queue_frame</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+    <span class="n">cam</span><span class="o">.</span><span class="n">start_streaming</span><span class="p">(</span><span class="n">frame_callback</span><span class="p">),</span>
+    <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+<span class="k">finally</span><span class="p">:</span>
+    <span class="n">cam</span><span class="o">.</span><span class="n">stop_streaming</span><span class="p">()</span>
+</pre></div>
+</div>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>The <em>list_ chunk_ data.py</em> example shows in detail how to list chunk data such
+as the frame count or feature values such as the exposure time. See
+<span class="xref std std-ref">examplesOverview:List Chunk data</span>.</p>
+</div>
+</section>
+<section id="loading-and-saving-user-sets">
+<h3>Loading and saving user sets<a class="headerlink" href="#loading-and-saving-user-sets" title="Permalink to this headline"></a></h3>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>To save the camera settings as a user set in the camera and load it, use the <em>user_ set.py</em> example.</p>
+</div>
+</section>
+<section id="loading-and-saving-settings">
+<h3>Loading and saving settings<a class="headerlink" href="#loading-and-saving-settings" title="Permalink to this headline"></a></h3>
+<p>Additionally to the user sets stored in the camera, you can save the feature values as an XML file to your
+host PC. For example, you can configure your camera with Vimba X Viewer, save the settings, and load
+them with any Vimba X API.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>See the <em>load_ save_ settings.py</em> example, see
+<a class="reference internal" href="examplesOverview.html#load-and-save-settings"><span class="std std-ref">Load and save settings</span></a>.</p>
+</div>
+</section>
+<section id="software-trigger">
+<h3>Software trigger<a class="headerlink" href="#software-trigger" title="Permalink to this headline"></a></h3>
+<p>Software trigger commands are supported by all Allied Vision cameras. To get started with triggering
+and explore the possibilities, you can use Vimba X Viewer. To program a software trigger application, use
+the following code snippet.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Software trigger for continuous image acquisition</span>
+
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">from</span> <span class="nn">vmbpy</span> <span class="kn">import</span> <span class="o">*</span>
+
+<span class="k">def</span> <span class="nf">handler</span><span class="p">(</span><span class="n">cam</span> <span class="p">,</span> <span class="n">frame</span> <span class="p">):</span>
+    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Frame acquired: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">frame</span><span class="p">),</span> <span class="n">flush</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">cam</span><span class="o">.</span><span class="n">queue_frame</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
+
+<span class="k">def</span> <span class="nf">main</span> <span class="p">():</span>
+    <span class="k">with</span> <span class="n">vmb</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span> <span class="k">as</span> <span class="n">vmb</span><span class="p">:</span>
+
+    <span class="n">cam</span> <span class="o">=</span> <span class="n">vmb</span><span class="o">.</span><span class="n">get_all_cameras</span> <span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
+
+    <span class="k">with</span> <span class="n">cam</span><span class="p">:</span>
+        <span class="n">cam</span><span class="o">.</span><span class="n">TriggerSource</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;Software &#39;</span><span class="p">)</span>
+        <span class="n">cam</span><span class="o">.</span><span class="n">TriggerSelector</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;FrameStart &#39;</span><span class="p">)</span>
+        <span class="n">cam</span><span class="o">.</span><span class="n">TriggerMode</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;On&#39;</span><span class="p">)</span>
+        <span class="n">cam</span><span class="o">.</span><span class="n">AcquisitionMode</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;Continuous &#39;</span><span class="p">)</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">cam</span><span class="o">.</span><span class="n">start_streaming</span><span class="p">(</span><span class="n">handler</span><span class="p">)</span>
+
+            <span class="n">time</span><span class="o">.</span><span class="n">sleep</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+            <span class="n">cam</span><span class="o">.</span><span class="n">TriggerSoftware</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+
+            <span class="n">time</span><span class="o">.</span><span class="n">sleep</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+            <span class="n">cam</span><span class="o">.</span><span class="n">TriggerSoftware</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+
+            <span class="n">time</span><span class="o">.</span><span class="n">sleep</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+            <span class="n">cam</span><span class="o">.</span><span class="n">TriggerSoftware</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+
+        <span class="k">finally</span><span class="p">:</span>
+            <span class="n">cam</span><span class="o">.</span><span class="n">stop_streaming</span> <span class="p">()</span>
+
+<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__ &#39;</span><span class="p">:</span>
+    <span class="n">main</span><span class="p">()</span>
+</pre></div>
+</div>
+</section>
+<section id="trigger-over-ethernet-action-commands">
+<h3>Trigger over Ethernet - Action Commands<a class="headerlink" href="#trigger-over-ethernet-action-commands" title="Permalink to this headline"></a></h3>
+<p>You can broadcast a trigger signal simultaneously to multiple GigE cameras via GigE cable. Action
+Commands must be set first to the camera(s) and then to the API, which sends the Action Commands to
+the camera(s).</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>Find more details in the application note:
+<a class="reference external" href="https://cdn.alliedvision.com/fileadmin/content/documents/products/cameras/various/appnote/GigE/Action-Commands_Appnote.pdf">Trigger over Ethernet (ToE) - Action Commands</a></p>
+</div>
+</section>
+<section id="multithreading">
+<h3>Multithreading<a class="headerlink" href="#multithreading" title="Permalink to this headline"></a></h3>
+<p>To get started with multithreading, use the <em>multithreading_opencv.py</em> example, see
+<a class="reference internal" href="examplesOverview.html#multithreading-opencv"><span class="std std-ref">Multithreading OpenCV</span></a>. You can use the
+example with one or multiple cameras. The FrameConsumer thread displays images of the first
+detected camera via OpenCV in a window of 480 x 480 pixels, independent of the camera’s image size.
+The example automatically constructs, starts, and stops FrameProducer threads for each connected or
+disconnected camera.</p>
+</section>
+<section id="migrating-to-the-c-or-c-api">
+<h3>Migrating to the C or C++ API<a class="headerlink" href="#migrating-to-the-c-or-c-api" title="Permalink to this headline"></a></h3>
+<p>The Python API is optimized for quick and easy prototyping. To migrate to the C API, we
+recommend using VmbPy’s extensive logging capabilities. In the log file, the order of operations
+is the same as in the C API. Migrating to the C++ API is eased by similar names of the
+functions and by a similar API structure.</p>
+</section>
+</section>
+<section id="troubleshooting">
+<h2>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permalink to this headline"></a></h2>
+<p>Frequent questions:</p>
+<ul class="simple">
+<li><p>To use the VmbPy API, the installation of a compatible C API version and Image
+Transform version is required. To check the versions, use <code class="docutils literal notranslate"><span class="pre">VmbSystem.get_</span> <span class="pre">version()</span></code>.</p></li>
+<li><p>Error: “Invalid VmbC Version” although the correct C API version is installed:
+Updating Vimba X does not automatically update any installed VmbPy site packages.
+Please perform the installation again manually.</p></li>
+<li><p>For changing the pixel format, always use the convenience functions instead of the camera feature,
+see section <a class="reference internal" href="#changing-the-pixel-format"><span class="std std-ref">Changing the pixel format</span></a>.</p></li>
+<li><p>For general issues, see <a class="reference internal" href="troubleshooting.html"><span class="doc">Troubleshooting</span></a>.</p></li>
+</ul>
+</section>
+<section id="logging">
+<span id="index-6"></span><h2>Logging<a class="headerlink" href="#logging" title="Permalink to this headline"></a></h2>
+<p>You can enable and configure logging to:</p>
+<ul class="simple">
+<li><p>Create error reports</p></li>
+<li><p>Prepare the migration to the C API or the C++ API</p></li>
+</ul>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>If you want to send a log file to our Technical Support team, always use logging
+level <em>Trace</em>.</p>
+</div>
+<section id="logging-levels">
+<h3>Logging levels<a class="headerlink" href="#logging-levels" title="Permalink to this headline"></a></h3>
+<p>The Python API offers several logging levels.
+The following code snippet shows how to enable logging with level Warning. All messages are printed to
+the console.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">vmbpy</span> <span class="kn">import</span> <span class="o">*</span>
+
+<span class="n">VmbSystem</span> <span class="o">=</span> <span class="n">VmbSystem</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span>
+<span class="n">vmb</span><span class="o">.</span><span class="n">enable_log</span><span class="p">(</span><span class="n">LOG_CONFIG_WARNING_CONSOLE_ONLY</span><span class="p">)</span>
+
+<span class="n">log</span> <span class="o">=</span> <span class="n">Log</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span>
+<span class="n">log</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s1">&#39;Critical , visible &#39;</span><span class="p">)</span>
+<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s1">&#39;Error , visible &#39;</span><span class="p">)</span>
+<span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s1">&#39;Warning , visible &#39;</span><span class="p">)</span>
+<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Info , invisible &#39;</span><span class="p">)</span>
+<span class="n">log</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s1">&#39;Trace , invisible &#39;</span><span class="p">)</span>
+
+<span class="n">vmb</span><span class="o">.</span><span class="n">disable_log</span> <span class="p">()</span>
+</pre></div>
+</div>
+<section id="tracing">
+<h4>Tracing<a class="headerlink" href="#tracing" title="Permalink to this headline"></a></h4>
+<p>The logging level <em>Trace</em> enables the most detailed reports. Additionally, you can use it to prepare the
+migration to the C API or the C++ API. <em>Trace</em> is always used with the <code class="docutils literal notranslate"><span class="pre">TraceEnable()</span></code>
+decorator. The decorator adds a log entry of level <em>Trace</em> as soon as the decorated function is called. In
+addition, a log message is added on function exit. This log message shows if the function exit occurred
+as expected or with an exception.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>To create a trace log file, use the <em>create_ trace_ log.py</em> example, see
+<a class="reference internal" href="examplesOverview.html#create-trace-log"><span class="std std-ref">Create Trace Log</span></a>.</p>
+</div>
+</section>
+<section id="avoiding-large-log-files">
+<h4>Avoiding large log files<a class="headerlink" href="#avoiding-large-log-files" title="Permalink to this headline"></a></h4>
+<p>All previous examples enable and disable logging globally via the VmbSystem object. For more complex
+applications, this may cause large log files. The <code class="docutils literal notranslate"><span class="pre">ScopedLogEnable()</span></code> decorator allows enabling and
+disabling logging on function entry and exit. The following code snippet shows how to use
+<code class="docutils literal notranslate"><span class="pre">TraceEnable()</span></code> and <code class="docutils literal notranslate"><span class="pre">ScopedLogEnable()</span></code>.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">vmbpy</span> <span class="kn">import</span> <span class="o">*</span>
+
+<span class="nd">@TraceEnable</span> <span class="p">()</span>
+<span class="k">def</span> <span class="nf">traced_function</span> <span class="p">():</span>
+   <span class="n">Log</span><span class="o">.</span><span class="n">get_instance</span> <span class="p">()</span><span class="o">.</span> <span class="n">info</span><span class="p">(</span><span class="s1">&#39;Within Traced Function &#39;</span><span class="p">)</span>
+
+<span class="nd">@ScopedLogEnable</span><span class="p">(</span><span class="n">LOG_CONFIG_TRACE_CONSOLE_ONLY</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">logged_function</span> <span class="p">():</span>
+   <span class="n">traced_function</span> <span class="p">()</span>
+
+<span class="n">logged_function</span> <span class="p">()</span>
+</pre></div>
+</div>
+</section>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="cppAPIManual.html" class="btn btn-neutral float-left" title="CPP API Manual" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="imagetransformManual.html" class="btn btn-neutral float-right" title="Image Transform Manual" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/sdkManual.html b/VimbaX/doc/VimbaX_Documentation/sdkManual.html
new file mode 100644
index 0000000000000000000000000000000000000000..d0029031b5452bad6d09c053772d386365823fb0
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/sdkManual.html
@@ -0,0 +1,515 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>SDK Manual &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="C API Manual" href="cAPIManual.html" />
+    <link rel="prev" title="Viewer Guide" href="viewerGuide.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">SDK Manual</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#architecture-and-apis">Architecture and APIs</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#gentl-modules">GenTL modules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#features">Features</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#tl-activation-and-deactivation">TL activation and deactivation</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#configuring-tl-usage">Configuring TL usage</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#ctipaths">CtiPaths</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#tlvendor">TlVendor</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#interfacetype">InterfaceType</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#overwriting-vmbc-xml">Overwriting VmbC.xml</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#synchronous-and-asynchronous-image-acquisition">Synchronous and asynchronous image acquisition</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#buffer-management">Buffer management</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#synchronous-image-acquisition">Synchronous image acquisition</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#asynchronous-image-acquisition">Asynchronous image acquisition</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#notifications">Notifications</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#building-applications">Building applications</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#setting-up-visual-studio-for-c-and-c-projects">Setting up Visual Studio for C and C++ projects</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#using-cmake">Using CMake</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>SDK Manual</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="sdk-manual">
+<h1>SDK Manual<a class="headerlink" href="#sdk-manual" title="Permalink to this headline"></a></h1>
+<section id="architecture-and-apis">
+<span id="index-0"></span><h2>Architecture and APIs<a class="headerlink" href="#architecture-and-apis" title="Permalink to this headline"></a></h2>
+<p>All APIs cover the following functions:</p>
+<ul class="simple">
+<li><p>Listing currently connected cameras</p></li>
+<li><p>Controlling camera features</p></li>
+<li><p>Receiving images from the camera</p></li>
+<li><p>Notifications about camera connections or disconnections</p></li>
+</ul>
+<p>The Image Transform Library converts camera images into other pixel formats
+and creates color images from raw images (debayering).</p>
+<figure class="align-default" id="id1">
+<a class="reference internal image-reference" href="_images/Architecture.svg"><img alt="SDK architecture" src="_images/Architecture.svg" width="400" /></a>
+<figcaption>
+<p><span class="caption-text">SDK architecture</span><a class="headerlink" href="#id1" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+<section id="gentl-modules">
+<span id="index-1"></span><h2>GenTL modules<a class="headerlink" href="#gentl-modules" title="Permalink to this headline"></a></h2>
+<p>Vimba X complies with the GenTL specification. It uses the following
+GenTL modules as Entities:</p>
+<ul class="simple">
+<li><p>The <strong>VmbSystem module</strong>, which is a singleton and contains only few functions.</p></li>
+<li><p>The <strong>TLSystem</strong> modules. Each TL is represented through a System and may enumerate
+multiple corresponding interfaces, such as several NICs.</p></li>
+<li><p>The <strong>Interface</strong> modules. Each physical interface (for example, a NIC or a frame grabber)
+is represented through its own Interface module. Each Interface module enumerates
+the devices (cameras) that are connected to it.</p></li>
+<li><p>The <strong>Device module</strong>. According to the GenTL specification, the physical camera is
+a Remote Device, whereas the TL generates a Local Device as soon as a camera is open.
+The Local Device is necessary only to configure features such as GVCPTimeout or
+GevHeartbeatTimeout for GigE Cameras.</p></li>
+<li><p>The <strong>Stream</strong> module.</p></li>
+<li><p>The <strong>Buffer</strong> module. Buffer-related features can be accessed through the Frame handle.</p></li>
+</ul>
+<figure class="align-default" id="id2">
+<a class="reference internal image-reference" href="_images/GenTL-modules.png"><img alt="GenTL modules" src="_images/GenTL-modules.png" style="width: 400px;" /></a>
+<figcaption>
+<p><span class="caption-text">GenTL modules</span><a class="headerlink" href="#id2" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+<section id="features">
+<h2>Features<a class="headerlink" href="#features" title="Permalink to this headline"></a></h2>
+<p>Within Vimba X, settings and options are controlled by features.
+Many features come from the camera, which provides a self-describing
+XML file. Vimba X can read and interpret the camera XML file. This
+means that Vimba X is immediately ready-to-use with all supported cameras.
+Even if the camera has a unique, vendor-specific feature, Vimba X does not
+need to be updated to use this feature because it gets all necessary
+information from the XML file. Other features are part of the Vimba X
+core and transport layers.</p>
+<p>If these features are enabled for the TL, they are valid for all
+interfaces and cameras using this TL.
+If these features are enabled for the interface (such as a NIC),
+they are valid for all interfaces.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a quick start, use the <em>ListFeatures</em> example. More detailed information
+is provided in the API manuals.</p>
+</div>
+<p>Vimba X provides several feature types:</p>
+<ul class="simple">
+<li><p>Integer</p></li>
+<li><p>Float</p></li>
+<li><p>Enum</p></li>
+<li><p>String</p></li>
+<li><p>Command</p></li>
+<li><p>Boolean</p></li>
+<li><p>Raw data</p></li>
+</ul>
+<p>The features of Vimba X are based on the GenICam industry standard.
+Therefore, Vimba X enables using all supported cameras with GenICam-based
+third-party software.</p>
+</section>
+<section id="tl-activation-and-deactivation">
+<span id="index-2"></span><h2>TL activation and deactivation<a class="headerlink" href="#tl-activation-and-deactivation" title="Permalink to this headline"></a></h2>
+<p>The APIs use GenICam transport layer (GenTL) libraries to communicate with
+the cameras.</p>
+<p>By default, each SDK initialization uses all transport layers that come with Vimba X, as applied in VmbC.xml. Their display name
+begins with “AVT” instead of “Vimba”.
+You can customize TL usage to activate additional TLs or ignore TLs that you don’t need.</p>
+<p>If many TLs are installed, loading all of them takes some time.</p>
+<p>To speed up the TL loading process or for a better overview,
+you can customize its behavior to use only:</p>
+<ul class="simple">
+<li><p>All TLs located in a specific file path (applied by default, more than one file path is possible)</p></li>
+<li><p>TLs of a specific vendor or specific vendors (VendorName)</p></li>
+<li><p>One TL file or several TL files (path to the file or files)</p></li>
+<li><p>A specific camera interface such as GigE Vision</p></li>
+</ul>
+<section id="configuring-tl-usage">
+<span id="index-3"></span><h3>Configuring TL usage<a class="headerlink" href="#configuring-tl-usage" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Your changes of VmbC.xml will be deleted during the Vimba X deinstallation.
+We recommend saving a copy with your changes.</p>
+</div>
+<p>With VmbC.xml, you can configure which TLs are used by Vimba X.
+The file is located in VimbaX/bin.</p>
+<ul class="simple">
+<li><p>By default, the Vimba X installer automatically uses the required Cti paths of the
+Vimba X installation directory. Other TLs that are present on the system are ignored.</p></li>
+<li><p>You can comment out the Cti paths and instead use vendor or interface types.</p></li>
+</ul>
+<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;CtiPaths&gt;</span>
+       Path required=&quot;true&quot;&gt;.<span class="nt">&lt;/Path&gt;</span>
+     <span class="nt">&lt;/CtiPaths&gt;</span>
+
+<span class="nt">&lt;TlVendor</span> <span class="na">vendor-type=</span><span class="s">&quot;AVT&quot;</span> <span class="na">active=</span><span class="s">&quot;true&quot;</span><span class="nt">/&gt;</span>
+<span class="nt">&lt;TlVendor</span> <span class="na">vendor-type=</span><span class="s">&quot;NET&quot;</span> <span class="na">active=</span><span class="s">&quot;true&quot;</span><span class="nt">/&gt;</span>
+<span class="nt">&lt;TlVendor</span> <span class="na">vendor-type=</span><span class="s">&quot;Other&quot;</span> <span class="na">active=</span><span class="s">&quot;false&quot;</span><span class="nt">/&gt;</span>
+
+<span class="nt">&lt;InterfaceType</span> <span class="na">type=</span><span class="s">&quot;GEV&quot;</span> <span class="na">active=</span><span class="s">&quot;true&quot;</span><span class="nt">/&gt;</span>
+<span class="nt">&lt;InterfaceType</span> <span class="na">type=</span><span class="s">&quot;CL&quot;</span> <span class="na">active=</span><span class="s">&quot;false&quot;</span><span class="nt">/&gt;</span>
+</pre></div>
+</div>
+<section id="ctipaths">
+<h4>CtiPaths<a class="headerlink" href="#ctipaths" title="Permalink to this headline"></a></h4>
+<p>To configure Cti paths:</p>
+<ul class="simple">
+<li><p>Use a specific path to a .cti file or a folder containing .cti files.</p></li>
+<li><p>Relative paths are resolved from the location of the VmbC.xml file.</p></li>
+<li><p>At least one .cti file must be provided to operate the API (or comment out the path and use, for example, the vendor name).</p></li>
+<li><p>This information is ignored if at least one cti path or directory is passed as parameter to VmbStartup.</p></li>
+<li><p>If there are no &lt;Path&gt; children of the element or the element is not present, the appropriate GenICam
+environment variable (GENICAM_GENTL64_PATH) is used.</p></li>
+</ul>
+<p>required:</p>
+<ul class="simple">
+<li><p>false (default): Files that cannot be loaded or are missing files are ignored. If no TL can be loaded
+at all from any other source this still results in an error.</p></li>
+<li><p>true: VmbStartup fails with error VmbErrorTLNotFound if the cti file cannot be loaded or no cti file in
+the given directory can be loaded.</p></li>
+</ul>
+</section>
+<section id="tlvendor">
+<h4>TlVendor<a class="headerlink" href="#tlvendor" title="Permalink to this headline"></a></h4>
+<p>vendor-type:</p>
+<ul class="simple">
+<li><p>Specifies TL vendors to include or exclude from loading. The provided value
+needs to exactly match the string returned by the TLs info command, except for
+short values such as AVT, NET and SVS for common vendors.</p></li>
+<li><p>You can use “*” as match-all wildcard. Partial wildcard matching like
+“AV*” is not supported. Wildcard elements may be ignored if more specific elements exist.</p></li>
+</ul>
+<p>active:</p>
+<ul class="simple">
+<li><p>true: Enables TLs of the matching vendor.</p></li>
+<li><p>false: Disables TLs from this vendor.</p></li>
+</ul>
+<p>The declaration of this active attribute is mandatory. If not provided, the TL loading fails.
+If no TlVendor element is provided, TLs from all vendors are loaded.
+A TL of a given vendor is used if there is an element &lt;TlVendor&gt; element marking the vendor of the TL as active.
+An element where vendor-type is not a wildcard overwrites an element specifying the vendor-type as wildcard.</p>
+</section>
+<section id="interfacetype">
+<h4>InterfaceType<a class="headerlink" href="#interfacetype" title="Permalink to this headline"></a></h4>
+<p>type:</p>
+<ul class="simple">
+<li><p>Filters loaded TLs by interface type according to the GenTL standard.</p></li>
+<li><p>Eligible values are: CL|CLHS|CXP|Custom|Ethernet|GEV|IIDC|PCI|U3V|UVC</p></li>
+<li><p>You can use “*” as match-all wildcard. Partial wildcard matching like
+“Ether*” is not supported. Wildcard elements may be ignored if more specific elements exist.</p></li>
+<li><p>Duplicates or any other value cause the loading to fail.</p></li>
+</ul>
+<p>active:</p>
+<ul class="simple">
+<li><p>true: TLs for this interface type are loaded.</p></li>
+<li><p>false: This interface type is not loaded. TLs that can only provide interfaces of a deactivated type are not used.</p></li>
+<li><p>default: true. If not provided, TLs for all interface types are loaded, except for unknown type values.
+If no InterfaceType element is provided, TLs for all interfaces are loaded.
+Only interfaces with an &lt;InterfaceType&gt; element marking it as active are used.
+An element where the type is specified as non-wildcard takes precedence over a elements using a wildcard.</p></li>
+</ul>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Both &lt;TlVendor&gt; and &lt;InterfaceType&gt; elements can result in a TL not being used by the API.</p>
+</div>
+</section>
+</section>
+<section id="overwriting-vmbc-xml">
+<h3>Overwriting VmbC.xml<a class="headerlink" href="#overwriting-vmbc-xml" title="Permalink to this headline"></a></h3>
+<p>During SDK initialization,
+the settings of VmbC.xml are applied.
+By default, the string for path configuration is NULL and all TLs activated in
+VmbC.xml are loaded.</p>
+<p>To overwrite the TL path settings in VmbC.xml, pass a string to <code class="docutils literal notranslate"><span class="pre">VmbStartup()</span></code>
+with the path to the TL directory or file you want to load.</p>
+<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="n">VmbError_t</span><span class="w">          </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbErrorSuccess</span><span class="p">;</span><span class="w"></span>
+
+<span class="w">        </span><span class="k">const</span><span class="w"> </span><span class="n">VmbFilePathChar_t</span><span class="o">*</span><span class="w"> </span><span class="n">usbTLFilePath</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sa">L</span><span class="s">&quot;&lt;path to VimbaUSBTL.cti&gt;&quot;</span><span class="p">;</span><span class="w"></span>
+<span class="w">        </span><span class="k">const</span><span class="w"> </span><span class="n">VmbFilePathChar_t</span><span class="o">*</span><span class="w"> </span><span class="n">gigeTLDirectoryPath</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sa">L</span><span class="s">&quot;&lt;path to TL directory&gt;&quot;</span><span class="p">;</span><span class="w"></span>
+<span class="w">        </span><span class="k">const</span><span class="w"> </span><span class="n">VmbFilePathChar_t</span><span class="o">*</span><span class="w"> </span><span class="n">multiplePaths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sa">L</span><span class="s">&quot;&lt;path 1&gt;&quot;</span><span class="p">;</span><span class="s">&quot;&lt;path 2&gt;&quot;</span><span class="p">;</span><span class="w"></span>
+
+<span class="w">        </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbStartup</span><span class="p">(</span><span class="n">usbTLFilePath</span><span class="p">)</span><span class="w"></span>
+</pre></div>
+</div>
+<span class="target" id="index-4"></span></section>
+</section>
+<section id="synchronous-and-asynchronous-image-acquisition">
+<span id="index-5"></span><h2>Synchronous and asynchronous image acquisition<a class="headerlink" href="#synchronous-and-asynchronous-image-acquisition" title="Permalink to this headline"></a></h2>
+<p>This chapter explains the principles of synchronous and asynchronous
+image acquisition. For details, please read the API manual.
+Note that the API provides ready-made convenience
+functions for standard applications. These functions perform several
+procedures in just one step. However, for complex applications with
+special requirements, manual programming as described here is still required.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a quick start, see the <em>AsynchronousGrab</em> example.</p>
+</div>
+<section id="buffer-management">
+<span id="index-6"></span><h3>Buffer management<a class="headerlink" href="#buffer-management" title="Permalink to this headline"></a></h3>
+<p>Every image acquisition requires allocating memory and handling frame buffers.
+The following interaction between the user and the Vimba API is required:</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>C and C++ API: Stream features may contain additional payloadsize information.
+For proper handling, use the convenience function <cite>VmbPayloadSizeGet()</cite>.</p>
+</div>
+<p>User:</p>
+<ol class="arabic simple">
+<li><p>Allocate memory for the frame buffers on the host PC.</p></li>
+<li><p>Announce the buffer (this hands the frame buffer over to the API).</p></li>
+<li><p>Queue a frame (prepare buffer to be filled).</p></li>
+</ol>
+<p>Vimba:</p>
+<ol class="arabic simple" start="4">
+<li><p>Vimba X fills the buffer with an image from the camera.</p></li>
+<li><p>Vimba X returns the filled buffer (and hands it over to the user).</p></li>
+</ol>
+<p>User:</p>
+<ol class="arabic simple" start="6">
+<li><p>Work with the image.</p></li>
+<li><p>Requeue the frame to hand it over to the API.</p></li>
+</ol>
+</section>
+<section id="synchronous-image-acquisition">
+<h3>Synchronous image acquisition<a class="headerlink" href="#synchronous-image-acquisition" title="Permalink to this headline"></a></h3>
+<p>Synchronous image acquisition is simple, but does not allow reaching
+high frame rates. Its principle is to handle only one frame buffer
+and the corresponding image at a time, which is comparable to juggling
+with one ball.</p>
+</section>
+<section id="asynchronous-image-acquisition">
+<h3>Asynchronous image acquisition<a class="headerlink" href="#asynchronous-image-acquisition" title="Permalink to this headline"></a></h3>
+<p>Asynchronous image acquisition is comparable to juggling with several
+balls: While you work with an image, the next image is being acquired.
+Simplified said: the more images within a given time you want to work
+with, the more buffers you have to handle.</p>
+<figure class="align-default" id="id3">
+<a class="reference internal image-reference" href="_images/Acquisition.png"><img alt="Synchronous and Asynchronous image acquisition" src="_images/Acquisition.png" style="width: 600px;" /></a>
+<figcaption>
+<p><span class="caption-text">Synchronous and Asynchronous image acquisition</span><a class="headerlink" href="#id3" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+</section>
+<section id="notifications">
+<span id="index-7"></span><h2>Notifications<a class="headerlink" href="#notifications" title="Permalink to this headline"></a></h2>
+<p>In general, a vision system consisting of cameras and PCs is asynchronous, which means that certain
+events usually occur unexpectedly. This includes - among others - the detection of cameras connected
+to the PC or the reception of images. A Vimba X application can react on a particular
+event by registering a corresponding handler function at the API, which in return will be called
+when the event occurs. The exact method how to register an event handler depends on the programming
+language. For details, use the code examples.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The registered functions are usually called from a different thread than the
+application. So extra care must be taken when accessing data shared between
+these threads (multithreading environment).
+Furthermore, the API might be blocked while the event handler is
+executed. Therefore, it is highly recommended to exit the event handler
+function as fast as possible.</p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Not all API functions may be called from the event handler function. For more
+details, see the API Manual.</p>
+</div>
+</section>
+<section id="building-applications">
+<h2>Building applications<a class="headerlink" href="#building-applications" title="Permalink to this headline"></a></h2>
+<section id="setting-up-visual-studio-for-c-and-c-projects">
+<h3>Setting up Visual Studio for C and C++ projects<a class="headerlink" href="#setting-up-visual-studio-for-c-and-c-projects" title="Permalink to this headline"></a></h3>
+<p>The easiest way to set up Visual Studio for C or C++ projects is using the property sheet <em>VmbCPP.props</em>
+from the Vimba X examples folder. The following description uses C++, but the principle can be applied to
+the C API as well. Users of the other APIs can use Visual Studio without any special preparations.</p>
+<ol class="arabic simple">
+<li><p>In Visual Studio, create a new project. Ignore the Application Wizard, just click <span class="guilabel">Finish</span>.
+Set the Solution Platform to x64.</p></li>
+<li><p>Insert this code into YourProjectName.cpp:</p></li>
+</ol>
+<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;iostream&gt;</span><span class="cp"></span>
+
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;VmbCPP/VmbCPP.h&quot;</span><span class="cp"></span>
+
+<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Hello Vimba X&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">    </span><span class="n">VmbCPP</span><span class="o">::</span><span class="n">VmbSystem</span><span class="o">&amp;</span><span class="w"> </span><span class="n">sys</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">VmbCPP</span><span class="o">::</span><span class="n">VmbSystem</span><span class="o">::</span><span class="n">GetInstance</span><span class="p">();</span><span class="w"></span>
+<span class="w">    </span><span class="n">VmbVersionInfo_t</span><span class="w"> </span><span class="n">version</span><span class="p">;</span><span class="w"></span>
+<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">VmbErrorSuccess</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">sys</span><span class="p">.</span><span class="n">QueryVersion</span><span class="p">(</span><span class="n">version</span><span class="w"> </span><span class="p">))</span><span class="w"></span>
+<span class="w">    </span><span class="p">{</span><span class="w"></span>
+<span class="w">    </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Version:&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">version</span><span class="p">.</span><span class="n">major</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;.&quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">version</span><span class="p">.</span><span class="n">minor</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
+<span class="w">    </span><span class="p">}</span><span class="w"></span>
+<span class="w">    </span><span class="n">getchar</span><span class="w"> </span><span class="p">();</span><span class="w"></span>
+<span class="w">    </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
+</pre></div>
+</div>
+<ol class="arabic simple" start="3">
+<li><p>Open the Property Manager window. In most Visual Studio editions, you can find it by clicking
+View → Other Windows → Property Manager.</p></li>
+</ol>
+<figure class="align-right">
+<a class="reference internal image-reference" href="_images/Properties.png"><img alt="Property manager icon" src="_images/Properties.png" style="width: 30px;" /></a>
+</figure>
+<ol class="arabic simple" start="4">
+<li><p>In the Property Manager window, click the Add Existing Property Sheet icon:</p></li>
+<li><p>Go to the VmbCPP Examples folder: C:\Users\Public\Documents\Allied Vision\VimbaX\Examples\VmbCPP.
+The VmbCPP.props file is located in the folder Common\build_vs.</p></li>
+</ol>
+<p>Now Visual Studio is set up and you can debug the solution.</p>
+</section>
+<section id="using-cmake">
+<h3>Using CMake<a class="headerlink" href="#using-cmake" title="Permalink to this headline"></a></h3>
+<p>You can also build the C and C++ examples with CMake. We recommend using CMake v3.16 or higher.
+As CMake generators, we have tested Visual Studio 2017, Visual Studio 2019, and Make.</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Windows, default generator: Visual Studio</span>
+<span class="n">cmake</span> <span class="o">-</span><span class="n">A</span> <span class="n">x64</span> <span class="o">-</span><span class="n">S</span> <span class="s2">&quot;C:/Users/Public/Documents/Allied Vision/VimbaX/Examples/VmbC&quot;</span> <span class="o">-</span>
+<span class="n">B</span> <span class="n">VmbC_examples_build</span>
+<span class="n">cmake</span> <span class="o">-</span><span class="n">A</span> <span class="n">x64</span> <span class="o">-</span><span class="n">S</span> <span class="s2">&quot;C:/Users/Public/Documents/Allied Vision/VimbaX/Examples/VmbCPP&quot;</span> <span class="o">-</span>
+<span class="n">B</span> <span class="n">VmbCPP_examples_build</span>
+
+<span class="n">cmake</span> <span class="o">--</span><span class="n">build</span> <span class="n">VmbC_examples_build</span> <span class="o">--</span><span class="n">config</span> <span class="n">Release</span>
+<span class="n">cmake</span> <span class="o">--</span><span class="n">build</span> <span class="n">VmbCPP_examples_build</span> <span class="o">--</span><span class="n">config</span> <span class="n">Release</span>
+</pre></div>
+</div>
+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Unix Makefiles</span>
+<span class="c1"># Here, Vimba X is installed in the user&#39;s home directory and</span>
+<span class="c1"># version is 2022-1</span>
+<span class="nv">api_dir</span><span class="o">=</span><span class="k">$(</span>realpath ~/VimbaX_2022-1/api<span class="k">)</span>
+
+cmake -S <span class="s2">&quot;</span><span class="si">${</span><span class="nv">api</span><span class="p">-dir</span><span class="si">}</span><span class="s2">/examples/VmbC&quot;</span> -B VmbC_examples_build
+cmake -S <span class="s2">&quot;</span><span class="si">${</span><span class="nv">api</span><span class="p">-dir</span><span class="si">}</span><span class="s2">/examples/VmbCPP&quot;</span> -B VmbCPP_examples_build
+
+cmake --build VmbC_examples_build
+cmake --build VmbCPP_examples_build
+</pre></div>
+</div>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="viewerGuide.html" class="btn btn-neutral float-left" title="Viewer Guide" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="cAPIManual.html" class="btn btn-neutral float-right" title="C API Manual" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/search.html b/VimbaX/doc/VimbaX_Documentation/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..387526fc38de5f22aaf3ef6e2517515d8ae7620a
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/search.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Search &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+    
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+        <script src="_static/tabs.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="#" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="#" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Search</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <noscript>
+  <div id="fallback" class="admonition warning">
+    <p class="last">
+      Please activate JavaScript to enable the search functionality.
+    </p>
+  </div>
+  </noscript>
+
+  
+  <div id="search-results">
+  
+  </div>
+
+           </div>
+          </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+  <script>
+    jQuery(function() { Search.loadIndex("searchindex.js"); });
+  </script>
+  
+  <script id="searchindexloader"></script>
+   
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/searchindex.js b/VimbaX/doc/VimbaX_Documentation/searchindex.js
new file mode 100644
index 0000000000000000000000000000000000000000..c916490eb0c8147a9a34c20c1a3b75c2146423b2
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({docnames:["about","cAPIManual","cppAPIManual","driverInstaller","examplesOverview","fwUpdater","genindex","imagetransformManual","index","legalInformation","migrationGuide","pythonAPIManual","sdkManual","troubleshooting","viewerGuide"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["about.rst","cAPIManual.rst","cppAPIManual.rst","driverInstaller.rst","examplesOverview.rst","fwUpdater.rst","genindex.rst","imagetransformManual.rst","index.rst","legalInformation.rst","migrationGuide.rst","pythonAPIManual.rst","sdkManual.rst","troubleshooting.rst","viewerGuide.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[1,2,3,5,7,9,11,12,13,14],"07646":9,"0f":7,"0ff":1,"0x":1,"0x00":1,"0x01":1,"0x02":1,"0x04":1,"0x08":1,"0x10":1,"1":[1,2,3,7,11,12,13,14],"10":[1,3,7,9,11,13,14],"100":[7,14],"1001":3,"1002":3,"10p":7,"11":[1,2,3,10,13],"12":[1,3,7,13],"12p":7,"12pack":7,"13":[1,3,13],"1394":[0,1],"14":[1,13],"15":[1,2,13],"16":[1,7,12,13],"168":2,"17":[1,13],"18":[1,13],"19":[1,13],"192":2,"1988":9,"1991":9,"1997":9,"2":[1,2,3,7,11,12,14],"20":[1,3,13,14],"2000":2,"2002":9,"2004":9,"2009":9,"2010":9,"2012":9,"2013":9,"2014":9,"2015":[7,9],"2016":9,"2017":[2,10,12],"2019":12,"2022":[9,12],"21":[3,11,13],"22":[1,3],"23":3,"24":3,"25":3,"255":1,"27":13,"2a":9,"2x2":7,"3":[1,2,5,11,13],"33":1,"36":7,"3x3":7,"4":[1,2,7,13,14],"42":2,"4294967295":1,"48":7,"480":[7,11],"5":[1,2,11],"500":14,"6":[1,13],"601_411_8_cbyycryi":7,"64":[1,11],"640":7,"640x480":7,"69e":9,"7":[1,11,13],"8":[1,7,13,14],"9":[1,13],"90":7,"\u03bcs":14,"boolean":[1,12],"break":[1,2],"byte":7,"case":[1,2,5,7,10,13,14],"catch":2,"char":[1,2],"class":[1,3,4,10],"const":[1,2,7,10,12],"default":[0,1,7,10,11,12,13],"do":[1,2,7,9,11,14],"enum":[2,10,11,12],"export":[4,11,13],"final":11,"float":[1,2,7,12],"function":[0,3,5,8,12],"import":[2,10,11],"int":[1,2,12],"long":[1,2,7,14],"new":[0,1,2,3,5,7,11,12,14],"null":[1,2,7,10,12],"public":[2,4,9,12],"return":[1,2,3,7,10,11,12],"short":[1,2,11,12,14],"static":[1,11],"switch":[1,2,14],"true":[7,11,12,14],"try":[5,10,11,13],"void":[1,2,7],"while":[1,2,3,4,7,11,12,14],A:[1,2,3,7,9,12],AND:9,AS:9,As:[0,1,7,10,11,12,14],At:[3,12],BE:9,BUT:9,BY:9,By:[0,1,2,5,9,10,12,13,14],FOR:9,For:[1,2,4,5,7,9,10,11,12,13,14],IF:9,IS:9,If:[0,1,2,3,4,5,7,9,10,11,12,13,14],In:[1,2,7,9,10,11,12,13,14],It:[0,1,2,3,7,10,11,12,13,14],Its:12,NO:9,NOT:9,No:[1,3,13],Not:[7,12],OF:9,ON:9,OR:9,Of:14,On:[1,2,3,11,14],One:[1,12,13],Or:[11,13],SUCH:9,THAT:9,TO:9,That:2,The:[0,1,2,3,5,7,9,10,11,12,13,14],Their:12,Then:14,There:[1,13],These:[1,2,9,12],To:[0,1,2,3,4,5,7,9,10,11,12,13,14],WILL:9,WITH:9,With:[1,2,9,12,14],__main__:11,__name__:11,abl:[1,2],about:[1,2,3,4,5,7,8,9,10,11,12,13],abov:[1,7,9,11,14],ac:9,accept:[1,7,14],access:[0,10,12,13,14],access_chunk_data:[10,11],accesschunkdata:[2,10],accessori:[1,2],accompani:9,accord:[1,2,4,7,9,12,14],accordingli:[1,14],accuraci:9,achiev:[3,7,10,14],acquir:[4,10,12,14],acquiremultipleimag:2,acquiresingleimag:[2,10],acquisisit:2,acquisist:4,acquisit:[4,8,11],acquisitionframecount:14,acquisitionmod:[1,2,11],acquisitionstart:[1,2],acquisitionstop:[1,2],act:9,action0:1,action1:1,action:[2,3,9,10,13],actioncommand:1,actioncontrol:1,actiondevicekei:[1,14],actiongroupkei:1,actiongroupmask:1,activ:[0,1,2,4,8,9,10,11,13,14],actual:[1,5,7],ad:[2,3,5,10,11],adapt:[3,14],add:[1,2,3,10,11,12,13,14],addit:[0,1,3,7,9,10,11,12,13,14],addition:[1,2,3,7,10,11,14],address:[2,3,4,8,10,14],adjust:[1,2,3,7,14],adjustmaxfilterdrivernum:3,admin:11,advanc:[0,2,10,11,14],advantag:2,advertis:9,advis:9,affect:14,after:[0,1,2,3,7,9,10,11,14],afterward:7,again:[1,2,3,5,11,14],against:[1,9],agre:9,agreement:9,ajdust:2,algorithm:14,alia:2,alias:7,align:[1,7,10],aligned_alloc:1,alik:7,all:[0,2,3,4,5,7,9,10,11,12,13],alli:[0,1,3,4,5,9,11,12,13],alliedvis:[0,5,9,11,13,14],alloc:[1,2,10,11,12,14],allocation_:11,allow:[7,9,10,11,12,14],along:2,alreadi:[1,2,13,14],also:[1,2,4,5,9,11,12,14],alter:9,altern:1,although:[2,3,7,9,11],alvium:0,alwai:[0,1,2,7,10,11],among:12,amount:[1,14],amplifi:14,an:[1,2,3,9,10,11,12,13],ancillari:[10,11],ancillarydata:11,ani:[0,1,2,7,9,11,12,14],announc:[1,2,10,11,12,14],announcefram:[2,10],anoth:[1,2,3,7,10],anounc:1,anti:7,anymor:1,anytim:7,anywher:3,aoi:14,api:[4,8,13],api_dir:12,appear:[9,14],appli:[1,2,3,7,9,10,11,12,13,14],applic:[1,2,3,5,7,8,10,11,14],approach:2,appropri:[1,2,12],approxim:14,aquir:11,ar:[0,1,2,3,4,7,9,10,11,12,13,14],architectur:[2,8,11],area:14,aren:1,argument:10,aris:9,arm:[3,4,13],aros:9,around:11,arrai:[1,2,7,11],arriv:7,artifici:14,as_opencv_imag:11,ask:3,aspect:8,assert:9,assign:[1,2,14],assist:9,associ:[1,9,11],assum:14,assur:[1,2],asychron:11,asynchron:[1,8,11],asynchronous_:11,asynchronous_grab:4,asynchronous_grab_opencv:4,asynchronousgrab:[4,10,11,12],asynchronousgrabqt:4,asynchroun:2,asynchrounousgrab:[1,2,7],attach:7,attenu:14,attribut:[9,12],audienc:2,author:9,automat:[0,1,2,3,5,11,12,13,14],automoderegion1:14,av:12,avail:[0,1,2,3,4,7,9,10,11,13,14],averag:7,avoid:[1,2],avt:[10,12],awai:[2,7],awar:9,b:[1,2,9,12],back:[2,9],background:11,backup:9,backward:[1,2,10],ball:12,bandwidth:[1,13,14],base:[7,9,12],basefeatur:10,bashrc:13,basi:9,basic:[10,14],bayer:[7,14],bayerbg:7,bayergb:7,bayergr12:7,bayergr8:7,bayergr:7,bayerpattern:7,bayerrg12pack:14,bayerrg8:7,bayerrg:7,bayerxi:7,bb:7,becaus:[0,1,2,3,7,12,14],becom:[7,9,14],been:[1,2,9,10],befor:[0,1,2,7,10,11,13,14],beforehand:7,begin:[2,7,12],beginn:1,behalf:9,behavior:[1,2,7,10,12],behind:7,being:[2,7,11,12],belong:2,below:[1,2,7,9,10,11],besid:2,best:[2,5,7,13,14],better:[11,12,14],between:[2,7,10,12,13,14],beyond:9,bg:7,bgr10:7,bgr12:7,bgr16:7,bgr8:7,bgr:7,bgra10:7,bgra12:7,bgra16:7,bgra8:7,bin:[1,4,12],binari:9,bit:[1,7,11],bitperpixel:7,bitsperpixel:7,bitsus:7,black:14,block:[1,2,10,12],blue:14,board:[1,2,3,14],book:2,bool:2,boost:2,boot:[1,2],both:[2,7,9,12,14],bound:[1,13],box:14,br:7,brand:9,breach:9,bring:3,broadcast:[1,10,11,13],bu:[1,2],bubbl:2,buffer:[1,2,7,10,14],buffers:1,build:[2,7,8,10],build_v:12,built:9,busi:9,button:[3,14],c:[4,8,9,10,13],c_str:7,cabl:[1,2,11],call:[0,1,2,5,7,10,11,12,13],callabl:11,callback:[1,2,10,11,13],callbackreason:1,cam:[2,9,11],cambridg:9,camera:[0,3,5,8,9,12],camera_0_set:2,camera_id:[1,2],camerahandl:1,cameraid:1,cameraidstr:1,cameraidstringextend:[1,2],cameralistcb:1,cameralistchang:2,cameranam:1,camerapersistflag:1,cameraptr:2,cameraptrvector:2,camobserv:2,can:[0,1,2,3,4,5,7,9,10,11,12,13,14],cancel:[1,2],cannot:[1,3,5,9,10,11,12,13,14],capabl:[0,11,14],capac:[7,9],captur:[10,11],card:[13,14],care:[1,12],carri:9,cast:2,categori:2,caus:[9,11,12,14],cbb:14,cenicam:10,center:14,certain:[1,9,10,12,14],cgg:14,cgr:14,chain:[1,2],chang:[4,8,9,12,14],channel:14,chapter:[0,1,2,7,10,11,12,13,14],charact:[1,2],characterist:7,charg:[0,9],check:[1,2,3,5,11,13,14],children:12,choic:[1,2,10,11],choos:[1,3,4,7],chose:2,chunk:0,chunk_:11,chunk_callback:11,chunkaccess:[2,4,10],chunkdata:1,chunkdatapres:1,chunkframeid:11,chunkheight:1,chunkoffsetaccesserror:1,chunkoffseti:1,chunkoffsetx:1,chunksiz:1,chunksizeaccesserror:1,chunkwidth:1,circl:14,circumst:[2,9],cisg:9,cite:9,cl:[1,2,5,12],claim:9,clean:2,clear:[1,2,3],clh:12,click:[3,5,7,12,14],close:[3,9,11,14],cmake:13,coaxpress:1,code:[3,4,7,8,9,11,12],coexist:11,collect:3,collet:9,color:12,column:3,com:[0,5,9,11,13,14],combin:[7,14],come:[3,9,12],command:[0,2,8,10,12,13],commenc:9,comment:[2,10,12],commerci:9,common:[1,2,7,12],commun:[9,12],compani:9,compar:[2,9,10,12],compat:[1,3,7,8,9,10],compens:14,compil:2,complet:[1,2,7,10,11,13,14],complex:[1,11,12,14],compli:[9,10,12,14],complianc:[9,10,13],compliant:[0,1,10,13],compon:[7,9,14],comput:[7,9,14],conceal:9,concept:[2,9],concret:7,concurr:2,condit:14,config:[10,12,13],configip:4,configur:[0,1,2,3,4,10,11,13,14],configureip:14,confirm:9,conflict:[1,2,9],conjunct:9,connect:[1,2,3,5,9,11,12,13,14],consecut:[1,2],consent:9,consequ:[2,10],consequenti:9,consid:11,consider:2,consist:[9,12],consol:[3,11],constantli:13,constitut:9,constraint:7,construct:11,constructor:2,consult:9,consum:[7,9,13],contact:[5,8,13],contain:[0,1,2,4,5,7,9,10,11,12,13,14],content:[2,14],context:[1,13],continu:[1,2,10,11,14],contract:9,contractu:9,contrast:[7,10,14],contrastcontrol:14,contributor:9,control:[1,2,9,10,11,12,14],conveni:[1,2,3,10,12,13],convent:[7,9],convers:[4,7,11],convert:[4,7,12],convert_:11,convert_pixel_format:[10,11],copi:[2,7,9,10,12,13,14],copyright:8,core:[7,12],corpor:9,correct:[1,2,3,9,10,11,13],correctli:11,correspond:[1,2,3,9,10,12,14],cost:7,could:[1,2,9],count:[1,2,4,7,11,14],counter0:14,counterdur:14,countereventactiv:14,countereventsourc:14,counterreset:14,counterresetsourc:14,countertriggersourc:14,cours:9,cout:[2,12],cover:[2,7,11,12],cpp:[4,8,12],cpu:[2,14],creat:[1,2,7,9,11,12],create_:11,create_trace_log:4,critic:11,crop:14,cross:9,crr:14,csi:[3,14],cti:[12,13],ctipathsandsettingsusag:13,ctrl:3,current:[1,2,3,5,7,9,10,11,12,13,14],custom:[1,9,12],customari:9,cv2:11,cxp:12,cycl:14,d:[0,1,13],damag:[1,2,9,14],data:[1,2,4,8,9,10,12,13],date:9,daylight:14,deactiv:[0,1,4,8,10,11,13],deal:9,dealloc:2,death:9,debay:12,debayermod:7,debounc:14,debug:[2,7,12],decid:2,decim:[1,2],declar:[2,12],decompil:9,decor:11,decreas:[2,14],deep:11,deepcopi:11,def:11,defin:[1,2,7,9,14],deinstal:[10,12],delai:14,delet:[2,10,12],deliv:[1,2,7,10],demand:[7,14],demonstr:4,demosa:7,depend:[1,2,7,11,12,14],depth:7,deriv:[2,9],describ:[1,2,7,9,10,11,12],descript:[1,2,3,7,12,13,14],deselect:14,design:[1,2,11,13],desir:[1,2,7,11,14],destin:7,destinationimag:7,destroi:2,destruct:2,detail:[1,2,4,5,9,10,11,12,14],detect:[1,2,3,5,11,12],determin:[1,2,3,7,9,11],determinist:[1,2,11],dev:11,develop:9,deviat:14,devic:[0,1,2,3,4,5,9,10,11,12,13,14],devicekei:1,devicethroughputlimit:13,devicetyp:3,devicetypenam:3,dhcp:14,diagram:10,dialog:[3,14],differ:[1,2,3,5,7,10,11,12,14],differenti:10,dimens:1,dir:12,direct:[1,9],directli:[7,10,14],directori:[0,7,9,11,12,13,14],disabl:[3,11,12,14],disable_log:11,disappear:[1,2],discard:[1,2,10],disclaim:9,disconnect:[1,2,5,11,12],discov:[1,2,14],discoveri:[1,2,4,10,11,13],discoverycameraev:10,discoverycameraid:1,discoveryinterfaceev:10,disk:[1,13],displai:[2,3,4,5,7,9,10,11,12,13,14],displaynam:1,dispos:9,disput:9,distanc:14,distinguish:10,distribut:[7,9,11],divis:7,doc:9,docstr:11,document:[1,2,4,7,9,12,14],doe:[1,3,5,7,9,10,11,12,14],doesn:[5,7,13,14],domain:9,don:[0,1,7,10,11,12,13],done:[2,3,7],doubl:2,down:[1,2,3,5,14],downgrad:11,download:[5,9,11,13,14],drag:14,driver:[0,1,5,8,14],drop:[2,5],dspsubregion:14,due:1,duplic:12,durat:14,dure:[1,3,5,7,10,12,13],duti:14,dynam:2,e:[1,2,3,7,9,13,14],each:[1,2,3,5,9,11,12,14],eas:[2,7,9,10,11],easi:[10,11],easiest:12,easili:[1,3,7,11],edit:[1,12],effect:[3,14],effici:[1,2,11],eight:7,either:[1,2,3,7,9,13,14],elabor:[2,11],electr:14,electron:9,element:[2,12,14],elig:12,els:[1,2],email:9,emain:9,embed:[7,11],emphas:14,emploi:[1,2,9],empti:[2,3,14],en:[5,9,13],enabl:[2,10,11,12,13,14],enable_log:11,encapsul:7,encod:[1,2],end:[1,2,7,9,10],endcaptur:[2,10],endian:7,endl:[2,12],endors:9,engin:[1,2],england:9,enhanc:14,enlarg:7,enough:[7,14],ensur:[1,2,9,11,13],enter:[9,11,14],entir:9,entiti:[9,12],entitl:9,entri:[1,3,7,10,14],entryvector:2,enumentri:2,enumer:[2,10,12],environ:[9,12,13],equal:[1,2,7],err:[1,2,12],error:[3,7,8,9,10,11,12],errorcod:7,especi:[10,11],essenti:[1,2],etc:[1,2,13],ether:12,ethernet:12,evalu:1,even:[1,2,3,7,9,10,12,14],event:[0,9,12],eventacquisitionstart:[1,2],eventcameradiscoveri:[1,10],eventcb:1,eventinterfacediscoveri:10,eventnotif:[1,2],eventobserv:2,eventselector:[1,2],everi:[1,2,4,7,12,13,14],evok:14,ex:[0,3,5],exact:[2,3,12],exactli:[1,3,12],examin:[3,9],exampl:[1,2,3,8,11,12,13,14],examplesoverview:11,except:[1,9,11,12],exchang:2,exclud:[1,12],exclus:9,execut:[1,2,3,4,7,9,10,11,12,14],exemplari:9,exist:[2,3,12],exit:[11,12],expand:13,expect:[2,11],expenditur:9,experi:[1,10],expert:[1,7],explain:12,explan:2,explicit:2,explicitli:7,explor:11,expos:14,exposur:[1,2,4,11],exposure_tim:11,exposureautomax:14,exposuretim:11,express:9,expressli:9,extend:[0,10],extended_id:[1,2],extens:11,extent:9,extern:14,extra:[9,11,12],f:[5,11],facilit:9,fail:[4,12],fall:14,fallingedg:14,fals:[12,14],fast:[1,7,12],fault:[1,7,9,13],feat:11,featur:[7,8,9],featureaccesshandl:1,featurechang:2,featurecontain:11,featurecontainerptr:2,featuredatatyp:1,featureptr:2,featureptrvector:2,feder:9,fee:9,fetch:[1,2],few:[7,12],field:[1,7,14],file:[1,2,3,4,5,9,10,12,13],filenam:3,filesystem:2,fill:[1,2,12],filter:[1,3,7,12,13],find:[1,3,7,11,12],finish:[1,2,5,7,12],fire:1,firewir:0,firmwar:[8,11,13,14],first:[1,2,7,10,11,14],fit:[2,7,9],fiter:13,five:9,flag:[1,2],flush:[2,11],flushqueu:[2,10],fmt:11,folder:[9,12],follow:[0,1,2,3,5,7,9,10,11,12,13,14],forc:[3,5,10,14],forceip:[4,13,14],form:9,format:[1,2,4,8,12,14],forth:9,found:[1,2,3,4,10],fp:14,frame:[0,1,2,4,7,10,12],frame_callback:11,frame_count:1,frame_handl:11,frameconsum:11,framedonecallback:1,frameid:1,frameobserv:[2,10],frameproduc:11,frameptr:2,frameptrvector:2,framereceiv:[2,10],framestart:[1,2,11,14],framework:11,free:[0,1,7],freedom:9,freemail:9,freerun:14,freestand:9,frequent:[2,11],from:[0,1,2,3,4,5,7,8,9,11,12,13,14],front:3,full:[5,11,14],fulli:[0,7],fund:9,furnish:9,further:[1,2,9],furthermor:12,futur:10,fwupdaterconsol:5,g:[1,2,3,7,9,13,14],game:9,gamma:14,gb:7,gcc:7,geldreich:9,gencp:[1,2],gener:[1,8,12,14],genicam:[0,1,7,10,12,13,14],genicam_gentl64_path:[12,13],gentl:[1,2,4,8,13],german:9,germani:9,get:[1,2,5,7,12,13],get_:11,get_all_camera:11,get_all_featur:11,get_all_interfac:11,get_all_transport_lay:10,get_ancillary_data:10,get_ancillary_s:10,get_camera:10,get_cameras_by_interfac:10,get_cameras_by_tl:10,get_extended_id:10,get_features_affected_bi:10,get_fram:11,get_frame_gener:[10,11],get_frame_with_context:10,get_id:10,get_image_s:10,get_incr:11,get_inst:11,get_interfac:10,get_interface_by_id:10,get_interfaces_by_tl:10,get_local_devic:10,get_model_nam:10,get_nam:10,get_path:10,get_pixel_format:11,get_stream:10,get_transport_lay:10,get_transport_layer_by_id:10,get_typ:10,get_vendor:10,get_vers:10,getaffectedfeatur:[2,10],getancillarydata:10,getancillarys:10,getcamera:[2,10],getcamerabyid:2,getcamerasbyinterfac:10,getcamerasbytl:10,getcategori:2,getchar:12,getdatatyp:2,getdescript:2,getdisplaynam:2,getentri:2,getextendedid:[2,10],getfeatur:2,getfeaturebynam:2,getflag:2,getid:[2,10],getimages:10,getincr:2,getinst:[2,12],getinterfac:[2,10],getinterfacebyid:10,getinterfaceid:2,getinterfacesbytl:10,getinterfacetyp:2,getlocaldevic:[2,10],getmodel:2,getmodelnam:10,getnam:[2,10],getpath:10,getpayloadtyp:10,getpermittedaccess:[2,10],getpollingtim:2,getrang:2,getreceivestatu:2,getrepresent:2,getselectedfeatur:2,getserialnumb:2,getsfncnamespac:2,getstream:[2,10],getstreambufferalign:10,gettooltip:2,gettransportlay:[2,10],gettransportlayerbyid:10,gettyp:[2,10],getunit:2,getvalidvalueset:10,getvalu:2,getvendor:10,getvers:10,getvis:2,gev:[12,13],gevdiscoveryallauto:1,gevdiscoveryallonc:1,gevheartbeattimeout:12,gg:7,gigabit:14,gige:[3,4,7,10,11,12,14],gigetldirectorypath:12,github:[0,3,11,13,14],give:2,given:[1,2,3,7,10,12,13],glibc6:13,global:[1,11],gmbh:9,go:[3,5,9,12,13,14],goe:2,goldey:[1,2,5],gomp:7,gomp_spincount:7,gone:2,good:9,govern:9,gr:7,grab:11,grab_:11,grabber:[0,1,2,10,12,14],grai:14,grammar:[1,2],grant:9,graphic:[3,9,10],greater:[7,14],green:[7,14],gross:9,group:[1,14],groupkei:1,groupmask:1,guarante:9,gui:[1,2,3,14],guid:13,guru:1,gvcptimeout:12,gvmbhandl:1,gvsp:13,gvspadjustpackets:13,h:[2,12],ha:[1,2,5,7,10,11,12,13,14],had:9,hand:12,handl:[1,2,10,11,12,13],handler:[10,11,12],hardwar:[1,2,3,9,11,14],has_affected_featur:10,have:[0,1,2,7,9,10,11,12,13,14],hazel:9,hcamera:1,header:[2,10],health:9,heavi:2,heavili:11,height:[1,2,7],held:1,hello:12,help:[2,3,5,9],herczeg:9,here:[2,12],herebi:9,hereinaft:9,hidden:[1,3,10],high:[7,11,12,14],higher:[2,7,10,11,12,13,14],highli:[2,11,12],hint:2,hold:[1,2,3,7],holder:9,home:12,horizont:[1,7],host:[1,2,3,11,12,14],how:[1,2,4,7,10,11,12,14],howev:[1,2,9,12],hs:1,hstream:1,html:[5,9],http:[0,5,9,11,13,14],hu:9,hub:[1,2,5],hyper:7,hzmester:9,i:[1,9,14],icameralistobserv:2,icameralistobserverptr:2,icon:[3,9,12,14],id:[5,11,14],ideal:[7,11],ident:[1,9],identif:9,identifi:[1,3],ieee:0,ifeatureobserv:2,ifeatureobserverptr:2,iframeobserv:2,iframeobserverptr:2,ignor:[1,2,7,12],ii:9,iidc:[1,12],iinterfacelistobserv:2,illeg:[1,13],illumin:14,imag:[4,8],imageformat:7,imageinfo:7,imageprocessingcontrol:14,images:10,immedi:[2,12,14],impact:1,implement:[0,1,2,7,10,11,13],impli:9,implicitli:10,improv:9,imwrit:11,inabl:9,inapplic:7,inc:[9,11],incid:9,incident:9,includ:[1,2,7,9,10,11,12,13,14],incom:[1,2,11],increas:[11,14],increment:[1,2,13],indefinit:9,independ:[1,2,11],index:5,indic:[1,5,9,14],indirect:9,individu:[3,9,13],industri:[9,12],info:[1,2,3,5,7,9,11,12,13],inform:[1,2,3,4,5,10,11,12,13,14],infotyp:7,infring:9,initi:[1,2,3,7,10,11,12],injunct:9,injuri:9,inner:14,input:[1,2,5,7,14],inquir:7,insensit:7,insert:12,insid:[1,2,7,14],instal:[5,7,8,9,10,12,14],instanc:[1,2,11,13],instantli:3,instead:[1,2,3,10,11,12,13],instruct:[0,4,9,11,13,14],instrument:9,int64vector:10,integ:[1,2,10,12],integr:9,intens:14,intent:9,inter:11,interact:[3,12],interest:14,interfac:[0,3,8,9,10,12,14],interface_id:[1,2],interfacehandl:1,interfaceidstr:1,interfacenam:1,interfaceptrvector:2,interfacetyp:1,intermedi:7,intern:[7,9],interpol:[7,14],interpret:[5,7,11,12],interrupt:[7,9],interv:[7,14],intro:11,introduc:[1,2],introduct:8,intvalu:1,intvector:2,invalid:[1,2,7,11,13,14],invis:11,invok:7,io:9,iostream:12,ip:[2,3,10,13,14],iscommanddon:2,isn:7,isread:2,issu:[0,1,2,8,10,11],ist:1,isvalueavail:2,iswrit:2,item:[2,3,7],iter:[1,2],its:[1,2,3,5,7,9,11,12,14],itself:[2,7,9],josef:9,jpg:11,juggl:12,just:[1,2,4,12],keep:[2,7,11,14],kei:[1,3,14],keyboard:3,khz:14,kind:9,kit:9,know:7,knowledg:[2,9,11],known:[1,2,7],l:[3,12],languag:[9,12],larg:14,larger:[7,14],largest:13,last:[2,9],latch:14,latenc:14,later:9,latest:[5,11,13],layer:[0,2,4,5,10,11,12],layout:7,ld:1,lead:7,learn:[1,10,11,14],least:[1,2,3,7,12],leffler:9,left:14,legaci:0,legal:8,legend:9,length:7,less:[1,2,11],let:7,letter:14,level:[1,2,4],levelhigh:14,liabl:9,librari:[1,8,10,11,12,13],licens:[0,8],lifetim:[2,11],light:14,lightdm:13,like:[1,2,7,11,12,14],limit:[7,9,11,14],line0:[1,2],line1:[1,2],line:[0,1,2,7,8,11,13],linedebouncedur:14,linemod:[1,2],lineselector:[1,2],linux:[7,8],list:[0,3,5,7,9,10,12,14],list_:11,list_camera:4,list_featur:4,listcamera:[1,4,11],listfeatur:[1,4,10,12],littl:7,lla:14,llc:9,lld:1,llu:1,load:[0,12,13],load_:11,load_save_set:4,loadcameraset:1,loadsaveset:1,loan:9,local:[1,2,7,9,10,12],localdevic:10,localdevicehandl:1,locat:[3,7,10,12],lock:3,log:[1,2,3,8,14],log_config_info_console_onli:11,log_config_trace_console_onli:11,log_config_warning_console_onli:11,logged_funct:11,logginglevel:2,login:13,logo:9,longer:[1,10],look:[1,7,14],loop:[1,10],loss:9,lossi:7,lossless:7,low:[2,7],lower:[5,7],lowest:14,lsb:7,ltd:9,m:11,m_height:1,m_offseti:1,m_offsetx:1,m_pcamera:2,m_width:1,mac:[2,3,14],machin:[9,11,14],macro:[7,10],made:[9,10,12],magenta:14,mai:[1,2,3,4,5,7,9,11,12,13,14],main:[2,5,7,8,11,12,14],mainli:[7,10],maintain:11,major:12,make:[1,2,4,5,9,11,12,13,14],makefil:12,malic:9,malici:9,malloc:1,manag:[3,7,13],mandatori:[3,12],mani:[1,4,7,10,12],manner:9,manual:[0,4,10,13,14],manufactur:[0,10],map:[7,14],mark:12,mask:[1,14],mat:7,match:[5,7,9,12,13],materi:9,matrix:7,max:[2,14],maximum:[2,3,13,14],maxinfolength:7,maxiter:[1,2],mean:[1,9,12,14],mechan:1,member:[1,2,7,10,11],memori:[1,2,7,12,13],mention:[2,11],menu:[3,14],merchant:9,merg:[0,9,10],messag:[2,11],met:9,metadata:[1,2,7,11],method:[2,3,7,10,11,12],mht:9,might:[2,3,12,13],migrat:[8,13],min:2,minim:7,minimalist:2,minimum:[1,2,13,14],minor:12,minut:1,mipi:[0,5],miss:[1,12],mix:1,mode:[2,3,5,7,10,11,13,14],model:[1,2,5,11,14],modelnam:1,modif:9,modifi:[3,9,10,11,14],modifywrit:2,modul:[1,2,4,8,14],monitor:9,mono10:[7,14],mono10p:7,mono12:7,mono12p:7,mono12pack:7,mono14:[7,14],mono16:7,mono8:[1,2,11],mono:[7,14],monochrom:7,more:[0,1,2,3,4,5,7,10,11,12,13,14],moreov:[1,2,14],most:[1,2,11,12,13,14],motiv:7,mous:14,move:14,ms:[7,14],msg:11,much:7,multi:[3,7],multicast:[1,2],multifram:[1,2,14],multipl:[1,2,4,7,10,11,12,13],multiplepath:12,multithread:[2,10,12],multithreading_opencv:[4,11],multitud:2,must:[0,1,2,3,7,9,10,11,12,13,14],mychunkdataaccesscallback:1,myclass:2,myderivedclass:2,myframecallback:1,myframeobserv:2,mysharedpoint:2,mysharedpointer2:2,n:[1,2,14],name:[1,2,3,7,9,10,11,12],namespac:[1,2,10],nation:9,natur:14,ncount:1,necessari:[1,2,3,7,10,12],need:[0,1,2,7,10,11,12,13,14],neglig:9,neighbor:14,neither:9,net:12,network:[1,3,13],next:[2,5,7,12,14],ni:9,nic:[1,2,3,12,13],nois:14,non:[1,2,9,12,13],none:3,noninfring:9,nor:9,note:[0,1,2,4,9,11,12,13,14],notic:9,notif:[8,11],notifi:[1,2,9],now:[1,2,10,11,12,13,14],npl:[1,2],ns:14,number:[1,2,3,5,7,9,14],numpi:11,nwidth:1,o:[1,14],object:[2,9,10,11],oblig:9,oblige:9,obligor:9,observ:2,obtain:[1,2,7,9],occur:[2,9,11,12],occurr:14,off:2,offer:[0,7,9,11,13,14],offic:9,offici:10,offset:[1,7],offseti:1,offsetx:1,often:14,ok:14,older:5,omit:9,omp_num_thread:7,omp_wait_polici:7,onc:[2,10,13,14],one:[1,2,3,4,5,7,9,10,11,12,13],onli:[0,1,2,3,5,7,9,10,11,12,13,14],onnect:0,open:[4,5,8,11,12,13,14],opencamerabyid:2,opencv:11,openinterfacebyid:10,oper:[0,1,2,3,9,11,12,13,14],opposit:14,optim:[9,11,14],option:[0,1,2,5,8,9,10,11,12],orang:14,order:[1,2,4,7,9,11],org:[9,11],organ:9,orient:[2,11],origin:[1,2,3],other:[0,1,2,3,4,5,7,9,10,12,14],otherwis:[3,4,9],our:[1,2,5,9,11,14],out:[1,2,3,7,9,12,13,14],outer:14,output:[3,7,14],outputpixellayout:7,outsid:10,over:[7,10,12],overlap:14,overload:10,overview:[8,10,12],overwrit:[1,2,11],overwritten:[2,10],own:[1,2,9,12],owner:9,p:1,packag:11,packet:[11,13],pair:[1,2],panel:3,paper:9,par:9,parallel:[7,10],paramat:10,paramet:[1,2,3,5,7,10,11,12,13,14],parametercount:7,part:[1,9,10,12],parti:[0,9,10,12],partial:[12,14],particular:[7,9,12],partnership:9,pass:[1,2,11,12],passiv:7,path:[1,2,10,12],path_to_vimbaxfold:13,pathconfigur:[2,10],pattern:[2,9,11],payload:[1,2,7,10],payloads:[1,2,12],pc:[1,2,3,5,7,11,12,14],pcam:2,pcamera:[1,2],pcamerahandl:1,pci:[1,12],pcie:1,pdestin:7,pdf:9,pend:[1,2,10],per:[1,2,7,14],perform:[1,2,3,5,11,12,13,14],period:9,perl:9,perman:10,permiss:[3,9],permit:[1,2,9],permittedaccess:1,persist:14,persistentip:10,persisttyp:[1,2],person:9,pfeatur:[1,2],pframe:[1,2],ph10:9,philip:9,physic:[2,3,9,11,12],pimag:7,pinbuff:7,pinfo:7,pinputmag:7,pinterfac:[1,2],pinterfacetyp:1,pixel:[1,2,4,12,14],pixel_:11,pixelformat:[1,2,7,11],pixelformatbayerrg8:7,pixelinfo:7,pixellayout:7,place:10,placehold:[1,2],plai:[1,2,13,14],platform:[4,7,9,12],pleas:[0,1,5,9,10,11,12,13],plu:7,plug:[1,2,13,14],pmatrix:7,png:7,pobserv:2,point:[1,10],pointer:[1,7,10,11,13],poll:2,popup:3,port:1,portion:9,possess:9,possibl:[0,1,2,5,7,9,10,11,12,13,14],potenti:[1,2],poutbuff:7,poutputimag:7,power:[1,2,5,7],pparamet:7,practic:[2,10],pre:[7,11],preambl:9,preced:12,precis:[1,14],predefin:[2,7],prefer:[2,5,11],prepar:[1,2,7,10,11,12],prerequisit:9,present:[12,14],preserv:10,press:[3,14],previou:[7,11],previous:1,primari:14,principl:[9,12],print:[1,11],print_device_id:11,printf:1,prior:9,prioriti:[10,14],privileg:11,problem:14,proce:[1,2],procedur:12,process:[1,2,7,11,12],processor:7,procur:9,product:[3,9],productnameandvers:3,profil:13,profit:9,program:[1,2,9,11,12],programm:2,project:2,prolong:4,promot:9,prompt:11,prop:12,proper:[12,13],properti:[1,9,12],proprietari:9,prototyp:11,provid:[1,2,3,4,5,7,9,10,11,12,13,14],psourc:7,ptp:14,ptransforminfo:7,publish:9,puls:14,pure:7,purpos:[1,2,7,9,14],pursuant:9,put:2,pvalu:7,py:[4,11],pyenv:11,python3:11,python:[4,8,10],qt:[2,13],qualifi:7,qualiti:14,queri:[1,2],queryvers:[2,12],question:11,queu:[1,2,3,10],queue:[1,2,12,14],queue_fram:11,queuefram:2,quick:[1,2,11,12],quickli:[1,10,14],qwtlicens:9,r:[1,2,5],rad:9,rang:[1,2],rate:[7,12,14],rathmann:9,raw:[1,2,7,11,12],rawptr:2,rb:7,re:[1,2],reach:[3,12,14],reachabl:1,react:[1,2,12,14],read:[9,11,12,13,14],read_regist:10,readabl:7,readi:[1,2,7,12],readregist:10,real:7,realpath:12,realpython:11,rearrang:9,reason:[1,2,7,14],reboot:[3,5,13,14],rebuild:2,receiv:[1,2,7,9,11,12,14],receiveflag:1,receivestatu:1,recept:12,recogn:[1,2],recommend:[1,2,7,11,12,13,14],recompil:2,reconnect:5,rectangular:7,red:14,redistribut:9,reduc:[1,7,13,14],redund:10,refer:[2,8,9,14],referenc:1,regard:9,regardless:14,region:14,regist:[1,2,9,11,12,13],register_camera_change_handl:11,register_interface_change_handl:11,registercameralistobserv:2,registerinterfacelistobserv:2,registerobserv:2,registerxxxobserv:2,registr:1,regular:[2,9],reimburs:9,rel:12,relat:[9,10,12,14],releas:[0,2,7,9,10,11,12,13],reli:2,reliabl:9,relief:9,reload:14,remain:[1,2,7,9,14],remot:[1,2,4,10,12],remov:[3,9],render:9,rent:9,reopen:14,repair:[5,13],report:[1,2,10,11],repres:[2,9,11,12,14],represent:[1,9],reproduc:9,reproduct:14,republ:9,requeu:[2,12],requir:[1,2,3,7,9,10,11,12,13,14],reserv:9,reset:2,resid:[1,2],resolut:[7,14],resolv:12,resourc:[1,7,13],respect:9,respons:[2,14],restor:1,restrict:9,result:[1,2,3,9,12,14],retain:9,retriev:[1,2,10],reus:[7,10],reusabl:2,revis:9,revok:[1,2,10],revokeallfram:2,revokefram:[2,10],rg:7,rgb10:7,rgb12:7,rgb16:7,rgb:7,rgba10:7,rgba12:7,rgba16:7,rgba8:7,rich:9,right:[3,11,14],ring:14,rise:14,risingedg:14,risk:9,rma:13,roi:1,roughli:7,round:14,router:14,routin:1,row:[3,7,14],rr:7,rule:9,run:[1,2,3,4,9,10,11,13,14],runcommand:2,runtim:[1,2,7,11,13],s:[0,1,2,5,7,10,11,12,14],said:12,sale:9,sam:9,same:[1,2,3,7,9,10,11,14],sampl:7,save:[0,12],save_:11,saveset:2,scale:[2,7,14],scene:14,schedul:[7,14],scheme:7,scope:[2,11],scopedlogen:11,screen:3,screenshot:14,script:13,sdk:[0,1,2,3,4,7,8,9,10,11,13],search:14,second:[1,2,3,7,11,14],section:[2,4,7,9,10,11,14],see:[0,1,2,3,4,5,7,9,10,11,12,13,14],seen:14,select:[1,2,3,5,13,14],selector:[1,2,13],self:[9,12],sell:9,semant:[9,11],send:[1,2,11,14],sender:1,sensit:14,sensor:[7,14],sent:[1,14],sentenc:9,separ:[0,1,2,9,10],septemb:9,serial:[2,3,9],serv:[1,2,7,9],servic:9,session:[10,13],set:[0,3,5,8,9,13],set_network_discoveri:10,set_path_configur:10,set_pixel_format:11,settingsstruct:2,setup:[1,2,14],setvalu:2,sever:[1,2,5,7,10,11,12,14],sfnc:[2,7],sfncnamespac:1,sh:13,shall:9,share:[7,10,11,12,13],sharedpoint:2,sheet:12,shell:13,shift:[3,14],shock:14,shorten:9,should:[1,2],show:[1,2,3,4,5,11,14],shown:[1,2,3,10,14],shut:[1,2],shutdown:[10,11],side:3,signal:[1,2,11,14],signfic:10,signific:7,silent:[0,3],silicon:9,similar:[2,10,11,14],simpl:[2,4,7,12],simpli:1,simplifi:[2,12],simultan:[1,11,14],sinc:[2,7,14],singl:[2,3,7,11,14],singlefram:[1,2],singleton:[2,10,11,12],site:11,situat:7,size:[1,2,10,11,13,14],sizeof:[1,7],sleep:[2,11],slider:14,slow:7,small:[3,7,14],smooth:[1,14],snippet:[1,2,4,11],so:[1,2,3,9,10,12,13,14],softwar:[1,2,12,13],solut:[10,12],som:13,some:[1,2,3,5,7,9,10,12,14],soon:[1,11,12,14],sophist:[2,11],sourc:[1,2,3,4,7,8,11,12,14],sourceforg:9,sourceimag:7,sourcetyp:2,sp1:2,sp2:2,sp:2,sp_access:2,sp_dyn_cast:2,sp_isequ:2,sp_isnul:2,sp_reset:2,sp_set:2,space:[1,13],span:7,special:[7,9,12],specif:[1,2,7,9,12],specifi:[1,3,9,12],spectral:14,spectrum:14,speed:[1,2,7,12],spin:7,sporad:7,stabil:14,stadtroda:9,stai:2,stall:14,standard:[1,2,10,11,12,14],start:[0,1,2,3,5,7,10,11,12],start_stream:11,startcaptur:[2,10],startcontinuousacquisit:2,startcontinuousimageacquisit:2,startup:[3,4,11],state:[4,11],statement:11,static_cast:7,statist:10,statu:[1,14],statut:9,statutori:9,std:[2,7,12],step:[1,2,5,12],still:[2,10,12],stipul:9,stl:[2,11],stop:[1,2,7,10,11],stop_stream:11,stopcontinuousacquisit:2,stopcontinuousimageacquisit:2,storag:9,store:[1,2,3,9,11,14],str:11,stream:[1,2,10,11,12,13],streamabl:1,streambufferalign:[1,2],streamcount:1,streamhandl:[1,10],stretch:14,strict:9,stride:7,string:[1,2,7,11,12,13],stringlength:[7,10],stringvector:2,strname:2,struct:[2,8,10,13],structur:[1,2,7,11],studio:[2,7,10],sub:[1,7],subdirectori:7,subject:9,sublicens:9,subnet:14,subsect:9,subsequ:9,substanti:9,substitut:[2,9],subtask:7,success:[2,3,7],successfulli:[1,14],successor:0,suffici:10,suggest:2,suitabl:[1,3],sum:14,suppli:[2,5,9],support:[1,2,3,4,5,8,10,11,12,14],sure:[1,2,4,5,11,13,14],sustain:14,sv:12,sw:14,sy:[2,12],synchron:[1,2,8,11],synchronous_grab:4,synchronousgrab:[1,4],syntax:[3,9],system:[0,1,2,3,4,5,7,9,11,12],t:[0,1,5,7,10,11,12,13,14],tab:[3,10,13],tabl:[1,2,3,7,10,14],take:[1,2,3,4,5,7,11,12,14],taken:12,tar:13,target:7,targettyp:2,taschenweg:9,task:3,team:[5,11],tear:[1,2],technic:[2,8,9,11,14],technolog:[7,9],tell:2,templat:[2,7,10,11],tenaci:9,term:8,termin:[3,7],test:[0,9,12],testdata:9,than:[1,7,9,11,12,13,14],thei:[1,2,3,4,7,9,10,12,14],them:[2,7,10,11,12,14],theori:9,therefor:[1,2,10,11,12,14],thereof:9,thi:[0,1,2,3,4,5,7,9,10,12,13,14],third:[0,9,10,12],those:[7,9],though:2,thread:[1,2,7,11,12],three:[1,2,3,7,11],through:[2,3,9,10,12,14],throughout:[2,10,11],thu:14,tif:14,tiff:14,time:[1,2,4,5,7,11,12,13,14],timeout:[1,13],timer0act:14,timer:14,timerdelai:14,timerdur:14,timerreset:14,timestamp:[1,14],tint:14,tip:3,tl:[0,2,4,8,10,11,13,14],tl_identifi:[1,2],tlsystem:12,toe:11,togeth:[9,14],toggl:2,too:[3,7],tool:[3,5,9],tooltip:[1,14],tort:9,toward:14,trace:[2,3],trace_:11,traced_funct:11,traceen:11,track:[1,2],trade:9,trademark:8,train:9,transact:9,transfer:[1,2,9,14],transform:[4,8,10,11,12],transformtyp:7,translat:9,transport:[0,2,4,5,10,11,12],transportlay:10,transportlayerhandl:1,transportlayeridstr:1,transportlayernam:1,transportlayerpath:1,transportlayertyp:1,treat:9,tri:[1,7],triggermod:[1,2,11],triggerselector:[1,2,11],triggersoftwar:11,triggersourc:[1,2,11],troubleshoot:[0,1,2,8,10],tupl:11,turn:2,two:[1,2,5,7,9,14],txt:9,type:[7,10,12,13,14],typedef:[1,2],typic:[1,2,8],u3v:12,uchar:2,ucharvector:2,uint32:[1,2],uk:9,uml:2,un:9,unaffect:9,unchang:10,under:[2,3,9,13],underli:[1,2,9,11],understand:[1,2,14],underutil:7,undo:3,unexpect:[1,13],unexpectedli:12,uniformli:1,uninstal:[0,3],uninterrupt:9,uniqu:[1,2,12],unit:2,univers:9,unix:[7,12],unknown:[3,12],unless:[4,9],unload:2,unnecessari:[2,7],unplug:[5,14],unreach:1,unregist:2,unregistercameralistobserv:2,unregisterobserv:2,unsuit:14,until:[1,2,10,14],unus:[1,2],up:[1,2,3,8,9,13],updat:[2,8,11,12,13,14],updatetriggeropenstatechang:2,updatetriggerpluggedin:2,updatetriggerpluggedout:2,updatetriggertyp:2,upgrad:[3,11],upgradecod:3,upload:9,upon:3,urhg:9,us:[0,3,4,5,7,11,13],usag:[0,3,8,9,10,13],usb3:[1,3,7],usb:[0,3,5,7,11,14],usbtlfilepath:12,user:[0,1,2,3,9,10,12,13,14],user_:11,user_set:4,user_shared_point:2,usercontext:1,usersharedpointerdefin:2,usual:[1,2,11,12,13],util:7,uvc:12,uw:9,v2:7,v3:12,v4:7,v:5,val:2,valid:[1,2,3,10,11,12,13,14],validvalu:10,valu:[1,2,4,7,10,11,12,13,14],valv:9,vari:14,variabl:[2,10,12,13],variant:8,variou:2,vector:2,vendor:[0,10,12],vendornam:12,verbos:5,veri:[2,10,11],verif:7,verifi:[1,11],version:[3,5,7,9,10,11,12,13],vertic:[1,7],via:[1,2,4,5,9,10,11,13],video:1,view:[2,12,14],viewer:[5,8,11,13],vimba:[1,2,3,4,5,7,11,12],vimbac:10,vimbacpp:10,vimbadriverinstal:3,vimbagigetl:13,vimbapython:10,vimbasystem:10,vimbausbtl:12,vimbax:12,vimbax_2022:12,vimbax_instal:0,vimbax_uninstal:0,vimbax_x:4,visibl:[1,11],vision:[0,1,2,3,4,5,7,9,11,12,14],visit:9,visual:[2,7,10],vmb:[1,2,11,13],vmb_call:1,vmbaccessmode_t:1,vmbaccessmodeful:[1,2],vmbaccessmodenon:1,vmbaccessmoderead:[1,2],vmbaccessmodetyp:[1,2],vmbalignment_t:7,vmbancillarydataclos:10,vmbancillarydataopen:10,vmbansichar_t:7,vmbapi:10,vmbapiinfo_t:7,vmbapiinfoal:7,vmbapiinfobuild:7,vmbapiinfoplatform:7,vmbapiinfotechnolog:7,vmbbayerpattern_t:7,vmbc:[1,8,10,11],vmbc_examples_build:12,vmbcameraclos:[1,10],vmbcamerainfo_t:[2,10],vmbcamerainfoqueri:1,vmbcamerainfoquerybyhandl:10,vmbcameraopen:[1,10],vmbcamerapersistflagsal:1,vmbcamerapersistflagsinterfac:1,vmbcamerapersistflagslocaldevic:1,vmbcamerapersistflagsnon:1,vmbcamerapersistflagsremotedevic:1,vmbcamerapersistflagsstream:1,vmbcamerapersistflagstransportlay:1,vmbcameraslist:1,vmbcaptureend:[1,10],vmbcaptureframequeu:1,vmbcaptureframewait:[1,10],vmbcapturequeueflush:[1,10],vmbcapturestart:[1,10],vmbchunkaccesscallback:[1,10],vmbchunkdataaccess:[1,10],vmbchunkdatapars:10,vmbcpp:[2,8,10,11,12],vmbcpp_examples_build:12,vmbdebayermod:7,vmbdebayermode2x2:7,vmbdebayermode3x3:7,vmbdebayermode_t:7,vmbdebayermodelcaa:7,vmbdebayermodelcaav:7,vmbdebayermodeyuv422:7,vmbendianness_t:7,vmberror_t:[1,2,7,12],vmberrorapinotstart:[1,13],vmberrorbadhandl:[1,13],vmberrorbadparamet:[1,7,13],vmberrorcustom:1,vmberrordevicenotopen:[1,13],vmberrorincomplet:[1,13],vmberrorinternalfault:[1,13],vmberrorinvalidaccess:[1,13],vmberrorinvalidcal:[1,13],vmberrorinvalidvalu:[1,13],vmberrorio:[1,13],vmberrormoredata:[1,7,13],vmberrornotfound:[1,13],vmberrornotimpl:[1,7,13],vmberrornotl:[1,13],vmberrornotsupport:[1,13],vmberroroth:[1,13],vmberrorresourc:[1,7,13],vmberrorstructs:[1,7,13],vmberrorsuccess:[1,2,12,13],vmberrortimeout:[1,13],vmberrortlnotfound:12,vmberrortyp:2,vmberrorvalidvaluesetnotpres:10,vmberrorwrongtyp:[1,10,13],vmbfeatur:1,vmbfeatureaccessqueri:1,vmbfeatureboolget:1,vmbfeatureboolset:1,vmbfeaturecommandisdon:1,vmbfeaturecommandrun:1,vmbfeaturedatabool:1,vmbfeaturedatacommand:1,vmbfeaturedataenum:1,vmbfeaturedatafloat:1,vmbfeaturedataint:1,vmbfeaturedatanon:1,vmbfeaturedataraw:1,vmbfeaturedatastr:1,vmbfeaturedatatyp:2,vmbfeatureenumasint:1,vmbfeatureenumasstr:1,vmbfeatureenumentryget:1,vmbfeatureenumget:1,vmbfeatureenumisavail:1,vmbfeatureenumrangequeri:1,vmbfeatureenumset:1,vmbfeatureflagsmodifywrit:1,vmbfeatureflagsread:1,vmbfeatureflagstyp:2,vmbfeatureflagsvolatil:1,vmbfeatureflagswrit:1,vmbfeaturefloatget:1,vmbfeaturefloatset:1,vmbfeatureintegerset:1,vmbfeatureintget:1,vmbfeatureintincrementqueri:1,vmbfeatureintrangequeri:1,vmbfeatureintset:1,vmbfeatureintvalidvaluesetqueri:[1,10],vmbfeatureinvalidationregist:1,vmbfeaturelistaffect:10,vmbfeaturepersist_t:1,vmbfeaturepersistal:1,vmbfeaturepersistnolut:[1,2],vmbfeaturepersistsettings_t:2,vmbfeaturepersiststream:1,vmbfeaturerawget:1,vmbfeaturerawlengthqueri:1,vmbfeaturerawset:1,vmbfeatureslist:1,vmbfeaturestringget:1,vmbfeaturestringmaxlengthqueri:1,vmbfeaturestringset:1,vmbfeaturevisibilitybeginn:1,vmbfeaturevisibilityexpert:1,vmbfeaturevisibilityguru:1,vmbfeaturevisibilityinvis:1,vmbfeaturevisibilitytyp:2,vmbfeaturevisibilityunknown:1,vmbfilepathchar_t:[10,12],vmbfloat_t:7,vmbframe_t:10,vmbframeannounc:[1,10],vmbframecallback:1,vmbframeflagsdimens:1,vmbframeflagsframeid:1,vmbframeflagsnon:1,vmbframeflagsoffset:1,vmbframeflagstimestamp:1,vmbframerevok:[1,10],vmbframerevokeal:1,vmbframestatuscomplet:[1,2],vmbframestatusincomplet:1,vmbframestatusinvalid:1,vmbgentlsystemslist:10,vmbgetimagetransformvers:10,vmbgetvers:10,vmbhandle_t:[1,10],vmbint32_t:7,vmbint64_t:[1,2],vmbinterface_t:1,vmbinterfaceclos:10,vmbinterfacecsi2:[1,2],vmbinterfaceethernet:[1,2],vmbinterfaceinfo_t:10,vmbinterfaceopen:10,vmbinterfaceslist:[1,10],vmbinterfacetyp:2,vmbinterfaceusb:[1,2],vmbinvalidationcallback:1,vmbpayloadsizeget:[1,2,10,12,13],vmbpixelformat:7,vmbpixelformat_t:[1,7],vmbpixelformatbayergr8:7,vmbpixelformatbayerrg8:7,vmbpixelformatrgb8:7,vmbpixellayout_t:7,vmbpixellayoutmono:7,vmbpixellayoutrgb:7,vmbpy:[8,10],vmbregistersread:10,vmbregisterswrit:10,vmbsetimageinfo:7,vmbsetimageinfofrompixelformat:10,vmbsettingsload:1,vmbsettingssav:1,vmbshutdown:[1,10],vmbstartup:[1,10,12,13],vmbsystem:[1,2,10,11,12],vmbsysteminfo_t:1,vmbtransforminfo_t:7,vmbtransformparamet:7,vmbtransformparameterdebay:7,vmbtransformparametermatrix3x3:7,vmbtransformtype_t:7,vmbtransformtypecolorcorrect:7,vmbtransformtypedebayermod:7,vmbtransportlayerinfo_t:10,vmbtransportlayerslist:[1,10],vmbtransportlayertype_t:1,vmbtransportlayertypecl:1,vmbtransportlayertypeclh:1,vmbtransportlayertypecustom:1,vmbtransportlayertypecxp:1,vmbtransportlayertypeethernet:1,vmbtransportlayertypegev:1,vmbtransportlayertypeiidc:1,vmbtransportlayertypemix:1,vmbtransportlayertypepci:1,vmbtransportlayertypeu3v:1,vmbtransportlayertypeunknown:1,vmbtransportlayertypeuvc:1,vmbuint32_t:[2,7,10],vmbuint64_t:1,vmbversioninfo_t:12,vmbversionqueri:1,volatil:2,vs:[10,11],w:[1,2,5],wa:[1,2,7,10,13,14],wai:[0,1,2,3,7,9,10,12],wait:[1,2,10,11,13,14],want:[1,2,3,4,7,11,12,14],warn:[2,11],warrant:9,warranti:9,wast:9,wdm:13,we:[1,2,7,9,11,12,13,14],websit:[5,9],weight:7,well:[2,11,12,14],were:[1,2,9,10],what:[2,7],whatsoev:9,when:[1,2,3,7,9,10,11,12,14],whenev:[1,2],where:[7,12],wherea:[7,12,14],whether:[3,9],which:[1,2,3,4,7,9,10,11,12,13,14],whl:[10,11],whole:[5,10,14],whom:9,whose:[3,9],why:[1,2],wide:9,width:[1,2,7,10,14],widthchangecb:1,widthobserv:2,wildcard:12,wilgen:9,win:11,window:[2,5,7,8,12,13,14],wish:9,within:[1,2,7,9,10,11,12,14],without:[1,2,3,4,7,9,12,14],wizard:12,work:[2,5,7,10,11,12,13,14],worker:7,workload:7,world:9,wrap:2,wrapper:11,write:[5,9,11,13,14],write_regist:10,writeregist:10,written:[1,9],wrong:[1,13],wrongdo:9,www:[5,9,11,13],x64:[7,12],x86:7,x86_64bit:13,x:[1,2,3,4,5,11,12,13],xml:[1,2,11,14],xmlfile:2,yann:9,ycbcr411_8:7,ycbcr411_8_cbyycryi:7,ycbcr422_8_cbycri:7,ycbcr422_8_ycbycr:7,ycbcr601_411_8_cbyycryi:7,ycbcr601_422_8:7,ycbcr601_422_8_cbycri:7,ycbcr601_8_cbycr:7,ycbcr709_411_8_cbyycryi:7,ycbcr709_422_8:7,ycbcr709_422_8_cbycri:7,ycbcr709_8_cbycr:7,ycbcr8:7,ycbcr8_cbycr:7,ye:3,year:9,you:[0,1,2,3,4,5,7,9,10,12,13,14],your:[0,1,2,3,4,5,7,8,9,10,11,12,13],yourprojectnam:12,yourself:9,yuv411:7,yuv411_8_uyyvyi:7,yuv422:7,yuv422_8:7,yuv422_8_uyvi:7,yuv422_8_yuyv:7,yuv444:7,yuv8_uyv:7,yuv:7,zero:[2,7],zoltan:9},titles:["About Vimba X","C API Manual","CPP API Manual","Driver Installer Manual","Examples Overview","Firmware Updater Manual","Index","Image Transform Manual","Vimba X Developer Guide","Legal Information","Migration Guide","Python API Manual","SDK Manual","Troubleshooting","Viewer Guide"],titleterms:{"1":9,"16":14,"1khz":14,"2":[9,13],"3":9,"4":9,"5":[9,13],"50":14,"6":9,"class":[2,11],"default":14,"enum":1,"function":[1,2,7,9,10,11,13,14],"new":10,"static":2,IN:9,Is:11,THE:9,abort:5,about:0,access:[1,2,4,11],acquir:[1,2,11],acquisit:[1,2,10,12,13,14],action:[1,11,14],activ:[7,12],ad:7,addit:2,address:9,advanc:7,algorithm:7,all:[1,14],an:[7,14],ancillarydata:10,apach:9,api:[1,2,7,10,11,12,14],applic:[9,12],architectur:12,art:9,aspect:[2,7,11],asynchron:[2,4,12],auto:14,autofunct:14,avoid:11,balanc:14,basic:[1,2,9],behavior:11,best:11,bin:14,bit:14,board:13,bright:14,bsd:9,buffer:12,build:12,bulk:14,c:[1,2,7,11,12],camera:[1,2,4,10,11,13,14],captur:[1,2],certain:7,chang:[1,2,3,7,10,11],choic:9,chunk:[1,2,4,10,11],claus:9,close:[1,2,10],clseral:9,cmake:12,code:[1,2,13],color:[7,14],command:[1,3,5,11,14],compat:[0,2,4,11,13],compil:[9,13],concept:14,condit:9,config:4,configur:12,contact:9,context:11,conveni:11,convert:11,convolut:14,copyright:9,correct:[7,14],counter:14,counterpart:7,cpp:2,cpu:7,creat:4,csi:[1,2,13],ctipath:12,custom:14,data:[7,11],deactiv:12,debay:7,defect:9,descript:9,detect:14,develop:8,diagram:2,directori:4,document:11,driver:[3,13],edg:14,enabl:1,entiti:11,entri:[2,11],enumer:1,environ:7,error:[1,2,13],ethernet:[1,11,14],event:[1,2,10],exampl:[4,7,10],exposur:14,extend:[1,2],extern:[1,2],featur:[0,1,2,4,10,11,12,13,14],file:[7,11,14],fill:7,find:14,firmwar:5,forc:4,format:[7,11],found:13,frame:[11,14],free:9,from:10,gain:14,gener:[2,7,10,11,13],genicam:9,gentl:[10,12],get:[8,11],gige:[1,2,13],grab:4,guid:[8,10,14],help:8,helper:7,high:10,host:4,hue:14,id:[1,2],imag:[1,2,7,10,11,12,13,14],incompat:3,index:6,info:10,inform:[7,8,9],instal:[0,3,4,11,13],intend:9,interfac:[1,2,7,11,13],interfacetyp:12,introduct:[1,2,11],io:14,ip:4,issu:13,jurisdict:9,just:9,larg:11,law:9,layer:[1,13],legal:9,less:9,level:[10,11,14],lgpl:9,liabil:9,librari:[2,7,9],libtiff:9,licenc:9,licens:9,line0:14,line1:14,line:[3,5],link:[1,2],linux:[0,4,11,13],list:[1,2,4,11,13],load:[1,2,4,7,10,11,14],log:[4,11],main:3,manag:[11,12],manual:[1,2,3,5,7,8,11,12],matrix:14,messag:3,migrat:[10,11],minimum:7,miniz:9,mipi:[1,2,13],mit:9,mode:1,modul:[10,12],mono8:7,multithread:[4,11],notif:[1,2,12],off:14,one:14,open:[1,2,9,10],opencv:4,openmp:7,optim:7,option:[3,7,14],other:13,over:[1,11,14],overview:[4,14],overwrit:12,packets:13,payloads:13,pcre2:9,perform:[7,9],pfnc:7,pip:11,pixel:[7,11],place:9,plai:11,plug:11,point:[2,11],pointer:2,prerequisit:[4,11,14],preset:14,previou:10,process:14,project:12,properti:2,provis:9,pwm:14,python:11,qt:[4,9],qualiti:9,queri:10,quick:14,qwt:9,read:[1,2,10],refer:7,regist:10,remov:10,renam:10,replac:[2,10],repres:1,reset:14,rgb8:7,right:9,roi:14,satur:14,save:[1,2,4,10,11,14],scope:9,sdk:12,seri:14,set:[1,2,4,7,10,11,12,14],share:2,shutdown:[1,2],size:7,softwar:[9,11,14],sourc:9,specifi:7,stack:9,standard:7,start:[8,14],startup:[1,2,10],state:[1,2],stop:14,struct:[1,7],studio:12,support:[0,7,9,13],synchron:[4,12],system:[10,13],tab:14,task:7,technic:13,term:9,thi:11,through:1,time:9,timer0:14,tip:10,titl:9,tl:[1,12],tlvendor:12,trace:[4,11],trademark:9,transform:[1,2,7,14],transport:[1,13],trigger:[1,2,11,14],troubleshoot:[5,11,13],turn:14,type:[1,2],typic:13,up:[7,12,14],updat:5,upload:5,us:[1,2,9,10,12,14],usabl:13,usag:[1,2,4,7,11,12],usb:[1,2,13],user:[4,11],variabl:7,variant:7,version:[1,2],viewer:14,vimba:[0,8,9,10,13,14],vision:13,visual:12,vmb:[7,10],vmbc:[4,12],vmbcamerainfo_t:1,vmbcamerapersistflags_t:1,vmbcamerapersistflagstyp:1,vmbcpp:4,vmbfeaturedata_t:1,vmbfeaturedatatyp:1,vmbfeatureenumentry_t:1,vmbfeatureflags_t:1,vmbfeatureflagstyp:1,vmbfeatureinfo_t:1,vmbfeaturepersistsettings_t:1,vmbfeaturevisibility_t:1,vmbfeaturevisibilitytyp:1,vmbframe_t:1,vmbframeflags_t:1,vmbframeflagstyp:1,vmbframestatus_t:1,vmbframestatustyp:1,vmbgetapiinfostr:7,vmbgeterrorinfo:7,vmbgetvers:7,vmbimag:7,vmbimageinfo:7,vmbimagetransform:7,vmbint32_t:1,vmbinterfaceinfo_t:1,vmbpixelinfo:7,vmbpy:[4,11],vmbsetcolorcorrectionmatrix3x3:7,vmbsetdebayermod:7,vmbsetimageinfofrominputimag:7,vmbsetimageinfofrominputparamet:7,vmbsetimageinfofrompixelformat:7,vmbsetimageinfofromstr:7,vmbtransforminfo:7,vmbtransportlayerinfo_t:1,vmbtransportlayertyp:1,vmbuint32_t:1,vs:[1,2,7],wait:7,white:14,widget:9,window:[0,3,4,11],write:[1,2,10],x:[0,8,9,10,14],xml:12,xs3p:9,xxhash:9,you:11,your:14}})
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/troubleshooting.html b/VimbaX/doc/VimbaX_Documentation/troubleshooting.html
new file mode 100644
index 0000000000000000000000000000000000000000..7bf834de842e3e945322eebae727af9f139cbdeb
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/troubleshooting.html
@@ -0,0 +1,410 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Troubleshooting &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Legal Information" href="legalInformation.html" />
+    <link rel="prev" title="Image Transform Manual" href="imagetransformManual.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="viewerGuide.html">Viewer Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Troubleshooting</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#error-codes">Error codes</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#general-issues">General issues</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#transport-layer-not-found">Transport layer not found</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#feature-not-usable">Feature not usable</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#payloadsize-issue">Payloadsize issue</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#vimba-system-functions">Vimba system functions</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#issues-by-camera-interface">Issues by camera interface</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#gige-cameras">GigE cameras</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#gige-vision-cameras">5 GigE Vision cameras</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#packetsize">PacketSize</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#other-issues">Other issues</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#usb-cameras">USB cameras</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#mipi-csi-2-cameras">MIPI CSI-2 cameras</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#compatible-boards-and-driver">Compatible boards and driver</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#camera-list">Camera list</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#image-acquisition">Image acquisition</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#typical-linux-issues">Typical Linux issues</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#installation">Installation</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#transport-layers-not-found">Transport layers not found</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#compiling">Compiling</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#technical-support">Technical support</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Troubleshooting</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="troubleshooting">
+<h1>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permalink to this headline"></a></h1>
+<section id="error-codes">
+<h2>Error codes<a class="headerlink" href="#error-codes" title="Permalink to this headline"></a></h2>
+<table class="docutils align-default" id="id1">
+<caption><span class="caption-text">Error codes</span><a class="headerlink" href="#id1" title="Permalink to this table"></a></caption>
+<colgroup>
+<col style="width: 25%" />
+<col style="width: 7%" />
+<col style="width: 68%" />
+</colgroup>
+<thead>
+<tr class="row-odd"><th class="head"><p>Error Code</p></th>
+<th class="head"><p>Value</p></th>
+<th class="head"><p>Description</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbErrorSuccess</p></td>
+<td><p>0</p></td>
+<td><p>No error</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorInternalFault</p></td>
+<td><p>-1</p></td>
+<td><p>Unexpected fault in Vmb or driver</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorApiNotStarted</p></td>
+<td><p>-2</p></td>
+<td><p>VmbStartup was not called before the current command</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorNotFound</p></td>
+<td><p>-3</p></td>
+<td><p>The designated instance (camera, feature, etc.) <br>
+cannot be found</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorBadHandle</p></td>
+<td><p>-4</p></td>
+<td><p>The given handle is not valid</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorDeviceNotOpen</p></td>
+<td><p>-5</p></td>
+<td><p>Device was not opened for usage</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorInvalidAccess</p></td>
+<td><p>-6</p></td>
+<td><p>Operation is invalid with the current access mode</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorBadParameter</p></td>
+<td><p>-7</p></td>
+<td><p>One of the parameters is invalid (usually an illegal pointer)</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorStructSize</p></td>
+<td><p>-8</p></td>
+<td><p>Given struct size is not valid for this API version</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorMoreData</p></td>
+<td><p>-9</p></td>
+<td><p>More data available in a string/list than space is provided</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorWrongType</p></td>
+<td><p>-10</p></td>
+<td><p>Wrong feature type for this access function</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorInvalidValue</p></td>
+<td><p>-11</p></td>
+<td><p>The value is not valid; either out of bounds or not an <br>
+increment of the minimum</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorTimeout</p></td>
+<td><p>-12</p></td>
+<td><p>Timeout during wait</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorOther</p></td>
+<td><p>-13</p></td>
+<td><p>Other error</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorResources</p></td>
+<td><p>-14</p></td>
+<td><p>Resources not available (e.g., memory)</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorInvalidCall</p></td>
+<td><p>-15</p></td>
+<td><p>Call is invalid in the current context (e.g. callback)</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorNoTL</p></td>
+<td><p>-16</p></td>
+<td><p>No transport layers are found</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorNotImplemented</p></td>
+<td><p>-17</p></td>
+<td><p>API feature is not implemented</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorNotSupported</p></td>
+<td><p>-18</p></td>
+<td><p>API feature is not supported</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbErrorIncomplete</p></td>
+<td><p>-19</p></td>
+<td><p>The current operation was not completed (e.g. a multiple <br>
+registers read or write)</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbErrorIO</p></td>
+<td><p>-20</p></td>
+<td><p>There was an error during read or write with devices <br>
+(camera or disk)</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="general-issues">
+<h2>General issues<a class="headerlink" href="#general-issues" title="Permalink to this headline"></a></h2>
+<section id="transport-layer-not-found">
+<h3>Transport layer not found<a class="headerlink" href="#transport-layer-not-found" title="Permalink to this headline"></a></h3>
+<p>If the transport layer cannot be found:</p>
+<ul class="simple">
+<li><p>Check if the transport layer is deactivated, see the SDK Manual,
+chapter <a class="reference internal" href="sdkManual.html#tl-activation-and-deactivation"><span class="std std-ref">TL activation and deactivation</span></a>.</p></li>
+<li><p>Check the string of <code class="docutils literal notranslate"><span class="pre">ctiPathsAndSettingsUsage()</span></code></p></li>
+<li><p>Linux: see <a class="reference internal" href="#typical-linux-issues"><span class="std std-ref">Typical Linux issues</span></a></p></li>
+</ul>
+</section>
+<section id="feature-not-usable">
+<h3>Feature not usable<a class="headerlink" href="#feature-not-usable" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Install the latest camera firmware.</p></li>
+<li><p>Vimba X only supports GenICam-compliant features, see <a class="reference internal" href="about.html"><span class="doc">About Vimba X</span></a>.</p></li>
+</ul>
+</section>
+<section id="payloadsize-issue">
+<h3>Payloadsize issue<a class="headerlink" href="#payloadsize-issue" title="Permalink to this headline"></a></h3>
+<p>Stream features may contain additional Payloadsize information. For proper handling,
+use convenience function VmbPayloadSizeGet().</p>
+</section>
+<section id="vimba-system-functions">
+<h3>Vimba system functions<a class="headerlink" href="#vimba-system-functions" title="Permalink to this headline"></a></h3>
+<p>Vimba - Vimba X migration: To ensure GenICam compliance of Vimba X,
+most system functions of the Vimba SDK (such as GEV discovery, ForceIP, and Action Commands)
+are now TL (system) functions in Vimba X.</p>
+</section>
+</section>
+<section id="issues-by-camera-interface">
+<h2>Issues by camera interface<a class="headerlink" href="#issues-by-camera-interface" title="Permalink to this headline"></a></h2>
+<section id="gige-cameras">
+<h3>GigE cameras<a class="headerlink" href="#gige-cameras" title="Permalink to this headline"></a></h3>
+<p>To use your GigE camera with best possible performance, follow the instructions in the User Guide
+of your camera.</p>
+<p>We recommend using the Filter Driver of Vimba X. To check if the correct Filter driver
+is in use:</p>
+<ol class="arabic simple">
+<li><p>Open your camera with Vimba X Viewer.</p></li>
+<li><p>Open the <span class="guilabel">All</span> tab and expand <em>Stream 0</em>.</p></li>
+<li><p>In the Settings, check that GVSP Driver Selector uses <em>Filter</em>.</p></li>
+<li><p>Expand <em>Info</em> and check that GVSP Filter Compatibility is “Matching”. If it is not <em>Matching</em>,
+use Vimba Driver Installer in the Vimba X install directory to install the latest Fiter Driver.</p></li>
+</ol>
+<section id="gige-vision-cameras">
+<h4>5 GigE Vision cameras<a class="headerlink" href="#gige-vision-cameras" title="Permalink to this headline"></a></h4>
+<p>To get your 5 GigE Vision camera up and running, see the user guide/manual for your
+camera.</p>
+</section>
+<section id="packetsize">
+<h4>PacketSize<a class="headerlink" href="#packetsize" title="Permalink to this headline"></a></h4>
+<p>Make sure to set the PacketSize feature of GigE cameras to a value supported by
+your network card. If you use more than one camera on one interface, the
+available bandwidth has to be shared between the cameras.</p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">GVSPAdjustPacketSize</span></code> configures GigE cameras to use the largest
+possible packets.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">DeviceThroughputLimit</span></code> enables to configure the individual bandwidth
+if multiple cameras are used.</p></li>
+<li><p>The maximum packet size might not be available on all connected cameras.
+Try to reduce the packet size.</p></li>
+</ul>
+</section>
+<section id="other-issues">
+<h4>Other issues<a class="headerlink" href="#other-issues" title="Permalink to this headline"></a></h4>
+<ul class="simple">
+<li><p>Access Mode “Config” is not available in this SDK. Please use IP Config instead.</p></li>
+<li><p>By default, the Allied Vision GigE TL is set to <em>Broadcast</em> (instead of <em>Discovery Once</em>),
+which constantly consumes bandwidth. For a higher bandwidth, use <em>Discovery Once</em> every time
+you connect a GigE camera.</p></li>
+<li><p>If the GigE Filter Driver installation via Driver Installer is not possible, please install
+it manually to your NIC.</p></li>
+</ul>
+</section>
+</section>
+<section id="usb-cameras">
+<h3>USB cameras<a class="headerlink" href="#usb-cameras" title="Permalink to this headline"></a></h3>
+<p>Under Windows, make sure the correct driver is applied.</p>
+</section>
+<section id="mipi-csi-2-cameras">
+<h3>MIPI CSI-2 cameras<a class="headerlink" href="#mipi-csi-2-cameras" title="Permalink to this headline"></a></h3>
+<section id="compatible-boards-and-driver">
+<h4>Compatible boards and driver<a class="headerlink" href="#compatible-boards-and-driver" title="Permalink to this headline"></a></h4>
+<p>The camera driver must be installed before using Vimba. It is available for selected ARM boards
+and SOMS at <a class="reference external" href="https://github.com/alliedvision">https://github.com/alliedvision</a></p>
+</section>
+<section id="camera-list">
+<h4>Camera list<a class="headerlink" href="#camera-list" title="Permalink to this headline"></a></h4>
+<p>MIPI CSI-2 is not a plug and play interface. To update the cameras list, reboot the board.</p>
+</section>
+<section id="image-acquisition">
+<h4>Image acquisition<a class="headerlink" href="#image-acquisition" title="Permalink to this headline"></a></h4>
+<p>Make sure you use the latest firmware version. If you already have installed Vimba, you can
+use the included Firmware Updater. Or download it from <a class="reference external" href="https://www.alliedvision.com/en/support/software-downloads/">https://www.alliedvision.com/en/support/software-downloads/</a></p>
+</section>
+</section>
+</section>
+<section id="typical-linux-issues">
+<h2>Typical Linux issues<a class="headerlink" href="#typical-linux-issues" title="Permalink to this headline"></a></h2>
+<section id="installation">
+<h3>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h3>
+<p>Installation instructions are listed in the release notes for your operating system.</p>
+<p>To install Vimba X for Linux, you need tar and the C runtime library
+glibc6 (version 2.27 or higher).</p>
+</section>
+<section id="transport-layers-not-found">
+<h3>Transport layers not found<a class="headerlink" href="#transport-layers-not-found" title="Permalink to this headline"></a></h3>
+<p>In most cases, Install.sh automatically registers the GENICAM_GENTL64_PATH
+environment variables in /etc/profile.d, so that every GenICam GenTL consumer
+can access the Vimba transport layers. If the transport layers are not found:</p>
+<ul class="simple">
+<li><p>If multiple users work with the system, make sure all users can access /etc/profile.d.</p></li>
+<li><p>If your display manager doesn’t support the install script (for example, lightdm and wdm):
+Please add the required environment variables to the /etc/environment file.</p></li>
+<li><p>If login shell support is not supported, Install.sh in /etc/profile.d will not be
+loaded for X-Session. In this case, please copy the following line into the  ~/.bashrc
+file and reboot. <code class="docutils literal notranslate"><span class="pre">export</span> <span class="pre">GENICAM_GENTL64_PATH=$GENICAM_GENTL64_PATH:</span> <span class="pre">&quot;/PATH_TO_VIMBAXFOLDER/VimbaGigETL/CTI/x86_64bit/&quot;</span></code></p></li>
+</ul>
+</section>
+<section id="compiling">
+<h3>Compiling<a class="headerlink" href="#compiling" title="Permalink to this headline"></a></h3>
+<p>To compile the examples and the C++ API, you need:</p>
+<ul class="simple">
+<li><p>CMake (&gt;= 3.21)</p></li>
+<li><p>make</p></li>
+<li><p>g++ (&gt;= 8.4.0)</p></li>
+<li><p>Qt (5.15.x)</p></li>
+</ul>
+</section>
+</section>
+<section id="technical-support">
+<h2>Technical support<a class="headerlink" href="#technical-support" title="Permalink to this headline"></a></h2>
+<p>Allied Vision provides technical support if you use Allied Vision cameras.
+We don’t offer technical support if a non-Allied Vision camera is used.</p>
+<p>To get technical support, please go to:</p>
+<p><a class="reference external" href="https://www.alliedvision.com/en/about-us/contact-us/technical-support-repair-/-rma/">https://www.alliedvision.com/en/about-us/contact-us/technical-support-repair-/-rma/</a></p>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="imagetransformManual.html" class="btn btn-neutral float-left" title="Image Transform Manual" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="legalInformation.html" class="btn btn-neutral float-right" title="Legal Information" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation/viewerGuide.html b/VimbaX/doc/VimbaX_Documentation/viewerGuide.html
new file mode 100644
index 0000000000000000000000000000000000000000..ae836129a3ced6d1da00c304e9e4332ff09fe430
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation/viewerGuide.html
@@ -0,0 +1,885 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Viewer Guide &mdash; Vimba X Developer Guide 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/tabs.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="author" title="About these documents" href="about.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="SDK Manual" href="sdkManual.html" />
+    <link rel="prev" title="Firmware Updater Manual" href="fwUpdater.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Developer Guide
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Get Started:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="about.html">About Vimba X</a></li>
+<li class="toctree-l1"><a class="reference internal" href="migrationGuide.html">Migration Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examplesOverview.html">Examples Overview</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Manuals:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="driverInstaller.html">Driver Installer Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="fwUpdater.html">Firmware Updater Manual</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Viewer Guide</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#overview">Overview</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#prerequisites">Prerequisites</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#quick-start">Quick start</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#camera-not-detected">Camera not detected</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#viewer-tabs-concept">Viewer tabs concept</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#finding-features-in-the-all-tab">Finding features in the All tab</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#starting-and-stopping-image-acquisition">Starting and stopping image acquisition</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#loading-and-saving-settings">Loading and saving settings</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#using-saved-settings-files-with-vimba-x-api">Using saved settings files with Vimba X API</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#saving-images">Saving images</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#saving-one-image">Saving one image</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#saving-an-image-series">Saving an image series</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#saving-16-bit-images">Saving 16-bit images</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#options">Options</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#setting-up-your-camera">Setting up your camera</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#brightness-tab">Brightness tab</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#exposure-and-gain">Exposure and Gain</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#using-auto-exposure-and-auto-gain">Using auto exposure and auto gain</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#roi-tab">ROI tab</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#setting-up-roi-and-binning">Setting up ROI and binning</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#autofunction-roi-tab">Autofunction ROI tab</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#trigger-io-tab">Trigger IO tab</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#trigger-io-overview">Trigger IO Overview</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#presets">Presets</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#trigger-over-ethernet-action-commands">Trigger over Ethernet - Action Commands</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#color-tab">Color tab</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#auto-white-balance">Auto white balance</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#hue-and-saturation">Hue and Saturation</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#color-transformation-matrix">Color transformation matrix</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#color-correction">Color correction</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#image-processing-tab">Image Processing tab</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#default-functionalities">Default functionalities</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#custom-convolution">Custom Convolution</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="sdkManual.html">SDK Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cAPIManual.html">C API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIManual.html">CPP API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="pythonAPIManual.html">Python API Manual</a></li>
+<li class="toctree-l1"><a class="reference internal" href="imagetransformManual.html">Image Transform Manual</a></li>
+</ul>
+<p class="caption" role="heading"><span class="caption-text">Help &amp; information:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
+<li class="toctree-l1"><a class="reference internal" href="legalInformation.html">Legal Information</a></li>
+</ul>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Developer Guide</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Viewer Guide</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="viewer-guide">
+<h1>Viewer Guide<a class="headerlink" href="#viewer-guide" title="Permalink to this headline"></a></h1>
+<section id="overview">
+<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
+<p>This document guides you through the basic camera setup with Vimba X Viewer.
+You will learn how to select, control, and save settings such as image size, exposure time, and color display.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For information on camera and driver installation and a detailed feature description,
+download the corresponding
+<a class="reference external" href="https://www.alliedvision.com/en/support/technical-documentation.html">documents for your camera.</a></p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Depending on the camera model, different features are available.
+The screenshots and examples in this document are generic.</p>
+</div>
+<section id="prerequisites">
+<h3>Prerequisites<a class="headerlink" href="#prerequisites" title="Permalink to this headline"></a></h3>
+<p>This manual assumes you have already installed and configured the host adapter card or
+frame grabber according to the
+<a class="reference external" href="https://www.alliedvision.com/en/support/technical-documentation/">instructions for your camera.</a></p>
+</section>
+<section id="quick-start">
+<h3>Quick start<a class="headerlink" href="#quick-start" title="Permalink to this headline"></a></h3>
+<p>You can access Vimba X Viewer from the Windows Start menu or in the Vimba X install directory /bin.</p>
+<p>To use the Viewer:</p>
+<ol class="arabic simple">
+<li><p>Connect the camera to the host.</p></li>
+<li><p>Start Vimba X Viewer.</p></li>
+<li><p>Click the camera you want to open.</p></li>
+</ol>
+<figure class="align-default" id="id3">
+<a class="reference internal image-reference" href="_images/main-window_1.png"><img alt="Open camera" src="_images/main-window_1.png" style="width: 400px;" /></a>
+<figcaption>
+<p><span class="caption-text">Open camera</span><a class="headerlink" href="#id3" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p>The main window opens.</p>
+<ol class="arabic simple" start="4">
+<li><p>To start image acquisition, click <span class="guilabel">Freerun</span>.</p></li>
+</ol>
+<figure class="align-default" id="id4">
+<a class="reference internal image-reference" href="_images/Freerun.png"><img alt="Freerun" src="_images/Freerun.png" style="width: 350px;" /></a>
+<figcaption>
+<p><span class="caption-text">Start continuous image acquisition (freerun)</span><a class="headerlink" href="#id4" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<section id="camera-not-detected">
+<h4>Camera not detected<a class="headerlink" href="#camera-not-detected" title="Permalink to this headline"></a></h4>
+<p>USB camera:</p>
+<ul class="simple">
+<li><p>Check with the Driver Installer of Vimba X if the driver is installed.</p></li>
+<li><p>Unplug the camera and plug in the camera again.</p></li>
+</ul>
+<p>GigE camera:</p>
+<ul class="simple">
+<li><p>Go to the install directory of the GigE TL and open its XML configuration file.
+In this XML file, check if GigE camera detection is switched on.</p></li>
+</ul>
+<p>If the problem persists, Vimba X Viewer offers several possibilities:</p>
+<ul class="simple">
+<li><p>Click <span class="guilabel">Open camera</span>, which opens the camera if you type in the
+IP address, Camera ID, or Mac address.</p></li>
+<li><p>Use <span class="guilabel">ConfigureIP</span> to assign a Persistent IP or to change from DHCP to LLA.</p></li>
+<li><p>In the <span class="guilabel">ConfigureIP</span> dialog, click <span class="guilabel">ForceIP</span> to open the ForceIP dialog.</p></li>
+</ul>
+<figure class="align-default" id="id5">
+<a class="reference internal image-reference" href="_images/open-force.png"><img alt="Force IP" src="_images/open-force.png" style="width: 350px;" /></a>
+<figcaption>
+<p><span class="caption-text">Open camera that was not discovered, Configure IP</span><a class="headerlink" href="#id5" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<figure class="align-default">
+<a class="reference internal image-reference" href="_images/ConfigureIP.png"><img alt="Configure the IP address and access the Force IP dialog" src="_images/ConfigureIP.png" style="width: 350px;" /></a>
+</figure>
+<p>Configure the IP address and access the Force IP dialog</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The Configure IP dialog doesn’t update the camera list.</p>
+</div>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For smooth operation and best performance of your GigE camera, follow the
+<a class="reference external" href="https://www.alliedvision.com/en/support/technical-documentation/">instructions for your camera.</a></p>
+</div>
+<p>CSI camera:</p>
+<ul class="simple">
+<li><p>Before using Vimba X, install the driver. It is provided at <a class="reference external" href="https://github.com/alliedvision">https://github.com/alliedvision</a>.</p></li>
+<li><p>CSI-2 is not a plug and play interface. To update the camera list, reboot the board.</p></li>
+</ul>
+</section>
+</section>
+<section id="viewer-tabs-concept">
+<h3>Viewer tabs concept<a class="headerlink" href="#viewer-tabs-concept" title="Permalink to this headline"></a></h3>
+<p>To select and configure settings, Vimba X Viewer provides tabs with basic grouped
+camera features and the <span class="guilabel">All</span> tab, which contains a list of both the basic
+features and advanced features.</p>
+<figure class="align-default" id="id6">
+<a class="reference internal image-reference" href="_images/Tabs.png"><img alt="Viewer tabs" src="_images/Tabs.png" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">Viewer tabs</span><a class="headerlink" href="#id6" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p>To quickly set up your camera, we recommend going through the tabs from left to
+right. The basic features can be adjusted either on the
+<span class="guilabel">All</span> tab or on the other tabs, whereas advanced features are available on the <span class="guilabel">All</span> tab only.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The <span class="guilabel">Color</span> tab is available for color cameras only.</p>
+</div>
+<section id="finding-features-in-the-all-tab">
+<h4>Finding features in the All tab<a class="headerlink" href="#finding-features-in-the-all-tab" title="Permalink to this headline"></a></h4>
+<p>To quickly find features from the other tabs in the <span class="guilabel">All</span> tab, enter their first letters in the Search field.</p>
+<p>The <span class="guilabel">All</span> tab provides tooltips and an optional feature description window.
+The description also lists which other features are affected by the selected feature.</p>
+<figure class="align-default" id="id7">
+<a class="reference internal image-reference" href="_images/Tooltip.png"><img alt="Tooltips" src="_images/Tooltip.png" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">Tooltips</span><a class="headerlink" href="#id7" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+</section>
+<section id="starting-and-stopping-image-acquisition">
+<h3>Starting and stopping image acquisition<a class="headerlink" href="#starting-and-stopping-image-acquisition" title="Permalink to this headline"></a></h3>
+<p>To start and stop image acquisition, click <span class="guilabel">Freerun</span>.</p>
+<figure class="align-default" id="id8">
+<a class="reference internal image-reference" href="_images/Freerun.png"><img alt="Freerun" src="_images/Freerun.png" style="width: 350px;" /></a>
+<figcaption>
+<p><span class="caption-text">Freerun</span><a class="headerlink" href="#id8" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+<section id="loading-and-saving-settings">
+<h3>Loading and saving settings<a class="headerlink" href="#loading-and-saving-settings" title="Permalink to this headline"></a></h3>
+<p>Additionally to the user sets stored inside the camera, you can save the feature
+values as an XML file to your host PC. You can load this camera settings XML file
+to a camera or use the XML file with the Vimba X APIs. To load or save a settings file,
+click <span class="guilabel">Load</span> and <span class="guilabel">Save</span>.</p>
+<figure class="align-default" id="id9">
+<a class="reference internal image-reference" href="_images/LoadSave.png"><img alt="Load and save settings" src="_images/LoadSave.png" style="width: 160px;" /></a>
+<figcaption>
+<p><span class="caption-text">Load and save settings</span><a class="headerlink" href="#id9" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<section id="using-saved-settings-files-with-vimba-x-api">
+<h4>Using saved settings files with Vimba X API<a class="headerlink" href="#using-saved-settings-files-with-vimba-x-api" title="Permalink to this headline"></a></h4>
+<p>To use a saved settings file with Vimba X API:</p>
+<ol class="arabic simple">
+<li><p>Set up your camera with Vimba X Viewer.</p></li>
+<li><p>Save the settings.</p></li>
+<li><p>Load the settings with the API (see the example and the API manuals).</p></li>
+</ol>
+</section>
+</section>
+<section id="saving-images">
+<h3>Saving images<a class="headerlink" href="#saving-images" title="Permalink to this headline"></a></h3>
+<section id="saving-one-image">
+<h4>Saving one image<a class="headerlink" href="#saving-one-image" title="Permalink to this headline"></a></h4>
+<p>In the File menu, click <em>Save Image As…</em></p>
+<figure class="align-default" id="id10">
+<a class="reference internal image-reference" href="_images/File.png"><img alt="File menu" src="_images/File.png" style="width: 190px;" /></a>
+<figcaption>
+<p><span class="caption-text">File menu</span><a class="headerlink" href="#id10" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p>The <em>Save Image</em> window opens and you can save one image.</p>
+<p>You can save the current image while the camera is running
+or you can save the current image displayed in Vimba X Viewer
+while the camera is stopped.</p>
+</section>
+<section id="saving-an-image-series">
+<h4>Saving an image series<a class="headerlink" href="#saving-an-image-series" title="Permalink to this headline"></a></h4>
+<ol class="arabic simple">
+<li><p>If the camera is running, stop image acquisition.</p></li>
+<li><p>In the File menu shown above, click <em>Image Series Options…</em>.</p></li>
+<li><p>The <em>Saving Options</em> window opens. In the dialog, make sure the Number Of Images is &gt; 0,
+select the other options, and click OK.</p></li>
+<li><p>Now <em>Save Image Series</em> is active. Clicking it triggers acquiring and saving the
+defined number of images. You can also use the icon:</p></li>
+</ol>
+<figure class="align-default" id="id11">
+<a class="reference internal image-reference" href="_images/Image-series-button.png"><img alt="Save image series" src="_images/Image-series-button.png" style="width: 150px;" /></a>
+<figcaption>
+<p><span class="caption-text">Save image series</span><a class="headerlink" href="#id11" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p>If the icon is grayed out, make sure that image acquisition is stopped and
+the selected number of images is &gt; 0.</p>
+</section>
+<section id="saving-16-bit-images">
+<h4>Saving 16-bit images<a class="headerlink" href="#saving-16-bit-images" title="Permalink to this headline"></a></h4>
+<p>By default, Vimba X Viewer saves 8-bit images, regardless of the selected pixel format
+or file format. Optionally, all images with mono or Bayer pixel formats
+&gt; 8-bit per channel (e.g., Mono10, BayerRG12Packed, Mono14) can be saved
+as 16-bit TIFF. To enable this option, select <em>Allow 16-Bit TIFF Saving</em>.</p>
+<figure class="align-default" id="id12">
+<a class="reference internal image-reference" href="_images/File.png"><img alt="16-Bit Tiff" src="_images/File.png" style="width: 190px;" /></a>
+<figcaption>
+<p><span class="caption-text">Save 16-Bit Tiff</span><a class="headerlink" href="#id12" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>The option for saving 16-bit image files is not optimized for performance.
+Therefore, it is deselected by default when a camera is opened.
+We recommend selecting it on demand.</p>
+</div>
+<p>16-bit image files are saved if these conditions are true:</p>
+<ul class="simple">
+<li><p><em>Allow 16-Bit TIFF Saving</em> is checked.</p></li>
+<li><p><em>TIFF</em> or <em>TIF</em> is the selected file format for image (series) saving.</p></li>
+<li><p>The camera’s current pixel format is a mono or Bayer format &gt; 8 bits per channel.</p></li>
+</ul>
+</section>
+</section>
+<section id="options">
+<h3>Options<a class="headerlink" href="#options" title="Permalink to this headline"></a></h3>
+<p>Go to <strong>View</strong> → <strong>Options</strong> to:</p>
+<ul class="simple">
+<li><p>Display every completed frame (increases CPU load, not recommended for most use cases)</p></li>
+<li><p>Change the number of used frame buffers</p></li>
+<li><p>Enable or disable Alloc and Announce, which may optimize buffer allocation (depending on your use case).</p></li>
+</ul>
+</section>
+</section>
+<section id="setting-up-your-camera">
+<h2>Setting up your camera<a class="headerlink" href="#setting-up-your-camera" title="Permalink to this headline"></a></h2>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Available features and appearance GUI elements vary depending on camera interface and camera model.</p>
+</div>
+<section id="brightness-tab">
+<h3>Brightness tab<a class="headerlink" href="#brightness-tab" title="Permalink to this headline"></a></h3>
+<p>The <span class="guilabel">Brightness</span> tab contains features for controlling exposure, gain, black level, and gamma.</p>
+<figure class="align-default" id="id13">
+<a class="reference internal image-reference" href="_images/Brightness.png"><img alt="Brightness tab" src="_images/Brightness.png" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">Brightness tab</span><a class="headerlink" href="#id13" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<section id="exposure-and-gain">
+<h4>Exposure and Gain<a class="headerlink" href="#exposure-and-gain" title="Permalink to this headline"></a></h4>
+<p>To change the exposure time, either move the Exposure slider or enter a value and
+press the ENTER key. To enter exposure times in s, ms, and μs, click <strong>More</strong>.</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>If your camera does not reach the maximum frame rate, check if the exposure time is
+short enough. Example: If the exposure time is 100 ms, the camera cannot acquire more
+than approximately 10 fps.</p>
+</div>
+<p>To change the gain value, either move the Gain slider or enter a value and press the
+ENTER key. Your entry is automatically rounded up or down to the next possible value.</p>
+</section>
+<section id="using-auto-exposure-and-auto-gain">
+<h4>Using auto exposure and auto gain<a class="headerlink" href="#using-auto-exposure-and-auto-gain" title="Permalink to this headline"></a></h4>
+<p>The purpose of auto functions is to automatically compensate for changes of the
+lighting intensity. They use information from the camera’s current image and apply
+the optimized settings to the next image. Therefore, they can control values only
+if the camera is running. Large changes in scene lighting may require several frames
+for the algorithm to stabilize. The auto functions can be applied either once or continuously.</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>In most cases, you reach the best possible image quality by setting gain to the lowest
+possible value and increasing the exposure time as needed. The reason is that gain
+amplifies all image contents including noise.</p>
+</div>
+<p>If both auto features are used simultaneously, Exposure Auto has priority until
+ExposureAutoMax is reached. Then Gain Auto takes over priority.</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a feature description, see the <em>features reference</em> document for your camera.</p>
+</div>
+</section>
+</section>
+<section id="roi-tab">
+<h3>ROI tab<a class="headerlink" href="#roi-tab" title="Permalink to this headline"></a></h3>
+<p>Selecting an ROI/AOI (region of interest/area of interest) enables working with a reduced image
+resolution to save bandwidth, achieve a higher frame rate (depending on the sensor),
+or crop the image according to your needs. Moreover, some cameras support binning.</p>
+<figure class="align-default" id="id14">
+<a class="reference internal image-reference" href="_images/ROI.png"><img alt="ROI/AOI tab" src="_images/ROI.png" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">ROI/AOI tab</span><a class="headerlink" href="#id14" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<section id="setting-up-roi-and-binning">
+<h4>Setting up ROI and binning<a class="headerlink" href="#setting-up-roi-and-binning" title="Permalink to this headline"></a></h4>
+<p>To set up the basic image format:</p>
+<ol class="arabic simple">
+<li><p>Select a pixel format.
+Optionally (and if your camera supports it), activate binning by selecting a value
+greater than 1 (binning = 1 does not affect the image).
+Binning combines neighboring pixels into one pixel. This decreases resolution and
+increases light sensitivity. Depending on the camera model, binning may increase the
+frame rate.</p></li>
+<li><p>Select an ROI. To do this, either click in the blue ROI area and scale or move it with
+the mouse or enter values into the ROI fields.
+The buttons <span class="guilabel">Full</span>, <span class="guilabel">1/4</span>, and <span class="guilabel">1/16</span> evoke a centered ROI of the full or partial image.</p></li>
+</ol>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a feature description, see the <em>features reference</em> document for your camera.</p>
+</div>
+</section>
+<section id="autofunction-roi-tab">
+<h4>Autofunction ROI tab<a class="headerlink" href="#autofunction-roi-tab" title="Permalink to this headline"></a></h4>
+<p>Autofunction ROI means that the auto functions react to lighting changes
+only within the selected image section.</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>If your camera has the Intensity Controller Region feature, go to
+the <span class="guilabel">All</span> tab and make sure AutoModeRegion1 is switched on.</p>
+</div>
+<figure class="align-default" id="id15">
+<a class="reference internal image-reference" href="_images/Auto-ROI.png"><img alt="Autofunction ROI tab" src="_images/Auto-ROI.png" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">Autofunction ROI tab</span><a class="headerlink" href="#id15" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p>With GigE cameras, Autofunction ROI (the DSPSubregion feature) is active as
+soon as auto exposure or auto gain are switched on. You cannot switch off
+DSPSubregion. Therefore, click <span class="guilabel">Full</span> if you want to apply
+auto gain and auto exposure to the whole image.</p>
+<p>To change Autofunction ROI, either click in the green ROI area and drag it
+or enter values.</p>
+<p>The buttons <span class="guilabel">Full</span>, <span class="guilabel">1/4</span>, and <span class="guilabel">1/16</span> evoke a centered ROI of the full or partial image.</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>Exposure Auto controls the minimum and maximum exposure time values in μs. If you want
+to reach the minimum frame rate, limit the exposure time accordingly.</p>
+</div>
+</section>
+</section>
+<section id="trigger-io-tab">
+<h3>Trigger IO tab<a class="headerlink" href="#trigger-io-tab" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Unsuitable connections may damage the camera or cause electrical shock.
+Before connecting external devices, read the
+<a class="reference external" href="https://www.alliedvision.com/en/support/technical-documentation/">instructions for your camera.</a></p>
+</div>
+<section id="trigger-io-overview">
+<h4>Trigger IO Overview<a class="headerlink" href="#trigger-io-overview" title="Permalink to this headline"></a></h4>
+<p>Optionally, image acquisition can be started and stopped by a trigger signal from an
+external device or as a software command.
+Moreover, control signals can be transferred to external devices or additional cameras.</p>
+<p>To trigger your cameras, you can use the presets as a start and modify them according
+to your use case. To configure trigger features such as Counters and Timers,
+open the Advanced Trigger dialog.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>If you change trigger features in the All tab, the Trigger IO tab preset doesn’t change to <em>Custom</em>.</p>
+</div>
+<figure class="align-default" id="id16">
+<a class="reference internal image-reference" href="graphics/Viewer/Trigger.png"><img alt="Trigger IO tab" src="graphics/Viewer/Trigger.png" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">Trigger IO tab, click Open Dialog for advanced settings</span><a class="headerlink" href="#id16" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p>In the I/O configuration table, a green status indicates <em>true</em> and a gray status indicates <em>false</em>.</p>
+<p>The <strong>Advanced Trigger</strong> dialog provides access to all trigger-related features:</p>
+<blockquote>
+<div><ul class="simple">
+<li><dl class="simple">
+<dt>I/O configuration: Set debouncing (<em>Configure inputs and outputs</em> table)</dt><dd><ul>
+<li><p><em>Debounce Mode</em> Delay: LineDebounceDuration controls how long the signal level
+must be sustained for before it is accepted.</p></li>
+<li><p><em>Debounce Mode</em> Stall: LineDebounceDuration controls the intensity duration
+after the falling edge of the signal.</p></li>
+</ul>
+</dd>
+</dl>
+</li>
+<li><p>Action Commands (including PTP)</p></li>
+<li><p>Software signal</p></li>
+<li><p>Counter and Timer</p></li>
+</ul>
+</div></blockquote>
+<figure class="align-default" id="id17">
+<a class="reference internal image-reference" href="_images/Trigger_advanced.png"><img alt="Advanced Trigger IO dialog" src="_images/Trigger_advanced.png" style="width: 1200px;" /></a>
+<figcaption>
+<p><span class="caption-text">Advanced Trigger IO dialog</span><a class="headerlink" href="#id17" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+<section id="presets">
+<h4>Presets<a class="headerlink" href="#presets" title="Permalink to this headline"></a></h4>
+<section id="turn-off-all">
+<h5>Turn Off All<a class="headerlink" href="#turn-off-all" title="Permalink to this headline"></a></h5>
+<p>Turns off all triggers and trigger sources, so that you can start image acquisition without using a trigger source.
+Other trigger settings like delay values keep their current settings.</p>
+</section>
+<section id="reset-all">
+<h5>Reset All<a class="headerlink" href="#reset-all" title="Permalink to this headline"></a></h5>
+<p>Resets all trigger features to default values. Other features such as white balance
+are not changed by this preset.</p>
+</section>
+<section id="custom">
+<h5>Custom<a class="headerlink" href="#custom" title="Permalink to this headline"></a></h5>
+<p>This preset becomes active when you apply changes to trigger features in the trigger IO tab.</p>
+</section>
+<section id="frame-trigger-software">
+<h5>Frame Trigger Software<a class="headerlink" href="#frame-trigger-software" title="Permalink to this headline"></a></h5>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>The camera does not react immediately on a software trigger because a
+computer needs some time (latency) to process it. Since the CPU load varies
+all the time, the latency varies as well. If your application requires
+triggering with high precision, use a hardware device or, if your camera supports it, Trigger over Ethernet.</p>
+</div>
+<p>Trigger the camera by software:</p>
+<ul class="simple">
+<li><p>Software trigger</p></li>
+<li><p>FrameStart</p></li>
+<li><p>RisingEdge</p></li>
+<li><p>Continuous acquisition</p></li>
+<li><p>Exposure mode: timed</p></li>
+</ul>
+<p>To execute a software trigger, click <span class="guilabel">Execute SW Trigger</span>.</p>
+</section>
+<section id="frame-trigger-io-line0-edge">
+<h5>Frame Trigger IO Line0 Edge<a class="headerlink" href="#frame-trigger-io-line0-edge" title="Permalink to this headline"></a></h5>
+<p>Trigger the camera on rising edge:</p>
+<ul class="simple">
+<li><p>FrameStart</p></li>
+<li><p>RisingEdge</p></li>
+<li><p>Line0</p></li>
+<li><p>Continuous acquisition</p></li>
+<li><p>Exposure mode: timed</p></li>
+<li><p>Line0 (input)</p></li>
+</ul>
+</section>
+<section id="frame-trigger-io-line0-level">
+<h5>Frame Trigger IO Line0 Level<a class="headerlink" href="#frame-trigger-io-line0-level" title="Permalink to this headline"></a></h5>
+<p>Control the exposure time through an external device:</p>
+<ul class="simple">
+<li><p>FrameStart</p></li>
+<li><p>LevelHigh</p></li>
+<li><p>Line0</p></li>
+<li><p>Continuous acquisition</p></li>
+<li><p>Exposure mode: trigger width</p></li>
+<li><p>Line0 (input)</p></li>
+</ul>
+<p>The camera exposes as long as the signal level from the trigger device is high.</p>
+</section>
+<section id="frame-trigger-io-line0-bulk">
+<h5>Frame Trigger IO Line0 Bulk<a class="headerlink" href="#frame-trigger-io-line0-bulk" title="Permalink to this headline"></a></h5>
+<p>Acquire an image series of <em>n</em> frames with a single trigger signal:</p>
+<ul class="simple">
+<li><p>FrameStart</p></li>
+<li><p>RisingEdge</p></li>
+<li><p>Line0 (input)</p></li>
+<li><p>MultiFrame, AcquisitionFrameCount: 10</p></li>
+<li><p>Exposure mode: timed</p></li>
+</ul>
+</section>
+<section id="pwm-io-line1-timer0-1khz-50">
+<h5>PWM IO Line1 timer0 1khz 50%<a class="headerlink" href="#pwm-io-line1-timer0-1khz-50" title="Permalink to this headline"></a></h5>
+<p>Pulse Width Modulation with 1 kHz and 50% Duty Cycle:</p>
+<ul class="simple">
+<li><p>Timer0, TimerDelay: 500, TimerDuration: 500</p></li>
+<li><p>FallingEdge</p></li>
+<li><p>Timer0Active</p></li>
+<li><p>Line1 (output, source: Timer0Active)</p></li>
+<li><p>Execute: TimerReset</p></li>
+</ul>
+</section>
+<section id="counter-io-line0">
+<h5>Counter IO Line0<a class="headerlink" href="#counter-io-line0" title="Permalink to this headline"></a></h5>
+<p>Count RisingEdge occurrences on Line0:</p>
+<ul class="simple">
+<li><p>Counter0, CounterDuration: max</p></li>
+<li><p>CounterEventActivation: RisingEdge</p></li>
+<li><p>CounterEventSource: Line0, CounterResetSource: Off, CounterTriggerSource: Off</p></li>
+<li><p>Line0 (input)</p></li>
+<li><p>Execute: CounterReset</p></li>
+</ul>
+</section>
+</section>
+<section id="trigger-over-ethernet-action-commands">
+<h4>Trigger over Ethernet - Action Commands<a class="headerlink" href="#trigger-over-ethernet-action-commands" title="Permalink to this headline"></a></h4>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>If you use an Ethernet router, make sure all cameras are in the same subnet.
+Using a switch does not affect Action Commands.</p>
+</div>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For detailed information, read the
+<a class="reference external" href="https://cdn.alliedvision.com/fileadmin/content/documents/products/cameras/various/appnote/GigE/Action-Commands_Appnote.pdf">Action Commands application note</a>.</p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>According to the GenICam standard, <em>ActionDeviceKey</em> is write-only.
+Reading the value from the camera is not possible (if the camera firmware
+complies to the standard).</p>
+<p><em>Queue Size</em> is read-only.</p>
+</div>
+<p>Using Action Commands requires configuring them first on the camera and then on the host PC.</p>
+<p>To configure Action Commands on the camera:</p>
+<ol class="arabic simple">
+<li><p>In the Advanced Trigger IO dialog, select the desired values for the camera.
+If you want to use Scheduled Action Commands, select <em>PTP Enable</em>.</p></li>
+<li><p>Adjust the other trigger parameters as required by your use case.</p></li>
+<li><p>Click <span class="guilabel">Freerun</span>.</p></li>
+</ol>
+<figure class="align-default" id="id18">
+<a class="reference internal image-reference" href="_images/action-advanced.png"><img alt="Autofunction ROI tab" src="_images/action-advanced.png" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">Action Commands - camera features</span><a class="headerlink" href="#id18" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p>To configure Action Commands on the host PC:</p>
+<ol class="arabic simple">
+<li><p>While the camera window remains open, go to the main window
+and click <span class="guilabel">Action Commands</span>.</p></li>
+</ol>
+<figure class="align-default" id="id19">
+<a class="reference internal image-reference" href="_images/action-button.png"><img alt="Action" src="_images/action-button.png" style="width: 190px;" /></a>
+<figcaption>
+<p><span class="caption-text">Trigger over Ethernet - Action commands</span><a class="headerlink" href="#id19" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<p>The <em>Trigger over Ethernet - Action Commands</em> window opens.</p>
+<figure class="align-default" id="id20">
+<a class="reference internal image-reference" href="_images/action-commands.png"><img alt="Trigger over Ethernet - Action commands window" src="_images/action-commands.png" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">Trigger over Ethernet - Action commands window</span><a class="headerlink" href="#id20" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<ol class="arabic simple" start="2">
+<li><p>Select the host adapter your cameras are connected to or select <em>All interfaces</em>.</p></li>
+</ol>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>All Gigabit Ethernet adapters with a connected device are shown, even if the device
+does not support Action Commands.</p>
+</div>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The <em>Send Action Commands</em> window does not reload when you plug in or out a camera.
+If you plug in GigE cameras while the <em>Send Action Commands</em> window is open, close the
+window, wait until the device is detected, an then reopen the window.</p>
+</div>
+<ol class="arabic simple" start="3">
+<li><p>Select the desired interface. To trigger a single device, check <em>Single Device</em>
+and enter the device’s IP address.</p></li>
+<li><p>Use the values for Device Key, Group Key, and Group Mask from the camera
+settings for the empty fields to configure them on the host PC.</p></li>
+<li><p>To execute an Action Command, click <span class="guilabel">Send</span>. The Command log shows
+successfully sent Action Commands.</p></li>
+</ol>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Action Device Key must be set each time a camera was opened.</p>
+</div>
+<p><strong>Scheduled Action commands</strong>:</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>Check if your camera firmware supports Scheduled Action commands.</p>
+</div>
+<p>To use Scheduled Action commands, activate PTP for all cameras that receive the command.</p>
+<p><strong>Delay</strong>: The Action Command is scheduled after a user defined time interval in ms.
+Minimum value: 20 ms.</p>
+<p><strong>Action Time</strong>: Copy the timestamp latch value (in ns) from the camera and add the desired time (in ns).</p>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For a feature description, see the <em>GigE Features Reference</em>. See also the
+<strong>technical manual</strong> or <strong>user guide</strong>
+of your GigE camera, chapter <em>Camera interfaces</em> for advanced settings.</p>
+</div>
+<div class="admonition seealso">
+<p class="admonition-title">See also</p>
+<p>For more information on triggering, read our
+<a class="reference external" href="https://www.alliedvision.com/en/support/faqs-application-notes/">application notes</a>.</p>
+</div>
+</section>
+</section>
+<section id="color-tab">
+<h3>Color tab<a class="headerlink" href="#color-tab" title="Permalink to this headline"></a></h3>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The <span class="guilabel">Color</span> tab is available for color cameras only.</p>
+</div>
+<p>The <span class="guilabel">Color</span> tab contains features for controlling white balance, hue, and saturation
+as well as a color transformation matrix.</p>
+<figure class="align-default" id="id21">
+<a class="reference internal image-reference" href="_images/Color.png"><img alt="Color tab" src="_images/Color.png" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">Color tab</span><a class="headerlink" href="#id21" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Hue, Saturation, and Color Transformation have no effect if you select
+any Bayer pixel format.</p>
+</div>
+<section id="auto-white-balance">
+<h4>Auto white balance<a class="headerlink" href="#auto-white-balance" title="Permalink to this headline"></a></h4>
+<p>Auto white balance automatically compensates for changes of the lighting source
+spectrum, for example, if artificial illumination is switched on and off additionally
+to daylight.
+Auto white balance uses information from the camera’s current image and applies the
+optimized settings to the next image. Therefore, it can control values only if
+the camera is running. Large changes in scene lighting may require several frames
+for the algorithm to stabilize.
+Auto white balance can be applied either once or continuously.</p>
+</section>
+<section id="hue-and-saturation">
+<h4>Hue and Saturation<a class="headerlink" href="#hue-and-saturation" title="Permalink to this headline"></a></h4>
+<p>In the color circle, hue is represented by the outer ring and saturation by the inner ring.</p>
+<p>To change hue, click between the two small circles in the outer ring of the color circle
+(white circle: valid value, black circle: invalid value) or use the <em>Hue</em> box.
+To change saturation, click in the inner ring of the color circle or use the
+Saturation box or slider.</p>
+</section>
+<section id="color-transformation-matrix">
+<h4>Color transformation matrix<a class="headerlink" href="#color-transformation-matrix" title="Permalink to this headline"></a></h4>
+<p>The color transformation matrix enables you to adapt the color reproduction.</p>
+</section>
+<section id="color-correction">
+<h4>Color correction<a class="headerlink" href="#color-correction" title="Permalink to this headline"></a></h4>
+<p>Color correction compensates the overlap in the color channels. For example,
+a certain amount of blue light is “seen” not only by the blue pixels, but also
+by the red and green pixels. Depending on the spectrum of the light source and
+the sensor’s spectral response, different values are required to adjust the
+overlap and thus achieve the desired color reproduction.</p>
+<p>In the color transformation matrix, Crr, Cgg, and Cbb represent the primary colors
+red (of the red pixel), green (of the green pixel), and blue (of the blue pixel).</p>
+<p>For example, Crr represents red color of the red pixel. Increasing or decreasing Crr amplifies
+or attenuates red image components.</p>
+<p>Values with two colors mean that the first color is mapped to the pixel of the
+second color. For example, Cgr means that green is mapped to the red pixel.</p>
+<p>To better understand values affecting two colors, have a look at the Hue - Saturation circle.</p>
+<p>For example, Cgr maps green light to the red color channel. Therefore, increasing Cgr amplifies
+green image components and shifts red image components towards green, resulting in a more
+orange red. Decreasing Cgr has the opposite effect: It attenuates green image components
+and shifts red image components towards
+magenta (the distance from red to green is larger).</p>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>For natural color reproduction (depending on the sensor’s capabilities), make sure all
+row sums are 1. Values that deviate from 1 may result in tinted images.</p>
+</div>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>In machine vision, color correction is often used to emphasize a color of interest, to
+enhance the difference between two similar colors, or to reduce image complexity.</p>
+</div>
+<p>To reset the matrix to its default values, click <span class="guilabel">Reset</span>.</p>
+</section>
+</section>
+<section id="image-processing-tab">
+<h3>Image Processing tab<a class="headerlink" href="#image-processing-tab" title="Permalink to this headline"></a></h3>
+<section id="default-functionalities">
+<h4>Default functionalities<a class="headerlink" href="#default-functionalities" title="Permalink to this headline"></a></h4>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The <span class="guilabel">Image Processing</span> tab is available only for cameras with
+ImageProcessingControl features.</p>
+</div>
+<p>The <span class="guilabel">Image Processing</span> tab contains features for contrast stretching
+(ContrastControl), color interpolation, and Convolution Mode.</p>
+<figure class="align-default" id="id22">
+<a class="reference internal image-reference" href="_images/Processing.PNG"><img alt="Image processing tab" src="_images/Processing.PNG" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">Image Processing tab</span><a class="headerlink" href="#id22" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+</section>
+<section id="custom-convolution">
+<h4>Custom Convolution<a class="headerlink" href="#custom-convolution" title="Permalink to this headline"></a></h4>
+<p>If you select <em>Custom Convolution</em> as Convolution Mode, a matrix opens and you can
+enter the desired values.</p>
+<figure class="align-default" id="id23">
+<a class="reference internal image-reference" href="_images/Convolution.PNG"><img alt="Custom Convolution" src="_images/Convolution.PNG" style="width: 500px;" /></a>
+<figcaption>
+<p><span class="caption-text">Custom Convolution</span><a class="headerlink" href="#id23" title="Permalink to this image"></a></p>
+</figcaption>
+</figure>
+<div class="admonition tip">
+<p class="admonition-title">Tip</p>
+<p>If you want to use different custom convolution values, we recommend saving them together with
+the the other camera settings as an XML file.</p>
+</div>
+<p>If the value deviates from the preset and is present in the camera (for example, in the user set or because
+have changed it in the <span class="guilabel">All</span> tab), click <span class="guilabel">Load Values from Camera</span> to take over
+the values in the matrix.</p>
+<p>To apply new values to the camera, click <span class="guilabel">Write Values to Camera</span>.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The <span class="guilabel">All</span> tab reads and writes the custom convolution values directly. On the
+<span class="guilabel">Image Processing</span> tab, make sure to use <cite>Load Values from/to Camera</cite>.</p>
+</div>
+</section>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="fwUpdater.html" class="btn btn-neutral float-left" title="Firmware Updater Manual" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="sdkManual.html" class="btn btn-neutral float-right" title="SDK Manual" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_Documentation_Overview.html b/VimbaX/doc/VimbaX_Documentation_Overview.html
new file mode 100644
index 0000000000000000000000000000000000000000..1268f709e450c1cb11f9ca27c36d6d25f7838c5e
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation_Overview.html
@@ -0,0 +1,494 @@
+<!doctype html>
+<html lang="en-US">
+<head>
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>Vimba X Documentation Overview</title>
+<style>
+body {
+	font-family: sans-serif,Helvetica,Arial;
+	background-color: #000000;
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	font-style: normal;
+	font-weight: 200;
+}
+/* Container */
+.container {
+	width: 100%;
+	margin-left: auto;
+	margin-right: auto;
+	height: 1000px;
+	background-color: #FFFFFF;
+}
+/* Navigation */
+header {
+	width: 100%;
+	height: 5%;
+	background-color: #000000;
+	border-bottom: 1px solid #000000;
+}
+.logo {
+	color: #fff;
+	font-weight: bold;
+	text-align: undefined;
+	width: 10%;
+	float: left;
+	margin-top: 15px;
+	margin-left: 0px;
+	letter-spacing: 0px;
+}
+nav {
+	float: right;
+	width: 50%;
+	text-align: right;
+	margin-right: 25px;
+}
+header nav ul {
+	list-style: none;
+	float: right;
+}
+nav ul li {
+	float: left;
+	color: #FFFFFF;
+	font-size: 14px;
+	text-align: left;
+	margin-right: 25px;
+	letter-spacing: 2px;
+	font-weight: bold;
+	transition: all 0.3s linear;
+}
+ul li a {
+	color: #FFFFFF;
+	text-decoration: none;
+}
+ul li:hover a {
+	color: #2C9AB7;
+}
+.avt_header {
+	color: #FFFFFF;
+	text-align: left;
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	letter-spacing: 1px;
+}
+/* new Section */
+.avt {
+	background-color: #000000;
+	padding-top: 0px;
+	padding-bottom: 20px;
+}
+.light {
+	font-weight: normal;
+	color: #000000;
+}
+.tagline {
+	text-align: left;
+	color: #FFFFFF;
+	margin-top: 4px;
+	font-weight: lighter;
+	letter-spacing: 1px;
+}
+/* About Section */
+.text_column {
+	width: 60%;
+	text-align: left;
+	font-weight: lighter;
+	line-height: 25px;
+	float: left;
+	padding-left: 0px;
+	padding-right: 0px;
+	color: #000000;
+}
+.about {
+    padding-left: 25px;
+    padding-right: 25px;
+    padding-top: 35px;
+    display: inline-block;
+    background-color: #FFFFFF;
+    margin-top: 0px;
+}
+
+/* Parallax Section */
+.banner {
+	background-color: #000000;
+	background-image: url("../images/Background_1.png");
+	height: 400px;
+	background-attachment: fixed;
+	background-size: cover;
+	background-repeat: no-repeat;
+}
+.parallax {
+	color: #FFFFFF;
+	text-align: left;
+	padding-left: 100px;
+	padding-right: 100px;
+	padding-top: 110px;
+	letter-spacing: 1px;
+	margin-top: 0px;
+}
+.parallax_description {
+	color: #FFFFFF;
+	text-align: right;
+	padding-right: 100px;
+	width: 30%;
+	float: right;
+	font-weight: lighter;
+	line-height: 23px;
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+}
+/* More info */
+footer {
+	background-color: #FFFFFF;
+	padding-bottom: 35px;
+}
+.footer_column {
+	width: 50%;
+	text-align: center;
+	padding-top: 30px;
+	float: left;
+}
+footer .footer_column h3 {
+	color: #B3B3B3;
+	text-align: center;
+}
+footer .footer_column p {
+	color: #717070;
+	background-color: #FFFFFF;
+}
+.cards {
+	width: 100%;
+	height: auto;
+	max-width: 400px;
+	max-height: 200px;
+	margin-left: 50px
+}
+footer .footer_column p {
+	padding-left: 30px;
+	padding-right: 30px;
+	text-align: left;
+	line-height: 25px;
+	font-weight: lighter;
+	margin-left: 20px;
+	margin-right: 20px;
+}
+.button {
+	width: 200px;
+	margin-top: 40px;
+	margin-right: auto;
+	margin-bottom: auto;
+	margin-left: auto;
+	padding-top: 20px;
+	padding-right: 10px;
+	padding-bottom: 20px;
+	padding-left: 10px;
+	text-align: center;
+	vertical-align: middle;
+	border-radius: 0px;
+	text-transform: uppercase;
+	font-weight: bold;
+	letter-spacing: 2px;
+	border: 3px solid #FFFFFF;
+	color: #FFFFFF;
+	transition: all 0.3s linear;
+}
+.button:hover {
+	background-color: #FEFEFE;
+	color: #C4C4C4;
+	cursor: pointer;
+}
+.copyright {
+	text-align: center;
+	padding-top: 20px;
+	padding-bottom: 10px;
+	background-color: #000000;
+	color: #FFFFFF;
+	font-weight: lighter;
+	letter-spacing: 1px;
+	border-top-width: 2px;
+}
+.footer_banner {
+	background-color: #B3B3B3;
+	padding-top: 60px;
+	padding-bottom: 60PX;
+	margin-bottom: 0px;
+	background-image: url(../images/pattern.png);
+	background-repeat: repeat;
+}
+footer {
+	display: inline-block;
+}
+.hidden {
+	display: none;
+}
+
+/* Mobile */
+@media (max-width: 320px) {
+.logo {
+	width: 100%;
+	text-align: center;
+	margin-top: 13px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+}
+.container header nav {
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	width: 100%;
+	float: none;
+	display: none;
+}
+header nav ul {
+}
+nav ul li {
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	width: 100%;
+	text-align: center;
+}
+.text_column {
+	width: 100%;
+	text-align: left;
+	padding-top: 0px;
+	padding-right: 0px;
+	padding-bottom: 0px;
+	padding-left: 0px;
+}
+.thumbnail {
+	width: 100%;
+}
+.footer_column {
+	width: 100%;
+	margin-top: 0px;
+}
+.parallax {
+	text-align: center;
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	padding-top: 40%;
+	padding-right: 0px;
+	padding-bottom: 0px;
+	padding-left: 0px;
+	width: 100%;
+	font-size: 18px;
+}
+.parallax_description {
+	padding-top: 0px;
+	padding-right: 0px;
+	padding-bottom: 0px;
+	padding-left: 0px;
+	width: 90%;
+	margin-top: 25px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 12px;
+	float: none;
+	text-align: center;
+}
+.banner {
+	background-color: #2D9AB7;
+	background-image: radial-gradient(#666666, #000000);
+}
+.tagline {
+	margin-top: 20px;
+	line-height: 22px;
+}
+.avt_header {
+	padding-left: 10px;
+	padding-right: 10px;
+	line-height: 22px;
+	text-align: center;
+}
+}
+
+/* Small Tablets */
+@media (min-width: 321px)and (max-width: 767px) {
+.logo {
+	width: 100%;
+	text-align: center;
+	margin-top: 13px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	color: #043745;
+}
+.container header nav {
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	width: 100%;
+	float: none;
+	overflow: auto;
+	display: inline-block;
+	background: #000000;
+}
+header nav ul {
+	padding: 0px;
+	float: none;
+}
+nav ul li {
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	width: 100%;
+	text-align: center;
+	padding-top: 8px;
+	padding-bottom: 8px;
+}
+.text_column {
+	width: 100%;
+	text-align: left;
+	padding-top: 0px;
+	padding-right: 0px;
+	padding-bottom: 0px;
+	padding-left: 0px;
+}
+.thumbnail {
+	width: 100%;
+}
+.footer_column {
+	width: 100%;
+	margin-top: 0px;
+}
+.parallax {
+	text-align: center;
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	padding-top: 40%;
+	padding-right: 0px;
+	padding-bottom: 0px;
+	padding-left: 0px;
+	width: 100%;
+	font-size: 18px;
+}
+.parallax_description {
+	padding-top: 0px;
+	padding-right: 0px;
+	padding-bottom: 0px;
+	padding-left: 0px;
+	margin-top: 30%;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	float: none;
+	width: 100%;
+	text-align: center;
+}
+.thumbnail {
+	width: 50%;
+}
+.parallax {
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	padding-right: 0px;
+	padding-bottom: 0px;
+	padding-left: 0px;
+	padding-top: 20%;
+}
+.parallax_description {
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	width: 100%;
+	padding-top: 30px;
+}
+.banner {
+	padding-left: 20px;
+	padding-right: 20px;
+}
+.footer_column {
+	width: 100%;
+}
+}
+
+/* Small Desktops */
+@media (min-width : 1024px ) and ( max-width : 1096px ){
+.text_column {
+	width: 100%;
+}
+.thumbnail {
+	width: 50%;
+}
+.text_column {
+	width: 100%;
+	margin-top: 0px;
+	margin-right: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	padding-top: 0px;
+	padding-right: 0px;
+	padding-bottom: 0px;
+	padding-left: 0px;
+}
+.banner {
+	margin-top: 0px;
+	padding-top: 0px;
+}
+}
+
+</style>
+</head>
+<body>
+<!-- Main Container -->
+<div class="container"> 
+  <!-- Navigation -->
+  <!-- new Section -->
+  <section class="avt" id="avt">
+    <blockquote>
+      <blockquote>
+
+<a href="https://www.alliedvision.com/en/">
+<img src="VimbaX_Documentation_Overview_files/Allied Vision_Logo_white.svg" alt="www.alliedvision.com" style="width:150px;height:80px;margin-left: 0px"></a>		  
+ <p class="tagline"><span style="color: red; font-size:120%">// </span>SDK Documentation</p>
+
+          </blockquote>
+        </blockquote>
+    <blockquote>
+      <blockquote>
+        <h2 class="avt_header">Vimba X Documentation</h2>
+      </blockquote>
+    </blockquote>
+  </section>
+  <!-- About Section -->
+  <section class="about" id="about">
+	<img src="VimbaX_Documentation_Overview_files/VimbaX.svg" alt="" width="400" height="200" class="cards"/>  
+    <blockquote>
+      <p class="text_column">
+        <style>
+        </style>
+        Vimba X is our new, fully GenICam-compliant SDK. Additionally to the API documentation, the Developer Guide covers a Migration Guide for Vimba users and a Troubleshooting section.&nbsp;<br>
+        <br>
+
+		<a href="./VimbaX_ReleaseNotes/index.html">Release Notes Vimba X</a><br>		  
+		<a href="./VimbaX_Documentation/index.html">Developer Guide</a><br>		  
+		<a href="./VmbC_Function_Reference/index.html">VmbC API Function Reference</a><br>	  
+		<a href="./VmbCPP_Function_Reference/index.html">VmbCPP API Function Reference</a><br>		  	  
+		
+		 </p>
+    </blockquote>
+  </section>
+</div>
+</body>
+</html>
diff --git a/VimbaX/doc/VimbaX_Documentation_Overview_files/Allied Vision_Logo_white.svg b/VimbaX/doc/VimbaX_Documentation_Overview_files/Allied Vision_Logo_white.svg
new file mode 100644
index 0000000000000000000000000000000000000000..95d4c1f71a70495f378d90b80d38a2042455c4be
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation_Overview_files/Allied Vision_Logo_white.svg	
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 611.9 116.5" style="enable-background:new 0 0 611.9 116.5;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#E42313;}
+	.st1{fill:url(#SVGID_1_);}
+	.st2{fill:url(#SVGID_00000121996245271875424730000008966096739977422005_);}
+	.st3{fill:#FFFFFF;}
+</style>
+<g id="logo">
+	<path class="st0" d="M37.8,32.6C46.4,11.8,61,0,79.6,0c9.5,0,27.6,0,27.6,0c-3,0-7.4,0.2-14.8,16.8c-2.8,6.4-32.6,71.2-37.6,81.9
+		c-4.3,9.2-11.7,16.5-22.9,16.5c-6.3,0-19.2,0-31.9,0L37.8,32.6z"/>
+	<path class="st0" d="M152.4,84.1c-6.6,15.7-22.6,31.1-37.5,31.1c-6,0-16.5,0-29.8,0c7.7,0,15.1-19,15.1-19s33.6-74.1,36.7-80.9
+		c4.3-9.2,13-15.4,21.9-15.4c6.3,0,32.6,0,32.6,0L152.4,84.1z"/>
+	<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="113.544" y1="57.9434" x2="113.544" y2="1.000000e-03">
+		<stop  offset="0.17" style="stop-color:#C5210D"/>
+		<stop  offset="0.3736" style="stop-color:#C3210D"/>
+		<stop  offset="0.537" style="stop-color:#BB210B"/>
+		<stop  offset="0.6866" style="stop-color:#AF2009"/>
+		<stop  offset="0.8279" style="stop-color:#9F1E06"/>
+		<stop  offset="0.9622" style="stop-color:#881A01"/>
+		<stop  offset="1" style="stop-color:#811900"/>
+	</linearGradient>
+	<path class="st1" d="M117.5,57.9c4.4-9.7,8.9-19.6,12.5-27.4c-2.9-6.4-5.4-11.8-6.2-13.7C119.9,8,116.4,0,106.9,0
+		c-2.3,0-5.3,0.4-9.8,7.7c0,6,2.2,10.2,4.9,15.9C104.6,29,111.5,44.4,117.5,57.9z"/>
+	
+		<linearGradient id="SVGID_00000081619911935055955710000004461663236487195071_" gradientUnits="userSpaceOnUse" x1="78.483" y1="57.461" x2="78.483" y2="115.2149">
+		<stop  offset="0.17" style="stop-color:#C5210D"/>
+		<stop  offset="0.3736" style="stop-color:#C3210D"/>
+		<stop  offset="0.537" style="stop-color:#BB210B"/>
+		<stop  offset="0.6866" style="stop-color:#AF2009"/>
+		<stop  offset="0.8279" style="stop-color:#9F1E06"/>
+		<stop  offset="0.9622" style="stop-color:#881A01"/>
+		<stop  offset="1" style="stop-color:#811900"/>
+	</linearGradient>
+	<path style="fill:url(#SVGID_00000081619911935055955710000004461663236487195071_);" d="M95.6,105.5c0.4-3.7-0.6-7-1.8-9.3
+		c-4.1-8-13.7-26.5-20.1-38.8c-4.5,9.8-9,19.6-12.6,27.3c4.5,8.9,8.4,16.6,10,19.6c3.8,7.3,9.5,10.8,13.9,10.8
+		C89,115.1,92.8,110.3,95.6,105.5z"/>
+</g>
+<g id="logotype">
+	<g>
+		<path class="st3" d="M479.2,107c1.8,1.1,3.8,2,6.1,2.8c2.3,0.7,4.7,1.1,7.3,1.1c3,0,5.3-0.6,6.9-1.7c1.7-1.1,2.5-2.8,2.5-4.9
+			c0-1.8-0.6-3.1-1.9-4.1c-1.2-1-2.8-1.7-4.6-2.3c-1.8-0.6-3.9-1.2-6-1.6c-2.2-0.5-4.2-1.2-6-2.1c-1.8-0.9-3.4-2.1-4.6-3.7
+			c-1.2-1.6-1.9-3.7-1.9-6.4c0-1.9,0.4-3.6,1.2-5.2c0.8-1.5,1.8-2.8,3.2-3.9c1.4-1.1,3-1.9,4.9-2.5c1.9-0.6,3.9-0.9,6.1-0.9
+			c2.4,0,4.9,0.3,7.4,0.9c1.1,0.3,2.3,0.5,3.4,1c2.6,1.1,2.9,3.4,2.2,4.6c-0.6,1.3-1.1,2.1-1.1,2.1c-1.8-0.9-3.7-1.7-5.8-2.2
+			c-2.1-0.5-4.1-0.8-6.1-0.8c-2.6,0-4.7,0.6-6.3,1.7c-1.6,1.2-2.3,2.8-2.3,4.9c0,1.8,0.6,3.1,1.9,4c1.2,0.9,2.8,1.7,4.6,2.3
+			c1.8,0.6,3.8,1.1,6,1.6c2.1,0.5,4.1,1.2,6,2.1c1.8,0.9,3.4,2.2,4.6,3.8c1.2,1.6,1.9,3.8,1.9,6.5c0,4-1.4,7-4.3,9.2
+			c-2.9,2.2-6.8,3.3-11.8,3.3c-3.2,0-6.2-0.4-8.9-1.2c-1.2-0.4-2.4-0.8-3.5-1.2c-1.8-0.7-3.3-3-2.1-5
+			C478.7,107.8,479.2,107,479.2,107z"/>
+		<path class="st3" d="M248.1,115.4c0,0-19.1-50.7-20.2-53.5c-1.2-3.3-1.6-4.2-4.5-4.2c-0.2,0-2.2,0-2.4,0c-3.1,0-3.5,0.7-4.8,4.3
+			c-1.1,3.1-20.2,53.5-20.2,53.5s3,0,3.3,0c2.8,0,4.8-1,6.4-5.4c0.4-1,3.1-8.8,3.1-8.8l2-5.5h22.5l2,5.5c0,0,2.7,7.8,3.1,8.8
+			c1.6,4.4,3.7,5.4,6.4,5.4C245.1,115.4,248.1,115.4,248.1,115.4C248.1,115.4,248.1,115.4,248.1,115.4L248.1,115.4z M221.9,64.8h0.2
+			l8.9,24.9h-17.9L221.9,64.8z"/>
+		<path class="st3" d="M337.3,83.1c-0.7-2.3-1.8-4.4-3.2-6.1c-1.4-1.7-3.2-3.1-5.4-4c-2.2-1-4.8-1.4-7.8-1.4c-2.9,0-5.6,0.5-8.1,1.6
+			c-2.5,1.1-4.7,2.5-6.5,4.4c-1.8,1.9-3.2,4.2-4.3,6.9c-1,2.7-1.6,5.8-1.6,9.1c0,7.2,1.8,12.8,5.4,16.8c3.6,4.1,8.7,6.1,15.2,6.1
+			c3,0,5.8-0.5,8.5-1.4c1.4-0.5,1.7-0.6,2.9-1.2c1.5-0.7,3.7-2.9,2.2-5.9l-0.8-1.3c-1.8,1.2-3.7,2.1-5.9,2.9
+			c-2.1,0.8-4.4,1.2-6.7,1.2c-4.7,0-8.2-1.4-10.5-4.3c-2.1-2.6-3.3-6.2-3.6-10.8c0,0,27.2,0,28,0c2.1,0,2.6-0.8,2.8-1.4
+			c0.1-0.4,0.2-1,0.2-1.7c0.1-0.7,0.1-1.3,0.1-1.9C338.4,88,338,85.4,337.3,83.1z M312.1,80.2c2.4-2.3,5.4-3.4,8.9-3.4
+			c2,0,3.7,0.3,5,1c1.4,0.7,2.5,1.6,3.4,2.8c0.9,1.2,1.5,2.5,1.9,4.1c0.4,1.6,0.5,3.2,0.5,5h-24.3C308.1,85.6,309.7,82.5,312.1,80.2
+			z"/>
+		<path class="st3" d="M529,93.5c0-3.3,0.5-6.3,1.6-9c1-2.7,2.5-5,4.3-6.9c1.8-1.9,4-3.4,6.5-4.4c2.5-1,5.2-1.6,8.2-1.6
+			c3,0,5.7,0.5,8.2,1.6c2.5,1,4.7,2.5,6.5,4.4c1.8,1.9,3.2,4.2,4.2,6.9c1,2.7,1.5,5.7,1.5,9c0,3.5-0.5,6.7-1.5,9.5
+			c-1,2.8-2.4,5.2-4.2,7.2c-1.8,2-4,3.5-6.5,4.6c-2.5,1.1-5.3,1.6-8.3,1.6c-3.1,0-5.9-0.5-8.4-1.6c-2.5-1.1-4.7-2.6-6.5-4.6
+			c-1.8-2-3.2-4.4-4.2-7.2C529.4,100.1,529,97,529,93.5z M535.9,93.5c0,2.6,0.3,5,0.9,7.2c0.6,2.1,1.5,4,2.7,5.5
+			c1.2,1.5,2.6,2.7,4.3,3.5c1.7,0.8,3.6,1.2,5.7,1.2c2,0,3.9-0.4,5.6-1.2c1.7-0.8,3.1-2,4.3-3.5c1.2-1.5,2.1-3.4,2.7-5.5
+			c0.6-2.1,0.9-4.5,0.9-7.2c0-2.5-0.3-4.7-1-6.7c-0.7-2-1.6-3.7-2.8-5.2c-1.2-1.4-2.6-2.5-4.3-3.3c-1.6-0.8-3.5-1.2-5.4-1.2
+			c-2,0-3.8,0.4-5.5,1.2c-1.7,0.8-3.1,1.9-4.3,3.3c-1.2,1.4-2.2,3.1-2.8,5.2C536.2,88.7,535.9,91,535.9,93.5z"/>
+		<path class="st3" d="M286.4,63.2c0,1.9,1.5,3.4,3.4,3.4l0,0c1.9,0,3.4-1.5,3.4-3.4v-2.4c0-1.9-1.5-3.4-3.4-3.4l0,0
+			c-1.9,0-3.4,1.5-3.4,3.4V63.2z"/>
+		<path class="st3" d="M463.3,63.2c0,1.9,1.5,3.4,3.4,3.4l0,0c1.9,0,3.4-1.5,3.4-3.4v-2.4c0-1.9-1.5-3.4-3.4-3.4l0,0
+			c-1.9,0-3.4,1.5-3.4,3.4V63.2z"/>
+		<path class="st3" d="M515.1,63.2c0,1.9,1.5,3.4,3.4,3.4l0,0c1.9,0,3.4-1.5,3.4-3.4v-2.4c0-1.9-1.5-3.4-3.4-3.4l0,0
+			c-1.9,0-3.4,1.5-3.4,3.4V63.2z"/>
+		<path class="st3" d="M457.9,57.7c0,0-1.3,0-2.4,0c-0.7,0-1.4,0-1.7,0c-2.2,0-4,1-5.6,5.4c-0.3,0.8-15.9,44.4-15.9,44.4h-0.2
+			c0,0-15.5-43.6-15.8-44.4c-1.6-4.4-3.4-5.4-5.6-5.4c-0.3,0-1,0-1.7,0c-1.2,0-2.4,0-2.4,0h-0.1c0,0,19.8,53.1,20.3,54.5
+			c0.8,2.4,2.2,3.3,3.2,3.3c0.9,0,3.4,0,3.4,0c1.7,0,2.7-0.4,3.8-3C438.3,109.9,457.9,57.7,457.9,57.7L457.9,57.7z"/>
+		<path class="st3" d="M260.4,53.1h-1.1c-3.5,0-5.8,1-5.8,7.2c0,3.1,0,55,0,55s1.5,0,3.4,0c1.9,0,3.4-1.5,3.4-3.4L260.4,53.1z"/>
+		<path class="st3" d="M276.8,53.1h-1.1c-3.5,0-5.8,1-5.8,6.7c0,2.7,0,55.5,0,55.5s1.5,0,3.4,0c1.9,0,3.4-1.5,3.4-3.4L276.8,53.1z"
+			/>
+		<path class="st3" d="M292.2,72.8c-3.4,0-5.7,0.9-5.8,6.4h0l0,36.2c0,0,1.5,0,3.4,0c1.9,0,3.4-1.5,3.4-3.4V72.8H292.2z"/>
+		<path class="st3" d="M469,72.8c-3.4,0-5.7,0.9-5.8,6.4h0l0,36.2c0,0,1.5,0,3.4,0c1.9,0,3.4-1.5,3.4-3.4V72.8H469z"/>
+		<path class="st3" d="M520.8,72.8c-3.4,0-5.7,0.9-5.8,6.4h0l0,36.2c0,0,1.5,0,3.4,0c1.9,0,3.4-1.5,3.4-3.4V72.8H520.8z"/>
+		<path class="st3" d="M611.9,85.4c-0.1-1.8-0.3-3.5-0.7-5.1c-0.5-1.8-1.3-3.4-2.4-4.7c-1.1-1.3-2.5-2.3-4.2-3
+			c-1.7-0.7-3.8-1.1-6.2-1.1c-3,0-5.8,0.7-8.2,2c-2.5,1.3-4.6,2.9-6.4,4.9l-0.1-0.1c-0.4-4.1-2-5.7-4.9-5.7h-1.8h0l0,42.8
+			c0,0,1.5,0,3.4,0c1.9,0,3.4-1.5,3.4-3.4l0-28.1c1.8-2.1,3.7-3.8,5.9-5c2.2-1.2,4.6-1.8,7.2-1.8c3,0,5.1,0.8,6.3,2.5
+			c1.2,1.7,1.9,3.9,1.9,6.7c0,0.6,0,29.1,0,29.1s1.5,0,3.4,0c1.9,0,3.4-1.5,3.4-3.4V85.4z"/>
+		<path class="st3" d="M380.1,53.1c-3.5,0-5.8,1-5.8,7.2c0,0.8,0,14.8,0,17.7c-1.8-1.9-3.8-3.4-6-4.7c-2.3-1.2-4.8-1.9-7.6-1.9
+			c-2.6,0-5,0.5-7.1,1.4c-2.1,1-4,2.4-5.5,4.2c-1.5,1.9-2.7,4.1-3.5,6.8c-0.8,2.7-1.2,5.7-1.2,9.2c0,7.4,1.5,13.1,4.6,17.1
+			c3.1,4,7.3,6,12.7,6c3,0,5.6-0.6,7.8-1.9c2.2-1.2,4.1-2.7,5.9-4.6c0,3.3,1.9,5.4,4,5.4c1.4,0,2.9,0,2.9,0V53.1H380.1z
+			 M374.3,104.6c-1.8,2-3.6,3.6-5.6,4.7c-2,1.1-4.2,1.6-6.5,1.6c-4,0-7-1.6-9-4.7c-2-3.1-3.1-7.4-3.1-12.8c0-5.2,1.1-9.2,3.2-12
+			c2.1-2.8,5.1-4.2,8.9-4.2c2.4,0,4.6,0.6,6.6,1.7c2,1.2,3.8,2.7,5.6,4.6C374.3,90.8,374.3,98.6,374.3,104.6z"/>
+	</g>
+</g>
+</svg>
diff --git a/VimbaX/doc/VimbaX_Documentation_Overview_files/VimbaX.svg b/VimbaX/doc/VimbaX_Documentation_Overview_files/VimbaX.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cd6fc9cb65297cfb251aa6c1dae5092f1ea18a05
--- /dev/null
+++ b/VimbaX/doc/VimbaX_Documentation_Overview_files/VimbaX.svg
@@ -0,0 +1 @@
+<svg id="Ebene_1" data-name="Ebene 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 489.12 68.63"><defs><style>.cls-1,.cls-2{fill:#e60000;}.cls-2{stroke:#e20917;stroke-width:2px;}</style></defs><path class="cls-1" d="M85.05,85.41l32.75,37.34L147,85.41h16.77l-37.54,48H109.91L67,85.41Z" transform="translate(-66.98 -65.47)"/><path class="cls-1" d="M184.68,85.41v48H172.2v-48Z" transform="translate(-66.98 -65.47)"/><path class="cls-1" d="M298.79,85.41c9.38,0,13.68,3.6,13.68,11.38v36.64H298.79V96.79H264v36.64H250.27V96.79H214.63v36.64H201v-48Z" transform="translate(-66.98 -65.47)"/><path class="cls-1" d="M341.81,66.84V84.91h63.8c9.48,0,15.07,5.29,15.17,14.28l.3,20.76c.1,5-2.09,9.49-5.59,11.48-2.3,1.4-7,2-14.47,2H328.34V66.84Zm65.29,53.91V96.89H342v23.86Z" transform="translate(-66.98 -65.47)"/><path class="cls-1" d="M504.15,134.11,471.4,96.77l-29.15,37.34H425.48l37.53-48h16.28l42.93,48Z" transform="translate(-66.98 -65.47)"/><path class="cls-2" d="M524.87,77.05,508.28,66.47h10.44l11.12,7.07,10.58-7.07h9.75L534.72,76.68l18,11.72H541.92l-12.31-8.25-12.4,8.25h-9.39Z" transform="translate(-66.98 -65.47)"/></svg>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/.buildinfo b/VimbaX/doc/VimbaX_ReleaseNotes/.buildinfo
new file mode 100644
index 0000000000000000000000000000000000000000..ab5a787267ee7803c0261916850be5ffd1a7ed91
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: bc7b79007454ef88211777be1d29c2c1
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/ARM.doctree b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/ARM.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..67a5f1bc95a0273065b02abefc2b7021e7b66b32
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/ARM.doctree differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/CSITL.doctree b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/CSITL.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..0f0a5f820a2ce2ede05dad92807ec75de38b0835
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/CSITL.doctree differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/GigETL.doctree b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/GigETL.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..946a194a1b56e2f3c2ff8216eb172f3c1309ab67
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/GigETL.doctree differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/Linux.doctree b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/Linux.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..7a09274a449be6c722ea31e8a82fe110cbc33c01
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/Linux.doctree differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/USBTL.doctree b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/USBTL.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..d8146b91254d6c9886aa45ce030e48dc093c3b0e
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/USBTL.doctree differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/Windows.doctree b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/Windows.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..ff32e0153153b585ad1bb4ee583a2b91830278bc
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/Windows.doctree differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/environment.pickle b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..02880fe12cbddf7faf9989e1c202d2e826972314
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/environment.pickle differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/index.doctree b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/index.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..d927ef034ab1324482083e32c41467e83bc7f58d
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/.doctrees/index.doctree differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/ARM.html b/VimbaX/doc/VimbaX_ReleaseNotes/ARM.html
new file mode 100644
index 0000000000000000000000000000000000000000..f83e9971d65a45a471f46632721efaba7f86f7db
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/ARM.html
@@ -0,0 +1,429 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Vimba X for ARM64 Release Notes &mdash; Vimba X Release Notes 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Vimba GigE TL Release Notes" href="GigETL.html" />
+    <link rel="prev" title="Vimba X for Linux x86_64 Release Notes" href="Linux.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Release Notes
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="Windows.html">Vimba X for Windows Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Linux.html">Vimba X for Linux x86_64 Release Notes</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Vimba X for ARM64 Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#summary">Summary</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#hardware-requirements">Hardware requirements</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#gige-cameras">GigE cameras</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#allied-vision-usb-cameras">Allied Vision USB cameras</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#tested-platforms-and-cameras">Tested platforms and cameras</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#gige-and-usb-cameras">GigE and USB cameras</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#csi-2-cameras">CSI-2 cameras</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#known-issues">Known issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#changes-and-release-history">Changes and release history</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-vimba-x-2023-1">Changes in Vimba X 2023-1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-vimba-x-2022-1">Changes in Vimba X 2022-1</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#id1">Known issues</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="GigETL.html">Vimba GigE TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="USBTL.html">Vimba USB TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="CSITL.html">Vimba CSI TL Release Notes</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Release Notes</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Vimba X for ARM64 Release Notes</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vimba-x-for-arm64-release-notes">
+<h1>Vimba X for ARM64 Release Notes<a class="headerlink" href="#vimba-x-for-arm64-release-notes" title="Permalink to this headline"></a></h1>
+<p>Version: 2023-1</p>
+<section id="summary">
+<h2>Summary<a class="headerlink" href="#summary" title="Permalink to this headline"></a></h2>
+<p>Main changes in this release:</p>
+<ul class="simple">
+<li><p>Vimba X Firmware Updater (new component)</p></li>
+<li><p>Vmb Viewer: Renamed to Vimba X Viewer</p></li>
+<li><p>Vimba X Viewer: Improved Trigger IO tab</p></li>
+<li><p>Vimba X Viewer: Improved IP configuration dialog</p></li>
+</ul>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Transport Layer</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>GigE Transport Layer (VimbaGigETL.cti)</p></td>
+<td><p>1.9.2*</p></td>
+</tr>
+<tr class="row-odd"><td><p>USB Transport Layer (VimbaUSBTL.cti)</p></td>
+<td><p>1.4.3*</p></td>
+</tr>
+<tr class="row-even"><td><p>CSI Transport Layer (VimbaCSITL.cti)</p></td>
+<td><p>1.2.0*</p></td>
+</tr>
+</tbody>
+</table>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>APIs</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbC API (libVmbC.dll)</p></td>
+<td><p>1.0.2*</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbCPP API (libVimbaCPP.dll)</p></td>
+<td><p>1.0.2*</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbPy API</p></td>
+<td><p>1.0.2*</p></td>
+</tr>
+<tr class="row-odd"><td><p>Image Transform Library (libVimbaImageTransform.so)</p></td>
+<td><p>2.0.0</p></td>
+</tr>
+</tbody>
+</table>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Tools</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Vimba X Viewer</p></td>
+<td><p>1.1.0*</p></td>
+</tr>
+<tr class="row-odd"><td><p>Vimba X Firmware Updater</p></td>
+<td><p>2.0.0*</p></td>
+</tr>
+</tbody>
+</table>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Third Party Libraries</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Qt</p></td>
+<td><p>5.15.5</p></td>
+</tr>
+<tr class="row-odd"><td><p>Qwt</p></td>
+<td><p>6.2.3</p></td>
+</tr>
+<tr class="row-even"><td><p>libTIFF</p></td>
+<td><p>4.0.7</p></td>
+</tr>
+<tr class="row-odd"><td><p>GenICam GenAPIModule</p></td>
+<td><p>3.2.0</p></td>
+</tr>
+</tbody>
+</table>
+<p>* Changed in this release of Vimba X</p>
+</section>
+<section id="hardware-requirements">
+<h2>Hardware requirements<a class="headerlink" href="#hardware-requirements" title="Permalink to this headline"></a></h2>
+<p>ARM board with ARMv8-compatible 64-bit processor</p>
+<section id="gige-cameras">
+<h3>GigE cameras<a class="headerlink" href="#gige-cameras" title="Permalink to this headline"></a></h3>
+<p>A built-in Gigabit Ethernet network interface or Gigabit Ethernet network
+card (one or more) is required.</p>
+<p><strong>Note for IP configuration</strong>:
+By default, IP Configuration Mode is set to DHCP.
+You can use the IP Configuration dialog of Vimba X Viewer to apply changes or
+to force the IP address.</p>
+</section>
+<section id="allied-vision-usb-cameras">
+<h3>Allied Vision USB cameras<a class="headerlink" href="#allied-vision-usb-cameras" title="Permalink to this headline"></a></h3>
+<p>A built-in USB 3.0 (or higher) controller for PCI Express bus is required.</p>
+<p>Testing has been performed on host controllers that are based on Delock chip sets and IOI chip sets. The driver may run on host controllers that are based on chip sets from other vendors, too. Nevertheless for best performance we highly recommend Intel chip sets. However, if there are any problems please feel free to contact our Technical Support.</p>
+</section>
+</section>
+<section id="tested-platforms-and-cameras">
+<h2>Tested platforms and cameras<a class="headerlink" href="#tested-platforms-and-cameras" title="Permalink to this headline"></a></h2>
+<section id="gige-and-usb-cameras">
+<h3>GigE and USB cameras<a class="headerlink" href="#gige-and-usb-cameras" title="Permalink to this headline"></a></h3>
+<p>Vimba X was tested with JetPack 5.1.0 (L4T 35.1.0) on:</p>
+<ul class="simple">
+<li><p>AGX Orin Developer Kit</p></li>
+</ul>
+</section>
+<section id="csi-2-cameras">
+<h3>CSI-2 cameras<a class="headerlink" href="#csi-2-cameras" title="Permalink to this headline"></a></h3>
+<p>Vimba X was tested with JetPack 5.1.0 (L4T 35.1.0) on the following NVIDIA Jetson SOMs:</p>
+<ul class="simple">
+<li><p>AGX Orin Developer Kit</p></li>
+<li><p>AGX Xavier Developer Kit</p></li>
+<li><p>Xavier NX Developer Kit</p></li>
+<li><p>Auvidea carrier JNX30-PD with Xavier NX</p></li>
+</ul>
+<p>For supported camera models, the latest known issues, and other useful information, see:
+<a class="reference external" href="https://alliedvision.com/fileadmin/content/documents/products/software/software/Vimba/appnote/Getting_started_with_GenICam_for_CSI.pdf">Getting Started with GenICam for CSI-2</a></p>
+</section>
+</section>
+<section id="installation">
+<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
+<p>To install Vimba X:</p>
+<ul class="simple">
+<li><p>Uncompress the archive with the command tar -xf ./VimbaX.tgz to a
+directory you have writing privileges for like /opt. Under this directory,
+Vimba X will be installed in its own folder. In the following, we will refer
+to this path as [InstallDir].</p></li>
+<li><p>Go to [InstallDir]/cti/and execute the shell
+script *_SetGenTLPath.sh with super user privileges (<code class="docutils literal notranslate"><span class="pre">sudo</span></code>). This
+registers the GENICAM_GENTL64_PATH environment
+variable through a startup script in /etc/profile.d so that every GenICam GenTL
+consumer (such as the examples that ship with the SDK) can access the
+AVT Transport Layers. Please note that this is a
+per-user setting.</p></li>
+<li><p>Reboot your system.</p></li>
+<li><p>If you have issues, see the Developer Guide, section Troubleshooting.</p></li>
+</ul>
+<p><strong>Vimba X Viewer</strong>:
+Vimba X Viewer can be found in[InstallDir]/bin/VmbViewer.</p>
+<p><strong>Examples</strong>:
+Vimba X includes precompiled examples that you can find in:
+[InstallDir]/bin. Uncompiled examples are located in:
+[InstallDir]/api/examples.</p>
+<p><strong>Uninstalling Vimba X</strong>:
+To uninstall Vimba X, go to [InstallDir]/bin and run the uninstall scripts as super user. This prevents any GenTL consumer from loading the
+Vimba Transport Layers. Then remove the
+installation directory.</p>
+</section>
+<section id="known-issues">
+<h2>Known issues<a class="headerlink" href="#known-issues" title="Permalink to this headline"></a></h2>
+<p>The following issues are known:</p>
+<ul class="simple">
+<li><p>When experiencing trouble with image acquisition, try to increase the priority
+of your application with “sudo -E nice -n -20 <command>”.</p></li>
+</ul>
+<p>Camera detection:</p>
+<ul class="simple">
+<li><p>If multiple IP addresses are configured on one physical Ethernet adapter,
+then Vimba X sends GVCP discovery requests only to the last added IP address.
+Therefore, the camera is detected only if its IP address was added last.</p></li>
+</ul>
+<p>Vimba X Viewer:</p>
+<ul class="simple">
+<li><p>With some camera models, the message “Vimba X Viewer is not responding” appears for a few seconds when the camera is opened.</p></li>
+<li><p>If the IP address is changed within the same network, the camera list doesn’t update automatically. Please
+click the Refresh button.</p></li>
+<li><p>Sporadic issue: If a GigE camera was opened and then closed with Vimba X Viewer,
+it is displayed as locked and Vimba X Viewer does not open it again.
+Workaround: Close and open Vimba X Viewer.</p></li>
+<li><p>With CSI-2 cameras, the Trigger IO tab reacts slowly.</p></li>
+<li><p>Goldeye cameras: No inputs and outputs are shown on the Trigger IO tab.</p></li>
+</ul>
+<p>Firmware Updater:</p>
+<ul class="simple">
+<li><p>With some Alvium camera models, the firmware update may take up to 5 minutes.</p></li>
+</ul>
+<p>GigE Transport Layer:</p>
+<ul class="simple">
+<li><p>A change of the available camera access modes cannot be reported for cameras
+in different subnets or with malconfigured IP addresses.</p></li>
+<li><p>Not all ARM boards come with a GigE network interface. When acquiring images
+with only 100 Mbit/s, make sure to set the “StreamBytesPerSecond” feature to
+a reasonable small value (12 400 000). This adjustment is done automatically
+when the camera is connected directly to a 100 Mbit/s interface.</p></li>
+<li><p>GigE cameras may be listed on a wrong Ethernet interface.</p></li>
+<li><p>If many dropped frames occur especially with a small ROI, set GVSP Timeout to a higher value.</p></li>
+</ul>
+<p>Vimba X APIs:</p>
+<ul class="simple">
+<li><p>When API startup and shutdown is performed excessively within the same process,
+camera initialization may fail sporadically, which may cause exceptions.
+We recommend to have only one API session during one process.</p></li>
+<li><p>Load/Save Settings: Not all LUT settings are saved.</p></li>
+</ul>
+<p>Examples:</p>
+<ul class="simple">
+<li><p>If a camera is already open, sometimes a misleading error message occurs (“Bad parameter”).</p></li>
+<li><p>The ListFeatures example does not list all Interface features.</p></li>
+<li><p>Sporadic issue of the AsynchronousGrab and Chunk example: stopping the stream causes an exception.</p></li>
+</ul>
+<p>Camera detection:</p>
+<ul class="simple">
+<li><p>If multiple IP addresses are configured on one physical Ethernet adapter,
+then Vimba X sends GVCP discovery requests only to the last added IP address.
+Therefore, the camera is detected only if its IP address was added last.</p></li>
+</ul>
+<p>CSI-2:</p>
+<ul class="simple">
+<li><p>For the latest known issues, see <a class="reference external" href="https://alliedvision.com/fileadmin/content/documents/products/software/software/Vimba/appnote/Getting_started_with_GenICam_for_CSI.pdf">Getting Started with GenICam for CSI-2</a></p></li>
+<li><p>If your application causes dropped frames, try to increase the number of frame buffers to approximately 7.</p></li>
+<li><p>Switching the camera from GenICam for CSI-2 to V4L2 or vice versa requires rebooting the board.</p></li>
+<li><p>Exposure times greater than approx. 1 second: Stopping acquisition may cause an error. Please close and open the camera to start streaming again.</p></li>
+</ul>
+</section>
+<section id="changes-and-release-history">
+<h2>Changes and release history<a class="headerlink" href="#changes-and-release-history" title="Permalink to this headline"></a></h2>
+<section id="changes-in-vimba-x-2023-1">
+<h3>Changes in Vimba X 2023-1<a class="headerlink" href="#changes-in-vimba-x-2023-1" title="Permalink to this headline"></a></h3>
+<p>VmbC:</p>
+<ul class="simple">
+<li><p>Fixed: Open camera by IP may take 15s</p></li>
+<li><p>Added Exclusive Access mode</p></li>
+</ul>
+<p>VmbCPP:</p>
+<ul class="simple">
+<li><p>Fixed: Open camera by IP may take 15s</p></li>
+</ul>
+<p>VmbPy:</p>
+<ul class="simple">
+<li><p>Fixed: Open camera by IP may take 15s</p></li>
+<li><p>Fixed type hints for Python &lt;=3.7.5 and =3.8.0</p></li>
+<li><p>Updated AccessMode enum for consistency with VmbC</p></li>
+<li><p>Added option for visibility level to list_features.py</p></li>
+</ul>
+<p>USBTL:</p>
+<ul class="simple">
+<li><p>Improved: standard conformity of resend for control channel commands</p></li>
+</ul>
+</section>
+<section id="changes-in-vimba-x-2022-1">
+<h3>Changes in Vimba X 2022-1<a class="headerlink" href="#changes-in-vimba-x-2022-1" title="Permalink to this headline"></a></h3>
+<p>VmbC:</p>
+<ul class="simple">
+<li><p>New API (similar, but not compatible to VimbaC)</p></li>
+</ul>
+<p>VmbCPP:</p>
+<ul class="simple">
+<li><p>New API (similar, but not compatible to VimbaCPP)</p></li>
+</ul>
+<p>VmbPy:</p>
+<ul class="simple">
+<li><p>New API (similar, but not compatible to VimbaPython)</p></li>
+</ul>
+<p>Image Transform:</p>
+<ul class="simple">
+<li><p>Added supported transformations (supports pixel formats of NET cameras)</p></li>
+<li><p>Renamed VmbGetVersion to VmbGetImageTransformVersion</p></li>
+<li><p>VmbSetImageInfoFromString: removed stringLength parameter</p></li>
+</ul>
+<p>Vimba X Viewer:</p>
+<ul class="simple">
+<li><p>New Viewer (based on Vimba Viewer)</p></li>
+<li><p>Additional features: Chunk support, 5x5 Matrix,  Scheduled Action commands</p></li>
+</ul>
+<p>GigETL:</p>
+<ul class="simple">
+<li><p>Display name: AVT GigE TL (instead of Vimba GigE TL)</p></li>
+<li><p>Scheduled Action Commands support</p></li>
+<li><p>Chunk support</p></li>
+<li><p>Pending_Ack support</p></li>
+</ul>
+<p>USBTL:</p>
+<ul class="simple">
+<li><p>Display name: AVT USB TL (instead of Vimba USB TL)</p></li>
+<li><p>No functional changes, version was incremented because of internal changes</p></li>
+</ul>
+</section>
+</section>
+<hr class="docutils" />
+<section id="id1">
+<h2>Known issues<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h2>
+<p>The following issues are known:</p>
+<ul class="simple">
+<li><p>Load/Save settings:
+We recommend using FeaturePersistType Streamable.
+Loading settings may cause errors when FeaturePersistTypes All or NoLUT were selected.</p></li>
+</ul>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="Linux.html" class="btn btn-neutral float-left" title="Vimba X for Linux x86_64 Release Notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="GigETL.html" class="btn btn-neutral float-right" title="Vimba GigE TL Release Notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/CSITL.html b/VimbaX/doc/VimbaX_ReleaseNotes/CSITL.html
new file mode 100644
index 0000000000000000000000000000000000000000..f738b357f6586b94ce3c53a75fda85dcd3a23b1a
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/CSITL.html
@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Vimba CSI TL Release Notes &mdash; Vimba X Release Notes 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="prev" title="Vimba USB TL Release Notes" href="USBTL.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Release Notes
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="Windows.html">Vimba X for Windows Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Linux.html">Vimba X for Linux x86_64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ARM.html">Vimba X for ARM64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="GigETL.html">Vimba GigE TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="USBTL.html">Vimba USB TL Release Notes</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Vimba CSI TL Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#components-and-version-reference">Components and Version Reference</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#supported-hardware-and-driver">Supported hardware and driver</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#correlations-with-other-allied-vision-software-packages">Correlations with other Allied Vision Software Packages</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#known-issues">Known issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#changes-and-release-history">Changes and release history</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-2-0">Changes in version 1.2.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-0-1">Changes in version 1.0.1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-0-0">Changes in version 1.0.0</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Release Notes</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Vimba CSI TL Release Notes</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vimba-csi-tl-release-notes">
+<h1>Vimba CSI TL Release Notes<a class="headerlink" href="#vimba-csi-tl-release-notes" title="Permalink to this headline"></a></h1>
+<p>Version: 1.2.0</p>
+<section id="components-and-version-reference">
+<h2>Components and Version Reference<a class="headerlink" href="#components-and-version-reference" title="Permalink to this headline"></a></h2>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Component</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>CSI-2 Transport Layer (VimbaCSITL.cti)</p></td>
+<td><p>1.2.0</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="supported-hardware-and-driver">
+<h2>Supported hardware and driver<a class="headerlink" href="#supported-hardware-and-driver" title="Permalink to this headline"></a></h2>
+<p>Vimba X was tested with JetPack 5.1.0 (L4T 35.1.0) on the following NVIDIA Jetson SOMs:</p>
+<ul class="simple">
+<li><p>AGX Orin Developer Kit</p></li>
+<li><p>AGX Xavier Developer Kit</p></li>
+<li><p>Xavier NX Developer Kit</p></li>
+<li><p>Auvidea carrier JNX30-PD with Xavier NX</p></li>
+</ul>
+<p>All SOMs were tested with the <a class="reference external" href="https://github.com/alliedvision/linux_nvidia_jetson">driver for Allied Vision Alvium cameras</a>.</p>
+<p>See <a class="reference external" href="https://alliedvision.com/fileadmin/content/documents/products/software/software/Vimba/appnote/Getting_started_with_GenICam_for_CSI.pdf">Getting Started with GenICam for CSI-2</a>
+for supported camera models, the latest known issues, and other useful information.</p>
+</section>
+<section id="installation">
+<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
+<p>Prerequisites: JetPack 5.1.0 (L4T 35.1.0) and
+<a class="reference external" href="https://github.com/alliedvision/linux_nvidia_jetson">driver for Allied Vision Alvium cameras</a></p>
+</section>
+<section id="correlations-with-other-allied-vision-software-packages">
+<h2>Correlations with other Allied Vision Software Packages<a class="headerlink" href="#correlations-with-other-allied-vision-software-packages" title="Permalink to this headline"></a></h2>
+<p>You can install and use Vimba and Vimba X on the same host.</p>
+</section>
+<section id="known-issues">
+<h2>Known issues<a class="headerlink" href="#known-issues" title="Permalink to this headline"></a></h2>
+<ul class="simple">
+<li><p>For the latest known issues, see <a class="reference external" href="https://alliedvision.com/fileadmin/content/documents/products/software/software/Vimba/appnote/Getting_started_with_GenICam_for_CSI.pdf">Getting Started with GenICam for CSI-2</a></p></li>
+<li><p>If your application causes dropped frames, try to increase the number of frame buffers to approximately 7.</p></li>
+<li><p>Switching the camera from GenICam for CSI-2 to V4L2 or vice versa requires rebooting the board.</p></li>
+<li><p>Exposure times greater than approx. 1 second: Stopping acquisition may cause an error. Please close and open the camera to start streaming again.</p></li>
+</ul>
+</section>
+<section id="changes-and-release-history">
+<h2>Changes and release history<a class="headerlink" href="#changes-and-release-history" title="Permalink to this headline"></a></h2>
+<section id="changes-in-version-1-2-0">
+<h3>Changes in version 1.2.0<a class="headerlink" href="#changes-in-version-1-2-0" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Display name: AVT CSI TL (instead of Vimba CSI TL)</p></li>
+<li><p>Fixed: Does not reset allocated buffers to Null</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-0-1">
+<h3>Changes in version 1.0.1<a class="headerlink" href="#changes-in-version-1-0-1" title="Permalink to this headline"></a></h3>
+<p>Support of new streaming format (better performance in Announce mode),
+latest camera firmware required.</p>
+</section>
+<section id="changes-in-version-1-0-0">
+<h3>Changes in version 1.0.0<a class="headerlink" href="#changes-in-version-1-0-0" title="Permalink to this headline"></a></h3>
+<p>Vimba CSITL new release</p>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="USBTL.html" class="btn btn-neutral float-left" title="Vimba USB TL Release Notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/GigETL.html b/VimbaX/doc/VimbaX_ReleaseNotes/GigETL.html
new file mode 100644
index 0000000000000000000000000000000000000000..6d0d339e96564d0e895c2799f1b1b01ffa198142
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/GigETL.html
@@ -0,0 +1,378 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Vimba GigE TL Release Notes &mdash; Vimba X Release Notes 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Vimba USB TL Release Notes" href="USBTL.html" />
+    <link rel="prev" title="Vimba X for ARM64 Release Notes" href="ARM.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Release Notes
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="Windows.html">Vimba X for Windows Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Linux.html">Vimba X for Linux x86_64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ARM.html">Vimba X for ARM64 Release Notes</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Vimba GigE TL Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#components-and-version-reference">Components and Version Reference</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#hardware-requirements">Hardware Requirements</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#correlations-with-other-allied-vision-software-packages">Correlations with other Allied Vision Software Packages</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#known-issues">Known Issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#changes-and-release-history">Changes and release history</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-9-2">Changes in version 1.9.2</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-9-1">Changes in version 1.9.1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-9-0">Changes in version 1.9.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-8-2">Changes in version 1.8.2</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-8-1">Changes in version 1.8.1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-8-0">Changes in version 1.8.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-7-1">Changes in version 1.7.1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-7-0">Changes in version 1.7.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-6-0">Changes in version 1.6.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-5-0">Changes in version 1.5.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-4-4">Changes in version 1.4.4</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-4-2">Changes in version 1.4.2</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-4-1">Changes in version 1.4.1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-3-1">Changes in version 1.3.1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-2-0">Changes in version 1.2.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-1-0">Changes in version 1.1.0</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="USBTL.html">Vimba USB TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="CSITL.html">Vimba CSI TL Release Notes</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Release Notes</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Vimba GigE TL Release Notes</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vimba-gige-tl-release-notes">
+<h1>Vimba GigE TL Release Notes<a class="headerlink" href="#vimba-gige-tl-release-notes" title="Permalink to this headline"></a></h1>
+<p>Version: 1.9.2</p>
+<section id="components-and-version-reference">
+<h2>Components and Version Reference<a class="headerlink" href="#components-and-version-reference" title="Permalink to this headline"></a></h2>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Component</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>GigE Transport Layer (VimbaGigETL.cti)</p></td>
+<td><p>1.9.2</p></td>
+</tr>
+<tr class="row-odd"><td><p>Vimba GigE Filter Driver</p></td>
+<td><p>2.5.9*</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="hardware-requirements">
+<h2>Hardware Requirements<a class="headerlink" href="#hardware-requirements" title="Permalink to this headline"></a></h2>
+<ul class="simple">
+<li><p>PC or laptop with 1 GHz x86 processor or better.</p></li>
+<li><p>ARMv8-compatible 64-bit embedded system, for example, Jetson Xavier.</p></li>
+</ul>
+<p>When using Allied Vision GigE cameras, a built-in Gigabit Ethernet network interface or
+Gigabit Ethernet network card (one or more) is required.</p>
+</section>
+<section id="installation">
+<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
+<p>The Vimba GigE Transport Layer is part of the Vimba X SDK.
+Linux: For instructions on how to install this module, please refer to the
+Vimba X for Linux or ARM64 Release Notes.</p>
+</section>
+<section id="correlations-with-other-allied-vision-software-packages">
+<h2>Correlations with other Allied Vision Software Packages<a class="headerlink" href="#correlations-with-other-allied-vision-software-packages" title="Permalink to this headline"></a></h2>
+<p>You can install and use Vimba and Vimba X on the same host.
+Windows: We recommend using our GigE filter driver with Vimba X or Vimba only.</p>
+</section>
+<section id="known-issues">
+<h2>Known Issues<a class="headerlink" href="#known-issues" title="Permalink to this headline"></a></h2>
+<ul class="simple">
+<li><p>When experiencing trouble with image acquisition on Linux, try to increase the
+priority of your application with “sudo -E nice -n -20 <command>”.</p></li>
+<li><p>A change of the available camera access modes cannot be reported for cameras
+in different subnets or with misconfigured IP addresses.</p></li>
+<li><p>GigE cameras may be listed on a wrong Ethernet interface.</p></li>
+<li><p>If many dropped frames occur especially with a small ROI, set GVSP Timeout to a higher value.</p></li>
+</ul>
+<p>GigE Filter Driver:</p>
+<ul class="simple">
+<li><p>If Vimba and Vimba X are installed on the same system: The Filter Driver provided with Vimba X overwrites Vimba’s Filter Driver. If you still work with Vimba: Use the included Driver Installer to deactivate and activate the correct Filter Driver.</p></li>
+<li><p>Using other filter drivers additionally to the included GigE Filter Driver (including the Filter Driver of the Vimba SDK) may cause issues, even a blue screen.</p></li>
+<li><p>Disabling the Vimba GigE Filter Driver while it is in use might lead to
+unexpected behavior up to blue screen.</p></li>
+</ul>
+</section>
+<section id="changes-and-release-history">
+<h2>Changes and release history<a class="headerlink" href="#changes-and-release-history" title="Permalink to this headline"></a></h2>
+<section id="changes-in-version-1-9-2">
+<h3>Changes in version 1.9.2<a class="headerlink" href="#changes-in-version-1-9-2" title="Permalink to this headline"></a></h3>
+<p>GigETL</p>
+<ul class="simple">
+<li><p>Fixed: Vimba X freezes if the NIC is disabled during image acquisition.</p></li>
+</ul>
+<p>GigE Filter Driver:</p>
+<ul class="simple">
+<li><p>Supports extended status codes packet resend</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-9-1">
+<h3>Changes in version 1.9.1<a class="headerlink" href="#changes-in-version-1-9-1" title="Permalink to this headline"></a></h3>
+<p>GigETL</p>
+<ul class="simple">
+<li><p>Display name: AVT GigE TL (instead of Vimba GigE TL)</p></li>
+<li><p>Scheduled Action Commands support</p></li>
+<li><p>Chunk support</p></li>
+</ul>
+<p>Filter Driver</p>
+<ul class="simple">
+<li><p>Chunk Support</p></li>
+<li><p>Bug fixes</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-9-0">
+<h3>Changes in version 1.9.0<a class="headerlink" href="#changes-in-version-1-9-0" title="Permalink to this headline"></a></h3>
+<p>GigETL</p>
+<ul class="simple">
+<li><p>Changed behaviour of endianess handling (values must match host endianness in little-endian),
+for better compatibility with third-party software.
+Affected features that now have a changed byte order:</p>
+<ul>
+<li><p>Config Mode</p></li>
+<li><p>IP-related features including MulticastIPAddress</p></li>
+<li><p>Action Commands</p></li>
+</ul>
+</li>
+<li><p>New feature DeviceUpdateTimeout (only applicable of GigE discovery is switched to Broadcast)</p></li>
+<li><p>New GVSPMaxLookBack default value (0 instead of 1) for improved packet resend handling</p></li>
+<li><p>Fixed: High memory usage during performance bottleneck (Nonpaged pool growing with multiple GigE cameras)</p></li>
+<li><p>Fixed: Action commands caused an error message in the console log</p></li>
+<li><p>Fixed: MulticastIPAdress range, better compatibility with third-party software</p></li>
+</ul>
+<p>GigE Filter Driver</p>
+<ul class="simple">
+<li><p>Reduced memory allocations</p></li>
+<li><p>Hidden statistics</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-8-2">
+<h3>Changes in version 1.8.2<a class="headerlink" href="#changes-in-version-1-8-2" title="Permalink to this headline"></a></h3>
+<p>GigETL and GigE Filter Driver</p>
+<ul class="simple">
+<li><p>Fixed: Vimba Viewer did not show single frame acquisitions (5 GigE)</p></li>
+<li><p>Improved timeout handling (5 GigE)</p></li>
+<li><p>Fixed limitations of certain GVSPPacketSize values</p></li>
+<li><p>New GigETL feature: GVSPHostReceiveBufferSize (SO_RCVBUF,  usable with
+the socket driver only) replaces GVSPHostReceiveBuffers (which is still
+usable in existing applications).</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-8-1">
+<h3>Changes in version 1.8.1<a class="headerlink" href="#changes-in-version-1-8-1" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Prepared for use with 5 GigE Vision cameras</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-8-0">
+<h3>Changes in version 1.8.0<a class="headerlink" href="#changes-in-version-1-8-0" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Standard-compliant ForceIP features instead of Allied Vision custom features</p></li>
+<li><p>Prepared for use with extended IDs</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-7-1">
+<h3>Changes in version 1.7.1<a class="headerlink" href="#changes-in-version-1-7-1" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Improved resend handling</p></li>
+<li><p>By default, packet resends are enabled</p></li>
+<li><p>Other bug fixes</p></li>
+</ul>
+<p>Vimba Driver Installer</p>
+<ul class="simple">
+<li><p>Internal changes</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-7-0">
+<h3>Changes in version 1.7.0<a class="headerlink" href="#changes-in-version-1-7-0" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>GenTL 1.5 support</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-6-0">
+<h3>Changes in version 1.6.0<a class="headerlink" href="#changes-in-version-1-6-0" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Fixed: GVSPPacketSize now updates as expected (Linux)</p></li>
+<li><p>Other minor bug fixes</p></li>
+</ul>
+<p>Vimba GigE Filter Driver</p>
+<ul class="simple">
+<li><p>Windows 10: Improved compatibility and performance with third-party filter drivers.</p></li>
+</ul>
+<p>Installer and driver</p>
+<ul class="simple">
+<li><p>New certificates for installer and driver (Windows 7, Windows 8, and Windows 8.1)</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-5-0">
+<h3>Changes in version 1.5.0<a class="headerlink" href="#changes-in-version-1-5-0" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Added functionality for Action Commands</p></li>
+<li><p>Fixed sending packet request after invalid timeout on Linux</p></li>
+<li><p>The parameter BUFFER_INFO_DELIVERED_IMAGEHEIGHT is filled correctly</p></li>
+<li><p>VimbaGigEFilter (Windows 10 x64/x86 only):</p>
+<ul>
+<li><p>Fixed incompatibility with Intel 10 Gbit Ethernet cards (520/540/710)</p></li>
+<li><p>Changed buffer list handling, driver removes streaming packets from buffer list:</p>
+<ul>
+<li><p>Decreases system load formerly caused by stream packet duplication</p></li>
+<li><p>Prevents additional system load when firewall is enabled</p></li>
+<li><p>Does not allow Wireshark to see stream packets</p></li>
+</ul>
+</li>
+<li><p>Packet resend system load minimized</p></li>
+<li><p>Fixed missing filterclass in driver inf</p></li>
+<li><p>Fixed double counting of received packets</p></li>
+<li><p>Fixed incompatibility with wireless network cards (removed binding to WAN)</p></li>
+<li><p>Fixed incompatibilities with VPN connections (filter now optional)</p></li>
+</ul>
+</li>
+</ul>
+</section>
+<section id="changes-in-version-1-4-4">
+<h3>Changes in version 1.4.4<a class="headerlink" href="#changes-in-version-1-4-4" title="Permalink to this headline"></a></h3>
+<p>-Bug fixes</p>
+</section>
+<section id="changes-in-version-1-4-2">
+<h3>Changes in version 1.4.2<a class="headerlink" href="#changes-in-version-1-4-2" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Bug fixes</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-4-1">
+<h3>Changes in version 1.4.1<a class="headerlink" href="#changes-in-version-1-4-1" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Solved cases where network problems led to a lost camera</p></li>
+<li><p>Fixed range of GevHeartbeatInterval and GevHeartbeatTimeout</p></li>
+<li><p>Bug fixes for multi-camera usage and missing cleanup</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-3-1">
+<h3>Changes in version 1.3.1<a class="headerlink" href="#changes-in-version-1-3-1" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Support of GenICam GenTL standard 1.3</p></li>
+<li><p>New GenTL SFNC feature categories BufferHandlingMode and StreamInformation</p></li>
+<li><p>Separate features for heartbeat timeout and heartbeat interval</p></li>
+<li><p>Adjustable device discovery waiting time</p></li>
+<li><p>Fixed issues with alike serial numbers</p></li>
+<li><p>Fixed issues with many network interfaces on Linux</p></li>
+<li><p>Small bug-fixes to the Driver Installer</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-2-0">
+<h3>Changes in version 1.2.0<a class="headerlink" href="#changes-in-version-1-2-0" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Improved performance in case of many events</p></li>
+<li><p>Restriction to eight cameras removed</p></li>
+<li><p>Corrected Heartbeat feature</p></li>
+<li><p>Fixed support for small packets</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-1-0">
+<h3>Changes in version 1.1.0<a class="headerlink" href="#changes-in-version-1-1-0" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Added feature DiscoveryBroadcastMode to the Interface module</p></li>
+<li><p>Changed the documentation format to PDF</p></li>
+<li><p>Slight changes for Linux compatibility</p></li>
+</ul>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="ARM.html" class="btn btn-neutral float-left" title="Vimba X for ARM64 Release Notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="USBTL.html" class="btn btn-neutral float-right" title="Vimba USB TL Release Notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/Linux.html b/VimbaX/doc/VimbaX_ReleaseNotes/Linux.html
new file mode 100644
index 0000000000000000000000000000000000000000..b95e969025ec7b84da465eb2d8887d48f081ba1d
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/Linux.html
@@ -0,0 +1,372 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Vimba X for Linux x86_64 Release Notes &mdash; Vimba X Release Notes 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Vimba X for ARM64 Release Notes" href="ARM.html" />
+    <link rel="prev" title="Vimba X for Windows Release Notes" href="Windows.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Release Notes
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="Windows.html">Vimba X for Windows Release Notes</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Vimba X for Linux x86_64 Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#summary">Summary</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#hardware-requirements">Hardware requirements</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#gige-cameras">GigE cameras</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#allied-vision-usb-cameras">Allied Vision USB cameras</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#tested-platforms-and-cameras">Tested platforms and cameras</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#known-issues">Known issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#changes-and-release-history">Changes and release history</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-vimba-x-2023-1">Changes in Vimba X 2023-1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-vimba-x-2022-1">Changes in Vimba X 2022-1</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="ARM.html">Vimba X for ARM64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="GigETL.html">Vimba GigE TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="USBTL.html">Vimba USB TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="CSITL.html">Vimba CSI TL Release Notes</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Release Notes</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Vimba X for Linux x86_64 Release Notes</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vimba-x-for-linux-x86-64-release-notes">
+<h1>Vimba X for Linux x86_64 Release Notes<a class="headerlink" href="#vimba-x-for-linux-x86-64-release-notes" title="Permalink to this headline"></a></h1>
+<p>Version: 2023-1</p>
+<section id="summary">
+<h2>Summary<a class="headerlink" href="#summary" title="Permalink to this headline"></a></h2>
+<p>Main changes in this release:</p>
+<ul class="simple">
+<li><p>Vimba X Firmware Updater (new component)</p></li>
+<li><p>Vmb Viewer: Renamed to Vimba X Viewer</p></li>
+<li><p>Vimba X Viewer: Improved Trigger IO tab</p></li>
+<li><p>Vimba X Viewer: Improved IP configuration dialog</p></li>
+</ul>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Transport Layer</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>GigE Transport Layer (VimbaGigETL.cti)</p></td>
+<td><p>1.9.2*</p></td>
+</tr>
+<tr class="row-odd"><td><p>USB Transport Layer (VimbaUSBTL.cti)</p></td>
+<td><p>1.4.3*</p></td>
+</tr>
+</tbody>
+</table>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>APIs</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbC API (libVmbC.so)</p></td>
+<td><p>1.0.2*</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbCPP API (libVmbCPP.so)</p></td>
+<td><p>1.0.2*</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbPy API</p></td>
+<td><p>1.0.2*</p></td>
+</tr>
+<tr class="row-odd"><td><p>Image Transform Library (libVmbImageTransform.so)</p></td>
+<td><p>2.0.0</p></td>
+</tr>
+</tbody>
+</table>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Tools</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Vimba X Viewer</p></td>
+<td><p>1.1.0*</p></td>
+</tr>
+<tr class="row-odd"><td><p>Vimba X Firmware Updater</p></td>
+<td><p>2.0.0*</p></td>
+</tr>
+</tbody>
+</table>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Third Party Libraries</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Qt</p></td>
+<td><p>5.15.5</p></td>
+</tr>
+<tr class="row-odd"><td><p>Qwt</p></td>
+<td><p>6.2.3</p></td>
+</tr>
+<tr class="row-even"><td><p>libTIFF</p></td>
+<td><p>4.0.7</p></td>
+</tr>
+<tr class="row-odd"><td><p>GenICam GenAPIModule</p></td>
+<td><p>3.2.0</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="hardware-requirements">
+<h2>Hardware requirements<a class="headerlink" href="#hardware-requirements" title="Permalink to this headline"></a></h2>
+<p>PC or laptop with 64-bit x86 processor or better.</p>
+<section id="gige-cameras">
+<h3>GigE cameras<a class="headerlink" href="#gige-cameras" title="Permalink to this headline"></a></h3>
+<p>A built-in Gigabit Ethernet network interface or Gigabit Ethernet network
+card (one or more) is required.</p>
+<p><strong>Note for IP configuration</strong>:
+By default, IP Configuration Mode is set to DHCP.
+You can use the IP Configuration dialog of Vimba X Viewer to apply changes or
+to force the IP address.</p>
+</section>
+<section id="allied-vision-usb-cameras">
+<h3>Allied Vision USB cameras<a class="headerlink" href="#allied-vision-usb-cameras" title="Permalink to this headline"></a></h3>
+<p>A built-in USB 3.0 (or higher) controller for PCI Express bus is required.</p>
+<p>Testing has been performed on host controllers that are based on Delock chip sets and IOI chip sets. The driver may run on host controllers that are based on chip sets from other vendors, too. Nevertheless for best performance we highly recommend Intel chip sets. However, if there are any problems please feel free to contact our Technical Support.</p>
+</section>
+</section>
+<section id="tested-platforms-and-cameras">
+<h2>Tested platforms and cameras<a class="headerlink" href="#tested-platforms-and-cameras" title="Permalink to this headline"></a></h2>
+<p>Vimba X was tested with:</p>
+<ul class="simple">
+<li><p>Ubuntu 22.04 LTS</p></li>
+<li><p>Debian 11.6</p></li>
+</ul>
+</section>
+<section id="installation">
+<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
+<p>To install Vimba X:</p>
+<ul class="simple">
+<li><p>Uncompress the archive with the command tar -xf ./VimbaX.tgz to a
+directory you have writing privileges for like /opt. Under this directory,
+Vimba X will be installed in its own folder. In the following, we will refer
+to this path as [InstallDir].</p></li>
+<li><p>Go to [InstallDir]/cti/and execute the shell
+script *_SetGenTLPath.sh with super user privileges (<code class="docutils literal notranslate"><span class="pre">sudo</span></code>). This
+registers the GENICAM_GENTL64_PATH environment
+variable through a startup script in /etc/profile.d so that every GenICam GenTL
+consumer (such as the examples that ship with the SDK) can access the
+Vimba Gigabit Ethernet and USB Transport Layers. Please note that this is a
+per-user setting.</p></li>
+<li><p>Reboot your system.</p></li>
+<li><p>If you have issues, see the Developer Guide, section Troubleshooting.</p></li>
+</ul>
+<p><strong>Vimba X Viewer</strong>:
+Vimba X Viewer can be found in[InstallDir]/bin/VmbViewer.</p>
+<p><strong>Examples</strong>:
+Vimba X includes precompiled examples that you can find in:
+[InstallDir]/bin. Uncompiled examples are located in:
+[InstallDir]/api/examples.</p>
+<p><strong>Uninstalling Vimba X</strong>:
+To uninstall Vimba X, go to [InstallDir]/bin and run the uninstall scripts
+as super user. This prevents any GenTL consumer from loading the
+Vimba Transport Layers. Then remove the
+installation directory.</p>
+</section>
+<section id="known-issues">
+<h2>Known issues<a class="headerlink" href="#known-issues" title="Permalink to this headline"></a></h2>
+<p>The following issues are known:</p>
+<ul class="simple">
+<li><p>When experiencing trouble with image acquisition, try to increase the priority
+of your application with “sudo -E nice -n -20 <command>”.</p></li>
+</ul>
+<p>Camera detection:</p>
+<ul class="simple">
+<li><p>If multiple IP addresses are configured on one physical Ethernet adapter,
+then Vimba X sends GVCP discovery requests only to the last added IP address.
+Therefore, the camera is detected only if its IP address was added last.</p></li>
+</ul>
+<p>Vimba X Viewer:</p>
+<ul class="simple">
+<li><p>With some camera models, the message “Vimba X Viewer is not responding” appears for a few seconds when the camera is opened.</p></li>
+<li><p>If the IP address is changed within the same network, the camera list doesn’t update automatically. Please
+click the Refresh button.</p></li>
+<li><p>Sporadic issue: If a GigE camera was opened and then closed with Vimba X Viewer,
+it is displayed as locked and Vimba X Viewer does not open it again.
+Workaround: Close and open Vimba X Viewer.</p></li>
+<li><p>Goldeye cameras: No inputs and outputs are shown on the Trigger IO tab.</p></li>
+</ul>
+<p>Firmware Updater:</p>
+<ul class="simple">
+<li><p>With some Alvium camera models, the firmware update may take up to 5 minutes.</p></li>
+</ul>
+<p>Vimba X APIs:</p>
+<ul class="simple">
+<li><p>When API startup and shutdown is performed excessively within the same process,
+camera initialization may fail sporadically, which may cause exceptions.
+We recommend to have only one API session during one process.</p></li>
+<li><p>Load/Save Settings: Not all LUT settings are saved.</p></li>
+</ul>
+<p>GigE Transport Layer:</p>
+<ul class="simple">
+<li><p>GigE cameras may be listed on a wrong Ethernet interface.</p></li>
+<li><p>If many dropped frames occur especially with a small ROI, set GVSP Timeout to a higher value.</p></li>
+</ul>
+<p>Examples:</p>
+<ul class="simple">
+<li><p>If a camera is already open, sometimes a misleading error message occurs (“Bad parameter”).</p></li>
+<li><p>The ListFeatures example does not list all Interface features.</p></li>
+<li><p>Sporadic issue of the AsynchronousGrab and Chunk example: stopping the stream causes an exception.</p></li>
+</ul>
+</section>
+<section id="changes-and-release-history">
+<h2>Changes and release history<a class="headerlink" href="#changes-and-release-history" title="Permalink to this headline"></a></h2>
+<section id="changes-in-vimba-x-2023-1">
+<h3>Changes in Vimba X 2023-1<a class="headerlink" href="#changes-in-vimba-x-2023-1" title="Permalink to this headline"></a></h3>
+<p>VmbC:</p>
+<ul class="simple">
+<li><p>Fixed: Open camera by IP may take 15s</p></li>
+<li><p>Added Exclusive Access mode</p></li>
+</ul>
+<p>VmbCPP:</p>
+<ul class="simple">
+<li><p>Fixed: Open camera by IP may take 15s</p></li>
+</ul>
+<p>VmbPy:</p>
+<ul class="simple">
+<li><p>Fixed: Open camera by IP may take 15s</p></li>
+<li><p>Fixed type hints for Python &lt;=3.7.5 and =3.8.0</p></li>
+<li><p>Updated AccessMode enum for consistency with VmbC</p></li>
+<li><p>Added option for visibility level to list_features.py</p></li>
+</ul>
+</section>
+<section id="changes-in-vimba-x-2022-1">
+<h3>Changes in Vimba X 2022-1<a class="headerlink" href="#changes-in-vimba-x-2022-1" title="Permalink to this headline"></a></h3>
+<p>VmbC:</p>
+<ul class="simple">
+<li><p>New API (similar, but not compatible to VimbaC)</p></li>
+</ul>
+<p>VmbCPP:</p>
+<ul class="simple">
+<li><p>New API (similar, but not compatible to VimbaCPP)</p></li>
+</ul>
+<p>VmbPy:</p>
+<ul class="simple">
+<li><p>New API (similar, but not compatible to VimbaPython)</p></li>
+</ul>
+<p>Image Transform:</p>
+<ul class="simple">
+<li><p>Added supported transformations (supports pixel formats of NET cameras)</p></li>
+<li><p>Renamed VmbGetVersion to VmbGetImageTransformVersion</p></li>
+<li><p>VmbSetImageInfoFromString: removed stringLength parameter</p></li>
+</ul>
+<p>Vimba X Viewer:</p>
+<ul class="simple">
+<li><p>New Viewer (based on Vimba Viewer)</p></li>
+<li><p>Additional features: Chunk support, 5x5 Matrix, Scheduled Action commands</p></li>
+</ul>
+<p>GigETL:</p>
+<ul class="simple">
+<li><p>Display name: AVT GigE TL (instead of Vimba GigE TL)</p></li>
+<li><p>Scheduled Action Commands support</p></li>
+<li><p>Chunk support</p></li>
+</ul>
+<p>USBTL:</p>
+<ul class="simple">
+<li><p>Improved: standard conformity of resend for control channel commands</p></li>
+<li><p>Display name: AVT USB TL (instead of Vimba USB TL)</p></li>
+</ul>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="Windows.html" class="btn btn-neutral float-left" title="Vimba X for Windows Release Notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="ARM.html" class="btn btn-neutral float-right" title="Vimba X for ARM64 Release Notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/USBTL.html b/VimbaX/doc/VimbaX_ReleaseNotes/USBTL.html
new file mode 100644
index 0000000000000000000000000000000000000000..1f39566f0ee654f1b592a610691899027f0f0a2f
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/USBTL.html
@@ -0,0 +1,272 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Vimba USB TL Release Notes &mdash; Vimba X Release Notes 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Vimba CSI TL Release Notes" href="CSITL.html" />
+    <link rel="prev" title="Vimba GigE TL Release Notes" href="GigETL.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Release Notes
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="Windows.html">Vimba X for Windows Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Linux.html">Vimba X for Linux x86_64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ARM.html">Vimba X for ARM64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="GigETL.html">Vimba GigE TL Release Notes</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Vimba USB TL Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#components-and-version-reference">Components and Version Reference</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#hardware-requirements">Hardware Requirements</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#correlations-with-other-allied-vision-software-packages">Correlations with other Allied Vision Software Packages</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#known-issues">Known issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#changes-and-release-history">Changes and release history</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-4-3">Changes in version 1.4.3</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-4-2">Changes in version 1.4.2</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-4-1">Changes in version 1.4.1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-4-0">Changes in version 1.4.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-3-0">Changes in version 1.3.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-2-2">Changes in version 1.2.2</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-2-1">Changes in version 1.2.1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-2-0">Changes in version 1.2.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-1-1">Changes in version 1.1.1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-1-0">Changes in version 1.1.0</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-version-1-0-3">Changes in version 1.0.3</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="CSITL.html">Vimba CSI TL Release Notes</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Release Notes</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Vimba USB TL Release Notes</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vimba-usb-tl-release-notes">
+<h1>Vimba USB TL Release Notes<a class="headerlink" href="#vimba-usb-tl-release-notes" title="Permalink to this headline"></a></h1>
+<p>Version: 1.4.3</p>
+<section id="components-and-version-reference">
+<h2>Components and Version Reference<a class="headerlink" href="#components-and-version-reference" title="Permalink to this headline"></a></h2>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Component</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>USB Transport Layer (VimbaUSBTL.cti)</p></td>
+<td><p>1.4.3</p></td>
+</tr>
+<tr class="row-odd"><td><p>Vimba USB Driver (Windows only)</p></td>
+<td><p>1.0.0</p></td>
+</tr>
+<tr class="row-even"><td><p>Vimba Driver Installer (VimbaDriverInstaller.exe)</p></td>
+<td><p>2.0.0</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="hardware-requirements">
+<h2>Hardware Requirements<a class="headerlink" href="#hardware-requirements" title="Permalink to this headline"></a></h2>
+<ul>
+<li><p>PC or laptop with 1 GHz x86 processor or better.</p></li>
+<li><p>ARMv8-compatible 64-bit embedded system, for example, Jetson Xavier.</p></li>
+<li><p>Additionally, a built-in USB 3.0 (or higher) controller for PCI Express bus is required.</p>
+<p>Remark:
+Testing has been performed on host controllers that are based on Delock chip sets and IOI chip sets. The driver may run on host controllers that
+are based on chip sets from other vendors, too. Nevertheless for best
+performance we highly recommend Intel chip sets.
+However, if there are any problems please feel free to contact our Technical
+Support.</p>
+</li>
+</ul>
+</section>
+<section id="installation">
+<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
+<p>The Vimba USB Transport Layer is part of the Vimba X SDK. Linux: For instructions on how to install this module, please refer to the
+Vimba X for Linux or ARM64 Release Notes.</p>
+</section>
+<section id="correlations-with-other-allied-vision-software-packages">
+<h2>Correlations with other Allied Vision Software Packages<a class="headerlink" href="#correlations-with-other-allied-vision-software-packages" title="Permalink to this headline"></a></h2>
+<p>You can install and use Vimba and Vimba X on the same host.</p>
+</section>
+<section id="known-issues">
+<h2>Known issues<a class="headerlink" href="#known-issues" title="Permalink to this headline"></a></h2>
+<p>MSI Uninstallation by new Windows 10 dialog “Apps&amp;Features” is not supported by now.
+Please use the old “Programs and Features” dialog.</p>
+</section>
+<section id="changes-and-release-history">
+<h2>Changes and release history<a class="headerlink" href="#changes-and-release-history" title="Permalink to this headline"></a></h2>
+<section id="changes-in-version-1-4-3">
+<h3>Changes in version 1.4.3<a class="headerlink" href="#changes-in-version-1-4-3" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Improved: standard conformity of resend for control channel commands</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-4-2">
+<h3>Changes in version 1.4.2<a class="headerlink" href="#changes-in-version-1-4-2" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Display name: AVT USB TL (instead of Vimba USB TL)</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-4-1">
+<h3>Changes in version 1.4.1<a class="headerlink" href="#changes-in-version-1-4-1" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Fixed: software trigger for multiple cameras (error applied to Windows only)</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-4-0">
+<h3>Changes in version 1.4.0<a class="headerlink" href="#changes-in-version-1-4-0" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Fixed: Reset cameras streaming state when opened (Endpoint Halt)</p></li>
+<li><p>New: Zero-Copy for Linux/libusb for better performance</p></li>
+<li><p>Updated 3rd-party libraries</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-3-0">
+<h3>Changes in version 1.3.0<a class="headerlink" href="#changes-in-version-1-3-0" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Increased default MaxTransferSize value for better performance with current Linux versions</p></li>
+<li><p>Improved camera detection on Linux systems (plugin event handling)</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-2-2">
+<h3>Changes in version 1.2.2<a class="headerlink" href="#changes-in-version-1-2-2" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Solved conflicts between customers’ boost version and the internally used version</p></li>
+<li><p>Other internal bug fixes</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-2-1">
+<h3>Changes in version 1.2.1<a class="headerlink" href="#changes-in-version-1-2-1" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>Improved visibility of USB camera status</p></li>
+<li><p>Other bug fixes</p></li>
+</ul>
+<p>Driver Installer:</p>
+<ul class="simple">
+<li><p>The version was incremented to 2.0.0 because of internal changes
+(no functional changes for the user)</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-2-0">
+<h3>Changes in version 1.2.0<a class="headerlink" href="#changes-in-version-1-2-0" title="Permalink to this headline"></a></h3>
+<ul class="simple">
+<li><p>GenTL 1.5 support</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-1-1">
+<h3>Changes in version 1.1.1<a class="headerlink" href="#changes-in-version-1-1-1" title="Permalink to this headline"></a></h3>
+<p>USB Transport Layer</p>
+<ul class="simple">
+<li><p>Minor bug fixes</p></li>
+</ul>
+<p>Installer and driver</p>
+<ul class="simple">
+<li><p>New certificates for installer and driver (Windows 7, Windows 8, and Windows 8.1)</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-1-0">
+<h3>Changes in version 1.1.0<a class="headerlink" href="#changes-in-version-1-1-0" title="Permalink to this headline"></a></h3>
+<p>USB Transport Layer</p>
+<ul class="simple">
+<li><p>Minor bug fixes</p></li>
+<li><p>Added transport layer XML file caching</p></li>
+</ul>
+</section>
+<section id="changes-in-version-1-0-3">
+<h3>Changes in version 1.0.3<a class="headerlink" href="#changes-in-version-1-0-3" title="Permalink to this headline"></a></h3>
+<p>USB Transport Layer</p>
+<ul class="simple">
+<li><p>Minor bug fixes</p></li>
+<li><p>Interface features DeviceDriverPath and DeviceLocation added</p></li>
+</ul>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="GigETL.html" class="btn btn-neutral float-left" title="Vimba GigE TL Release Notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="CSITL.html" class="btn btn-neutral float-right" title="Vimba CSI TL Release Notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/Windows.html b/VimbaX/doc/VimbaX_ReleaseNotes/Windows.html
new file mode 100644
index 0000000000000000000000000000000000000000..fc42771f4e65bd13ba51d517b2430c58ecc6725c
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/Windows.html
@@ -0,0 +1,407 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Vimba X for Windows Release Notes &mdash; Vimba X Release Notes 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Vimba X for Linux x86_64 Release Notes" href="Linux.html" />
+    <link rel="prev" title="Vimba X Release Notes" href="index.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Release Notes
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Vimba X for Windows Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#summary">Summary</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#components-and-version-reference">Components and version reference</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#hardware-requirements">Hardware requirements</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#gige-cameras">GigE cameras</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#allied-vision-usb-cameras">Allied Vision USB cameras</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#correlations-with-other-allied-vision-software-packages">Correlations with other Allied Vision Software Packages</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#supported-operating-systems">Supported operating systems</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#known-issues">Known issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#changes-and-release-history">Changes and release history</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-vimba-x-2023-1">Changes in Vimba X 2023-1</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#changes-in-vimba-x-2022-1">Changes in Vimba X 2022-1</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="Linux.html">Vimba X for Linux x86_64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ARM.html">Vimba X for ARM64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="GigETL.html">Vimba GigE TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="USBTL.html">Vimba USB TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="CSITL.html">Vimba CSI TL Release Notes</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Release Notes</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Vimba X for Windows Release Notes</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vimba-x-for-windows-release-notes">
+<h1>Vimba X for Windows Release Notes<a class="headerlink" href="#vimba-x-for-windows-release-notes" title="Permalink to this headline"></a></h1>
+<p>Version: 2023-1</p>
+<section id="summary">
+<h2>Summary<a class="headerlink" href="#summary" title="Permalink to this headline"></a></h2>
+<p>Main changes in this release:</p>
+<ul class="simple">
+<li><p>Vimba X Firmware Updater (new component)</p></li>
+<li><p>Vmb Viewer: Renamed to Vimba X Viewer</p></li>
+<li><p>Vimba X Viewer: Improved Trigger IO tab</p></li>
+<li><p>Vimba X Viewer: Improved IP configuration dialog</p></li>
+<li><p>Vimba Driver Installer: Renamed to Vimba X Driver Installer</p></li>
+</ul>
+</section>
+<section id="components-and-version-reference">
+<h2>Components and version reference<a class="headerlink" href="#components-and-version-reference" title="Permalink to this headline"></a></h2>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Transport Layer</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>GigE Transport Layer (VimbaGigETL.cti)</p></td>
+<td><p>1.9.2*</p></td>
+</tr>
+<tr class="row-odd"><td><p>USB Transport Layer (VimbaUSBTL.cti)</p></td>
+<td><p>1.4.3*</p></td>
+</tr>
+</tbody>
+</table>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>APIs</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>VmbC API (VmbC.dll)</p></td>
+<td><p>1.0.2*</p></td>
+</tr>
+<tr class="row-odd"><td><p>VmbCPP API (VmbCPP.dll)</p></td>
+<td><p>1.0.2*</p></td>
+</tr>
+<tr class="row-even"><td><p>VmbPy API</p></td>
+<td><p>1.0.2*</p></td>
+</tr>
+<tr class="row-odd"><td><p>Image Transform Library (VmbImageTransform.dll)</p></td>
+<td><p>2.0.0</p></td>
+</tr>
+</tbody>
+</table>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Drivers</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Vimba X GigE Filter Driver</p></td>
+<td><p>2.5.9*</p></td>
+</tr>
+<tr class="row-odd"><td><p>Vimba X USB Driver</p></td>
+<td><p>1.0.0</p></td>
+</tr>
+</tbody>
+</table>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Tools</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Vimba X Viewer</p></td>
+<td><p>1.1.0*</p></td>
+</tr>
+<tr class="row-odd"><td><p>Vimba X Driver Installer</p></td>
+<td><p>2.0.1*</p></td>
+</tr>
+<tr class="row-even"><td><p>Vimba X Firmware Updater</p></td>
+<td><p>2.0.0*</p></td>
+</tr>
+</tbody>
+</table>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Third Party Libraries</p></th>
+<th class="head"><p>Version</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Qt</p></td>
+<td><p>5.15.0</p></td>
+</tr>
+<tr class="row-odd"><td><p>Qwt</p></td>
+<td><p>6.1.3</p></td>
+</tr>
+<tr class="row-even"><td><p>libTIFF</p></td>
+<td><p>4.0.7</p></td>
+</tr>
+<tr class="row-odd"><td><p>GenICam GenAPIModule</p></td>
+<td><p>3.2.0</p></td>
+</tr>
+</tbody>
+</table>
+</section>
+<section id="hardware-requirements">
+<h2>Hardware requirements<a class="headerlink" href="#hardware-requirements" title="Permalink to this headline"></a></h2>
+<p>PC or laptop with 64-bit x86 processor or better.</p>
+<section id="gige-cameras">
+<h3>GigE cameras<a class="headerlink" href="#gige-cameras" title="Permalink to this headline"></a></h3>
+<p>A built-in Gigabit Ethernet network interface or Gigabit Ethernet network
+card (one or more) is required.</p>
+<p><strong>Note for IP configuration</strong>:
+By default, IP Configuration Mode is set to DHCP.
+You can use the IP Configuration dialog of Vimba X Viewer to apply changes or
+to force the IP address.</p>
+</section>
+<section id="allied-vision-usb-cameras">
+<h3>Allied Vision USB cameras<a class="headerlink" href="#allied-vision-usb-cameras" title="Permalink to this headline"></a></h3>
+<p>A built-in USB 3.0 (or higher) controller for PCI Express bus is required.</p>
+<p>Testing has been performed on host controllers that are based on Delock chip sets and IOI chip sets. The driver may run on host controllers that are based on chip sets from other vendors, too. Nevertheless for best performance we highly recommend Intel chip sets. However, if there are any problems please feel free to contact our Technical Support.</p>
+</section>
+</section>
+<section id="installation">
+<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
+<p>To install Vimba X, use VimbaX.exe and follow the instructions.</p>
+</section>
+<section id="correlations-with-other-allied-vision-software-packages">
+<h2>Correlations with other Allied Vision Software Packages<a class="headerlink" href="#correlations-with-other-allied-vision-software-packages" title="Permalink to this headline"></a></h2>
+<p>You can install and use Vimba and Vimba X on the same host.
+We recommend using our GigE filter driver with Vimba X or Vimba only.</p>
+</section>
+<section id="supported-operating-systems">
+<h2>Supported operating systems<a class="headerlink" href="#supported-operating-systems" title="Permalink to this headline"></a></h2>
+<p>Vimba X was tested with:</p>
+<ul class="simple">
+<li><p>Windows 11 22H2</p></li>
+<li><p>Windows 10 21H2 LTSC</p></li>
+</ul>
+</section>
+<section id="known-issues">
+<h2>Known issues<a class="headerlink" href="#known-issues" title="Permalink to this headline"></a></h2>
+<p>Setup:</p>
+<ul class="simple">
+<li><p>Vimba X driver installation disconnects VPN. For a smooth installation, please disconnect VPN before installing Vimba X.</p></li>
+<li><p>To install the USB driver, please connect your Allied Vision USB camera before starting Vimba X installation. After installation, you can always use Vimba X Driver Installer.</p></li>
+<li><p>If your USB camera is not found, use the included Driver Installer (in some cases, the camera must be plugged out and plugged in again).</p></li>
+<li><p>During installation, Vimba setup configures some environment
+variables that are - among others - used when compiling the examples. In
+order to use the new environment variables, it might be necessary to restart
+Microsoft Visual Studio, log off, or even restart the operating system.</p></li>
+<li><p>In some cases, the Vimba X installer message about successfully installed drivers is incorrect.</p></li>
+</ul>
+<p>Vimba X APIs:</p>
+<ul class="simple">
+<li><p>When API startup and shutdown is performed excessively  within the same process,
+camera initialization may fail sporadically, which may cause exceptions.
+We recommend to have only one API session during one process.</p></li>
+<li><p>Load/Save Settings: Not all LUT settings are saved.</p></li>
+</ul>
+<p>GigE Filter Driver:</p>
+<ul class="simple">
+<li><p>If Vimba and Vimba X are installed on the same system: The Filter Driver provided with Vimba X overwrites Vimba’s Filter Driver. If you still work with Vimba: Use the included Driver Installer to deactivate and activate the correct Filter Driver.</p></li>
+<li><p>Using other filter drivers additionally to the included GigE Filter Driver (including the Filter Driver of the Vimba SDK) may cause issues, even a blue screen.</p></li>
+<li><p>Disabling the Vimba GigE Filter Driver while it is in use might lead to
+unexpected behavior up to blue screen.</p></li>
+</ul>
+<p>GigE Transport Layer:</p>
+<ul class="simple">
+<li><p>A change of the available camera access modes cannot be reported for cameras in different subnets or with malconfigured IP addresses.</p></li>
+<li><p>GigE cameras may be listed on a wrong Ethernet interface.</p></li>
+<li><p>If many dropped frames occur especially with a small ROI, set GVSP Timeout to a higher value.</p></li>
+</ul>
+<p>5 GigE Vision cameras:</p>
+<ul class="simple">
+<li><p>Unplugging an USB device while the camera is streaming may cause lost frames, especially when the socket driver is used.</p></li>
+</ul>
+<p>Vimba X Viewer:</p>
+<ul class="simple">
+<li><p>With some camera models, the message “Vimba X Viewer is not responding” appears for a few seconds when the camera is opened.</p></li>
+<li><p>If the IP address is changed within the same network, the camera list doesn’t update automatically. Please
+click the Refresh button.</p></li>
+<li><p>Sporadic issue: When multiple opened GigE cameras are disconnected at the same time while no other camera stays connected to the very same NIC,
+the Viewer’s camera windows stay open.</p></li>
+<li><p>Goldeye cameras: No inputs and outputs are shown on the Trigger IO tab.</p></li>
+</ul>
+<p>Firmware Updater:</p>
+<ul class="simple">
+<li><p>With some Alvium camera models, the firmware update may take up to 5 minutes.</p></li>
+</ul>
+<p>Examples:</p>
+<ul class="simple">
+<li><p>If a camera is already open, sometimes a misleading error message occurs (“Bad parameter”).</p></li>
+<li><p>The ListFeatures example does not list all Interface features.</p></li>
+<li><p>Sporadic issue of the AsynchronousGrab and Chunk example: stopping the stream causes an exception.</p></li>
+</ul>
+</section>
+<section id="changes-and-release-history">
+<h2>Changes and release history<a class="headerlink" href="#changes-and-release-history" title="Permalink to this headline"></a></h2>
+<section id="changes-in-vimba-x-2023-1">
+<h3>Changes in Vimba X 2023-1<a class="headerlink" href="#changes-in-vimba-x-2023-1" title="Permalink to this headline"></a></h3>
+<p>VmbC:</p>
+<ul class="simple">
+<li><p>Fixed: Open camera by IP may take 15s</p></li>
+<li><p>Added Exclusive Access mode</p></li>
+</ul>
+<p>VmbCPP:</p>
+<ul class="simple">
+<li><p>Fixed: Open camera by IP may take 15s</p></li>
+</ul>
+<p>VmbPy:</p>
+<ul class="simple">
+<li><p>Fixed: Open camera by IP may take 15s</p></li>
+<li><p>Fixed type hints for Python &lt;=3.7.5 and =3.8.0</p></li>
+<li><p>Updated AccessMode enum for consistency with VmbC</p></li>
+<li><p>Added option for visibility level to list_features.py</p></li>
+</ul>
+<p>GigETL:</p>
+<ul class="simple">
+<li><p>Fixed: Vimba X freezes if the NIC is disabled during image acquisition.</p></li>
+</ul>
+<p>GigE Filter Driver:</p>
+<ul class="simple">
+<li><p>Supports extended status codes packet resend</p></li>
+</ul>
+<p>USBTL:</p>
+<ul class="simple">
+<li><p>Improved: standard conformity of resend for control channel commands</p></li>
+</ul>
+</section>
+<section id="changes-in-vimba-x-2022-1">
+<h3>Changes in Vimba X 2022-1<a class="headerlink" href="#changes-in-vimba-x-2022-1" title="Permalink to this headline"></a></h3>
+<p>VmbC:</p>
+<ul class="simple">
+<li><p>New API (similar, but not compatible to VimbaC)</p></li>
+</ul>
+<p>VmbCPP:</p>
+<ul class="simple">
+<li><p>New API (similar, but not compatible to VimbaCPP)</p></li>
+</ul>
+<p>VmbPy:</p>
+<ul class="simple">
+<li><p>New API (similar, but not compatible to VimbaPython)</p></li>
+</ul>
+<p>Image Transform:</p>
+<ul class="simple">
+<li><p>Added supported transformations (supports pixel formats of NET cameras)</p></li>
+<li><p>Renamed VmbGetVersion to VmbGetImageTransformVersion</p></li>
+<li><p>VmbSetImageInfoFromString: removed stringLength parameter</p></li>
+</ul>
+<p>Vimba X Viewer:</p>
+<ul class="simple">
+<li><p>New Viewer (based on Vimba Viewer)</p></li>
+<li><p>Additional features: Chunk support, 5x5 Matrix,  Scheduled Action commands</p></li>
+</ul>
+<p>GigETL:</p>
+<ul class="simple">
+<li><p>Display name: AVT GigE TL (instead of Vimba GigE TL)</p></li>
+<li><p>Scheduled Action Commands support</p></li>
+<li><p>Chunk support</p></li>
+</ul>
+<p>Filter Driver:</p>
+<ul class="simple">
+<li><p>Chunk Support</p></li>
+<li><p>Bug fixes</p></li>
+</ul>
+<p>USBTL:</p>
+<ul class="simple">
+<li><p>Display name: AVT USB TL (instead of Vimba USB TL)</p></li>
+</ul>
+<p>Driver Installer:</p>
+<ul class="simple">
+<li><p>The version was incremented to 2.0.0 because of internal changes
+(no functional changes for the user)</p></li>
+</ul>
+</section>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="index.html" class="btn btn-neutral float-left" title="Vimba X Release Notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="Linux.html" class="btn btn-neutral float-right" title="Vimba X for Linux x86_64 Release Notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/basic.css b/VimbaX/doc/VimbaX_ReleaseNotes/_static/basic.css
new file mode 100644
index 0000000000000000000000000000000000000000..bf18350b65c61f31b2f9f717c03e02f17c0ab4f1
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/basic.css
@@ -0,0 +1,906 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+div.section::after {
+    display: block;
+    content: '';
+    clear: left;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+    overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    float: left;
+    width: 80%;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    float: left;
+    width: 20%;
+    border-left: none;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li p.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable ul {
+    margin-top: 0;
+    margin-bottom: 0;
+    list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+    padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+    padding: 2px;
+    border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+    min-width: 450px;
+    max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
+a.headerlink {
+    visibility: hidden;
+}
+
+a.brackets:before,
+span.brackets > a:before{
+    content: "[";
+}
+
+a.brackets:after,
+span.brackets > a:after {
+    content: "]";
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-default {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar,
+aside.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+    clear: right;
+    overflow-x: auto;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+div.admonition, div.topic, blockquote {
+    clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+aside.sidebar > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+    margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+    display: block;
+    content: '';
+    clear: both;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.align-center {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.align-default {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+th > :first-child,
+td > :first-child {
+    margin-top: 0px;
+}
+
+th > :last-child,
+td > :last-child {
+    margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure, figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption, figcaption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist {
+    margin: 1em 0;
+}
+
+table.hlist td {
+    vertical-align: top;
+}
+
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+	font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+.sig-name {
+	font-size: 1.1em;
+}
+
+code.descname {
+    font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+    background-color: transparent;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.sig-param.n {
+	font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+	font-family: unset;
+}
+
+.sig.c   .k, .sig.c   .kt,
+.sig.cpp .k, .sig.cpp .kt {
+	color: #0033B3;
+}
+
+.sig.c   .m,
+.sig.cpp .m {
+	color: #1750EB;
+}
+
+.sig.c   .s, .sig.c   .sc,
+.sig.cpp .s, .sig.cpp .sc {
+	color: #067D17;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
+    margin-top: 0px;
+}
+
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
+    margin-bottom: 0px;
+}
+
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+    margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+    margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+    margin-bottom: 0;
+}
+
+dl.footnote > dt,
+dl.citation > dt {
+    float: left;
+    margin-right: 0.5em;
+}
+
+dl.footnote > dd,
+dl.citation > dd {
+    margin-bottom: 0em;
+}
+
+dl.footnote > dd:after,
+dl.citation > dd:after {
+    content: "";
+    clear: both;
+}
+
+dl.field-list {
+    display: grid;
+    grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+    font-weight: bold;
+    word-break: break-word;
+    padding-left: 0.5em;
+    padding-right: 5px;
+}
+
+dl.field-list > dt:after {
+    content: ":";
+}
+
+dl.field-list > dd {
+    padding-left: 0.5em;
+    margin-top: 0em;
+    margin-left: 0em;
+    margin-bottom: 0em;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd > :first-child {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+    margin-bottom: 0;
+}
+
+dt:target, span.highlighted {
+    background-color: #fbe54e;
+}
+
+rect.highlighted {
+    fill: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+.classifier:before {
+    font-style: normal;
+    margin: 0 0.5em;
+    content: ":";
+    display: inline-block;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+pre, div[class*="highlight-"] {
+    clear: both;
+}
+
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+    white-space: nowrap;
+}
+
+div[class*="highlight-"] {
+    margin: 1em 0;
+}
+
+td.linenos pre {
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    display: block;
+}
+
+table.highlighttable tbody {
+    display: block;
+}
+
+table.highlighttable tr {
+    display: flex;
+}
+
+table.highlighttable td {
+    margin: 0;
+    padding: 0;
+}
+
+table.highlighttable td.linenos {
+    padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+    flex: 1;
+    overflow: hidden;
+}
+
+.highlight .hll {
+    display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+    margin: 0;
+}
+
+div.code-block-caption + div {
+    margin-top: 0;
+}
+
+div.code-block-caption {
+    margin-top: 1em;
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+table.highlighttable td.linenos,
+span.linenos,
+div.highlight span.gp {  /* gp: Generic.Prompt */
+  user-select: none;
+  -webkit-user-select: text; /* Safari fallback only */
+  -webkit-user-select: none; /* Chrome/Safari */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* IE10+ */
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    margin: 1em 0;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+span.eqno a.headerlink {
+    position: absolute;
+    z-index: 1;
+}
+
+div.math:hover a.headerlink {
+    visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/badge_only.css b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/badge_only.css
new file mode 100644
index 0000000000000000000000000000000000000000..e380325bc6e273d9142c2369883d2a4b2a069cf1
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/badge_only.css
@@ -0,0 +1 @@
+.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Bold.woff b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..6cb60000181dbd348963953ac8ac54afb46c63d5
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Bold.woff differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Bold.woff2 b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..7059e23142aae3d8bad6067fc734a6cffec779c9
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Bold.woff2 differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Regular.woff b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..f815f63f99da80ad2be69e4021023ec2981eaea0
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Regular.woff differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Regular.woff2 b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..f2c76e5bda18a9842e24cd60d8787257da215ca7
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/Roboto-Slab-Regular.woff2 differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.eot b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.eot differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.svg b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000000000000000000000000000000000000..855c845e538b65548118279537a04eab2ec6ef0d
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+<?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>
+<metadata>
+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
+ By ,,,
+Copyright Dave Gandy 2016. All rights reserved.
+</metadata>
+<defs>
+<font id="FontAwesome" horiz-adv-x="1536" >
+  <font-face 
+    font-family="FontAwesome"
+    font-weight="400"
+    font-stretch="normal"
+    units-per-em="1792"
+    panose-1="0 0 0 0 0 0 0 0 0 0"
+    ascent="1536"
+    descent="-256"
+    bbox="-1.02083 -256.962 2304.6 1537.02"
+    underline-thickness="0"
+    underline-position="0"
+    unicode-range="U+0020-F500"
+  />
+<missing-glyph horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".notdef" horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".null" horiz-adv-x="0" 
+ />
+    <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597" 
+ />
+    <glyph glyph-name="space" unicode=" " horiz-adv-x="448" 
+ />
+    <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1792" 
+d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+    <glyph glyph-name="music" unicode="&#xf001;" 
+d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
+t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664" 
+d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
+t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="envelope" unicode="&#xf003;" horiz-adv-x="1792" 
+d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
+t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
+M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792" 
+d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
+q-18 -18 -44 -18z" />
+    <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664" 
+d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
+l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="star_empty" unicode="&#xf006;" horiz-adv-x="1664" 
+d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
+l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280" 
+d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
+t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920" 
+d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
+q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
+t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
+q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
+t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="th_large" unicode="&#xf009;" horiz-adv-x="1664" 
+d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
+h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="th_list" unicode="&#xf00b;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ok" unicode="&#xf00c;" horiz-adv-x="1792" 
+d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+    <glyph glyph-name="remove" unicode="&#xf00d;" horiz-adv-x="1408" 
+d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
+t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+    <glyph glyph-name="zoom_in" unicode="&#xf00e;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
+q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
+t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="zoom_out" unicode="&#xf010;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
+M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
+" />
+    <glyph glyph-name="off" unicode="&#xf011;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
+t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+    <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792" 
+d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="cog" unicode="&#xf013;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
+q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
+l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
+q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+    <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408" 
+d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
+q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664" 
+d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
+l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+    <glyph glyph-name="file_alt" unicode="&#xf016;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+" />
+    <glyph glyph-name="time" unicode="&#xf017;" 
+d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920" 
+d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
+q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+    <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664" 
+d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
+q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+    <glyph glyph-name="download" unicode="&#xf01a;" 
+d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
+t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="upload" unicode="&#xf01b;" 
+d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
+t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="inbox" unicode="&#xf01c;" 
+d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
+q25 -61 25 -123z" />
+    <glyph glyph-name="play_circle" unicode="&#xf01d;" 
+d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="repeat" unicode="&#xf01e;" 
+d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
+l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+    <glyph glyph-name="refresh" unicode="&#xf021;" 
+d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
+q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
+q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792" 
+d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
+M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
+t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152" 
+d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792" 
+d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
+t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664" 
+d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
+t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
+t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+    <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+    <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
+t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
+t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+    <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408" 
+d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
+M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+    <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792" 
+d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
+M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+    <glyph glyph-name="tag" unicode="&#xf02b;" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664" 
+d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
+q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
+q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
+t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+    <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280" 
+d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664" 
+d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
+v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+    <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920" 
+d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
+q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664" 
+d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
+q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
+q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+    <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408" 
+d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
+q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
+t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
+t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+    <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024" 
+d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
+q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+    <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792" 
+d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
+t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
+q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+    <glyph glyph-name="text_width" unicode="&#xf035;" 
+d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
+t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
+t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
+t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+    <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
+h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792" 
+d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
+t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
+q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
+q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792" 
+d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792" 
+d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792" 
+d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
+q39 -17 39 -59z" />
+    <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920" 
+d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
+q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="pencil" unicode="&#xf040;" 
+d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
+q53 0 91 -38l235 -234q37 -39 37 -91z" />
+    <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024" 
+d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+    <glyph glyph-name="adjust" unicode="&#xf042;" 
+d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024" 
+d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
+q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+    <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792" 
+d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
+l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+    <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664" 
+d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
+q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
+t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664" 
+d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
+q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
+q24 -24 24 -57t-24 -57z" />
+    <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
+t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024" 
+d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
+    <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792" 
+d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
+q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664" 
+d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408" 
+d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+    <glyph glyph-name="pause" unicode="&#xf04c;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="stop" unicode="&#xf04d;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
+q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
+    <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538" 
+d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+    <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280" 
+d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280" 
+d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="plus_sign" unicode="&#xf055;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
+t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="minus_sign" unicode="&#xf056;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="remove_sign" unicode="&#xf057;" 
+d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
+q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_sign" unicode="&#xf058;" 
+d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="question_sign" unicode="&#xf059;" 
+d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
+q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="info_sign" unicode="&#xf05a;" 
+d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
+t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="screenshot" unicode="&#xf05b;" 
+d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
+q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
+q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="remove_circle" unicode="&#xf05c;" 
+d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
+t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_circle" unicode="&#xf05d;" 
+d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
+t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ban_circle" unicode="&#xf05e;" 
+d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
+t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+    <glyph glyph-name="arrow_left" unicode="&#xf060;" 
+d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
+t32.5 -90.5z" />
+    <glyph glyph-name="arrow_right" unicode="&#xf061;" 
+d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+    <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664" 
+d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
+q37 -39 37 -91z" />
+    <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664" 
+d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+    <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792" 
+d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
+t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+    <glyph glyph-name="resize_full" unicode="&#xf065;" 
+d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
+q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="resize_small" unicode="&#xf066;" 
+d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
+t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+    <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664" 
+d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
+q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+    <glyph glyph-name="exclamation_sign" unicode="&#xf06a;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
+q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+    <glyph glyph-name="gift" unicode="&#xf06b;" 
+d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
+q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
+t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792" 
+d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
+q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
+t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+    <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408" 
+d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
+q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+    <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792" 
+d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
+t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+    <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792" 
+d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
+q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
+q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
+" />
+    <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792" 
+d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
+q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+    <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408" 
+d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
+q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+    <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664" 
+d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
+M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
+q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
+h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792" 
+d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
+t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
+v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
+t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792" 
+d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
+q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="magnet" unicode="&#xf076;" 
+d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
+q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792" 
+d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792" 
+d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920" 
+d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
+zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
+" />
+    <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664" 
+d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
+t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664" 
+d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920" 
+d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
+t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768" 
+d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048" 
+d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+    <glyph glyph-name="twitter_sign" unicode="&#xf081;" 
+d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
+q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
+t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="facebook_sign" unicode="&#xf082;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792" 
+d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
+t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
+q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792" 
+d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
+l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
+t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+    <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920" 
+d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
+l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
+l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
+q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
+t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
+q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
+q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+    <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792" 
+d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
+q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
+q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+    <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
+t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
+q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
+q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;" 
+d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
+t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
+M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
+h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
+    <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896" 
+d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+    <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792" 
+d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
+q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
+q224 0 351 -124t127 -344z" />
+    <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664" 
+d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
+q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+    <glyph glyph-name="linkedin_sign" unicode="&#xf08c;" 
+d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
+q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152" 
+d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
+t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+    <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792" 
+d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="signin" unicode="&#xf090;" 
+d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
+q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664" 
+d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
+t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
+q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="github_sign" unicode="&#xf092;" 
+d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
+q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
+t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
+q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664" 
+d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
+t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+    <glyph glyph-name="lemon" unicode="&#xf094;" 
+d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
+q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
+q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
+q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
+    <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408" 
+d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
+q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
+t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+    <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408" 
+d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280" 
+d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
+q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="phone_sign" unicode="&#xf098;" 
+d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
+t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
+t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
+" />
+    <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664" 
+d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
+q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+    <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024" 
+d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+    <glyph glyph-name="github" unicode="&#xf09b;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
+q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
+t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
+q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
+M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
+    <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664" 
+d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
+t316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920" 
+d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
+q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+    <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408" 
+d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
+t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
+q187 -186 294 -425.5t120 -501.5z" />
+    <glyph glyph-name="hdd" unicode="&#xf0a0;" 
+d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
+h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
+l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+    <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792" 
+d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
+t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+    <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
+M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
+t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="certificate" unicode="&#xf0a3;" 
+d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
+l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
+l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+    <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
+q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
+q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
+t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792" 
+d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
+t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
+M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
+q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="hand_up" unicode="&#xf0a6;" 
+d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
+q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
+t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
+q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+    <glyph glyph-name="hand_down" unicode="&#xf0a7;" 
+d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
+t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
+q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
+q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+    <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_right" unicode="&#xf0a9;" 
+d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_up" unicode="&#xf0aa;" 
+d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_down" unicode="&#xf0ab;" 
+d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="globe" unicode="&#xf0ac;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
+q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
+q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
+q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
+t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
+q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
+q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
+t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
+t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
+q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
+q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
+q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
+t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
+q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
+q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+    <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1664" 
+d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
+t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+    <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792" 
+d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
+t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408" 
+d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+    <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792" 
+d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
+t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="fullscreen" unicode="&#xf0b2;" 
+d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
+l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
+" />
+    <glyph glyph-name="group" unicode="&#xf0c0;" horiz-adv-x="1920" 
+d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
+t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
+t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+    <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1664" 
+d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
+l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
+t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
+q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+    <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920" 
+d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
+" />
+    <glyph glyph-name="beaker" unicode="&#xf0c3;" horiz-adv-x="1664" 
+d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+    <glyph glyph-name="cut" unicode="&#xf0c4;" horiz-adv-x="1792" 
+d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
+q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
+q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
+q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
+q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+    <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="1792" 
+d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
+h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+    <glyph glyph-name="paper_clip" unicode="&#xf0c6;" horiz-adv-x="1408" 
+d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
+l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
+z" />
+    <glyph glyph-name="save" unicode="&#xf0c7;" 
+d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
+h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="sign_blank" unicode="&#xf0c8;" 
+d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="reorder" unicode="&#xf0c9;" 
+d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
+t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ul" unicode="&#xf0ca;" horiz-adv-x="1792" 
+d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
+M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="ol" unicode="&#xf0cb;" horiz-adv-x="1792" 
+d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
+q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
+t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
+q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792" 
+d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
+l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
+l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+    <glyph glyph-name="underline" unicode="&#xf0cd;" 
+d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
+q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
+q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
+q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+    <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664" 
+d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
+v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
+q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
+q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
+z" />
+    <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1664" 
+d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
+l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+    <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1792" 
+d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
+t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
+t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="pinterest" unicode="&#xf0d2;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
+q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
+q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="pinterest_sign" unicode="&#xf0d3;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
+t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
+t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="google_plus_sign" unicode="&#xf0d4;" 
+d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
+h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="google_plus" unicode="&#xf0d5;" horiz-adv-x="2304" 
+d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
+q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
+    <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920" 
+d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
+v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_down" unicode="&#xf0d7;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_up" unicode="&#xf0d8;" horiz-adv-x="1024" 
+d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="caret_left" unicode="&#xf0d9;" horiz-adv-x="640" 
+d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="caret_right" unicode="&#xf0da;" horiz-adv-x="640" 
+d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664" 
+d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="sort_down" unicode="&#xf0dd;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="sort_up" unicode="&#xf0de;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="envelope_alt" unicode="&#xf0e0;" horiz-adv-x="1792" 
+d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
+q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+    <glyph glyph-name="linkedin" unicode="&#xf0e1;" 
+d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
+q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+    <glyph glyph-name="undo" unicode="&#xf0e2;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+    <glyph glyph-name="legal" unicode="&#xf0e3;" horiz-adv-x="1792" 
+d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
+t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
+q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
+q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+    <glyph glyph-name="dashboard" unicode="&#xf0e4;" horiz-adv-x="1792" 
+d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
+t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
+t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
+q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="comment_alt" unicode="&#xf0e5;" horiz-adv-x="1792" 
+d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
+q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
+t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="comments_alt" unicode="&#xf0e6;" horiz-adv-x="1792" 
+d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
+t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
+t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
+q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+    <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896" 
+d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+    <glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792" 
+d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664" 
+d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
+q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
+q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+    <glyph glyph-name="paste" unicode="&#xf0ea;" horiz-adv-x="1792" 
+d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
+h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="light_bulb" unicode="&#xf0eb;" horiz-adv-x="1024" 
+d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
+q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
+q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
+t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+    <glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792" 
+d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
+q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="cloud_download" unicode="&#xf0ed;" horiz-adv-x="1920" 
+d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="cloud_upload" unicode="&#xf0ee;" horiz-adv-x="1920" 
+d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="user_md" unicode="&#xf0f0;" horiz-adv-x="1408" 
+d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
+t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
+t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
+t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
+t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792" 
+d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
+t66 -158z" />
+    <glyph glyph-name="bell_alt" unicode="&#xf0f3;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
+t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1920" 
+d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
+t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="food" unicode="&#xf0f5;" horiz-adv-x="1408" 
+d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
+t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="file_text_alt" unicode="&#xf0f6;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
+q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+    <glyph glyph-name="building" unicode="&#xf0f7;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5
+t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320
+v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1920" 
+d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152
+q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792" 
+d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32
+q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="fighter_jet" unicode="&#xf0fb;" horiz-adv-x="1920" 
+d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96
+q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" />
+    <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1664" 
+d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+    <glyph glyph-name="h_sign" unicode="&#xf0fd;" 
+d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="f0fe" unicode="&#xf0fe;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="double_angle_left" unicode="&#xf100;" horiz-adv-x="1024" 
+d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_right" unicode="&#xf101;" horiz-adv-x="1024" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23
+l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_up" unicode="&#xf102;" horiz-adv-x="1152" 
+d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393
+q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_down" unicode="&#xf103;" horiz-adv-x="1152" 
+d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_left" unicode="&#xf104;" horiz-adv-x="640" 
+d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_right" unicode="&#xf105;" horiz-adv-x="640" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_up" unicode="&#xf106;" horiz-adv-x="1152" 
+d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_down" unicode="&#xf107;" horiz-adv-x="1152" 
+d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920" 
+d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19
+t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920" 
+d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z
+M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+    <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152" 
+d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832
+q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="mobile_phone" unicode="&#xf10b;" horiz-adv-x="768" 
+d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136
+q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="circle_blank" unicode="&#xf10c;" 
+d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103
+t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="quote_left" unicode="&#xf10d;" horiz-adv-x="1664" 
+d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z
+M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="quote_right" unicode="&#xf10e;" horiz-adv-x="1664" 
+d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216
+v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1792" 
+d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z
+M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5
+q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="circle" unicode="&#xf111;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792" 
+d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19
+l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+    <glyph glyph-name="github_alt" unicode="&#xf113;" horiz-adv-x="1664" 
+d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320
+q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86
+t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218
+q0 -87 -27 -168q136 -160 136 -398z" />
+    <glyph glyph-name="folder_close_alt" unicode="&#xf114;" horiz-adv-x="1664" 
+d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320
+q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open_alt" unicode="&#xf115;" horiz-adv-x="1920" 
+d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68
+v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z
+" />
+    <glyph glyph-name="expand_alt" unicode="&#xf116;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="collapse_alt" unicode="&#xf117;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="smile" unicode="&#xf118;" 
+d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5
+t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="frown" unicode="&#xf119;" 
+d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204
+t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="meh" unicode="&#xf11a;" 
+d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="gamepad" unicode="&#xf11b;" horiz-adv-x="1920" 
+d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150
+t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+    <glyph glyph-name="keyboard" unicode="&#xf11c;" horiz-adv-x="1920" 
+d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16
+h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16
+h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96
+q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896
+h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="flag_alt" unicode="&#xf11d;" horiz-adv-x="1792" 
+d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9
+h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102
+q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="flag_checkered" unicode="&#xf11e;" horiz-adv-x="1792" 
+d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2
+q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266
+q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8
+q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1664" 
+d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1920" 
+d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5
+l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+    <glyph glyph-name="reply_all" unicode="&#xf122;" horiz-adv-x="1792" 
+d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1
+q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+    <glyph glyph-name="star_half_empty" unicode="&#xf123;" horiz-adv-x="1664" 
+d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5
+l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+    <glyph glyph-name="location_arrow" unicode="&#xf124;" horiz-adv-x="1408" 
+d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+    <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664" 
+d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="code_fork" unicode="&#xf126;" horiz-adv-x="1024" 
+d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5
+q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497
+q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="unlink" unicode="&#xf127;" horiz-adv-x="1664" 
+d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320
+q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18
+l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9
+t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="1024" 
+d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5
+t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+    <glyph glyph-name="_279" unicode="&#xf129;" horiz-adv-x="640" 
+d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192
+q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="640" 
+d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+    <glyph glyph-name="superscript" unicode="&#xf12b;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5
+t-65.5 -51.5t-30.5 -63h232v80h126z" />
+    <glyph glyph-name="subscript" unicode="&#xf12c;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73
+h232v80h126z" />
+    <glyph glyph-name="_283" unicode="&#xf12d;" horiz-adv-x="1920" 
+d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+    <glyph glyph-name="puzzle_piece" unicode="&#xf12e;" horiz-adv-x="1664" 
+d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5
+t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89
+q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117
+q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+    <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152" 
+d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5
+t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+    <glyph glyph-name="microphone_off" unicode="&#xf131;" horiz-adv-x="1408" 
+d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128
+q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23
+t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+    <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280" 
+d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150
+t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="calendar_empty" unicode="&#xf133;" horiz-adv-x="1664" 
+d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="fire_extinguisher" unicode="&#xf134;" horiz-adv-x="1408" 
+d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800
+q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113
+q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+    <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1664" 
+d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1
+q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+    <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1792" 
+d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+    <glyph glyph-name="chevron_sign_left" unicode="&#xf137;" 
+d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_right" unicode="&#xf138;" 
+d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_up" unicode="&#xf139;" 
+d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_down" unicode="&#xf13a;" 
+d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408" 
+d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+    <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1792" 
+d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+    <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792" 
+d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352
+q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19
+t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="unlock_alt" unicode="&#xf13e;" horiz-adv-x="1152" 
+d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181
+v-320h736z" />
+    <glyph glyph-name="bullseye" unicode="&#xf140;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150
+t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ellipsis_horizontal" unicode="&#xf141;" horiz-adv-x="1408" 
+d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ellipsis_vertical" unicode="&#xf142;" horiz-adv-x="384" 
+d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="_303" unicode="&#xf143;" 
+d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128
+q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="play_sign" unicode="&#xf144;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56
+q16 -8 32 -8q17 0 32 9z" />
+    <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1792" 
+d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136
+t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+    <glyph glyph-name="minus_sign_alt" unicode="&#xf146;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="check_minus" unicode="&#xf147;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5
+t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="level_up" unicode="&#xf148;" horiz-adv-x="1024" 
+d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+    <glyph glyph-name="level_down" unicode="&#xf149;" horiz-adv-x="1024" 
+d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+    <glyph glyph-name="check_sign" unicode="&#xf14a;" 
+d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5
+t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="edit_sign" unicode="&#xf14b;" 
+d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_312" unicode="&#xf14c;" 
+d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960
+q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="share_sign" unicode="&#xf14d;" 
+d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5
+t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="compass" unicode="&#xf14e;" 
+d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="collapse" unicode="&#xf150;" 
+d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="collapse_top" unicode="&#xf151;" 
+d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_317" unicode="&#xf152;" 
+d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1024" 
+d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9
+t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26
+l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+    <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1024" 
+d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7
+q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+    <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="1024" 
+d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43
+t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5
+t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50
+t53 -63.5t31.5 -76.5t13 -94z" />
+    <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898" 
+d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102
+q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1027" 
+d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61
+l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+    <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280" 
+d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128
+q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+    <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792" 
+d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23
+t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28
+q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1280" 
+d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164
+l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30
+t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+    <glyph glyph-name="file" unicode="&#xf15b;" 
+d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+    <glyph glyph-name="file_text" unicode="&#xf15c;" 
+d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+    <glyph glyph-name="sort_by_alphabet" unicode="&#xf15d;" horiz-adv-x="1664" 
+d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23
+v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162
+l230 -662h70z" />
+    <glyph glyph-name="_329" unicode="&#xf15e;" horiz-adv-x="1664" 
+d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150
+v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248
+v119h121z" />
+    <glyph glyph-name="sort_by_attributes" unicode="&#xf160;" horiz-adv-x="1792" 
+d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832
+q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_attributes_alt" unicode="&#xf161;" horiz-adv-x="1792" 
+d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192
+q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_order" unicode="&#xf162;" 
+d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23
+zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5
+t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+    <glyph glyph-name="sort_by_order_alt" unicode="&#xf163;" 
+d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9
+t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13
+q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+    <glyph glyph-name="_334" unicode="&#xf164;" horiz-adv-x="1664" 
+d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76
+q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5
+t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+    <glyph glyph-name="_335" unicode="&#xf165;" horiz-adv-x="1664" 
+d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135
+t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121
+t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+    <glyph glyph-name="youtube_sign" unicode="&#xf166;" 
+d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15
+q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38
+q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5
+q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38
+q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5
+h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube" unicode="&#xf167;" 
+d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73
+q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51
+q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99
+q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51
+q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+    <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408" 
+d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942
+q25 45 64 45h241q22 0 31 -15z" />
+    <glyph glyph-name="xing_sign" unicode="&#xf169;" 
+d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1
+l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube_play" unicode="&#xf16a;" horiz-adv-x="1792" 
+d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5
+l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136
+q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" />
+    <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1792" 
+d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+    <glyph glyph-name="stackexchange" unicode="&#xf16c;" 
+d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
+    <glyph glyph-name="instagram" unicode="&#xf16d;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270
+q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5
+t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317
+q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
+    <glyph glyph-name="flickr" unicode="&#xf16e;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150
+t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+    <glyph glyph-name="adn" unicode="&#xf170;" 
+d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f171" unicode="&#xf171;" horiz-adv-x="1408" 
+d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22
+t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18
+t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5
+t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+    <glyph glyph-name="bitbucket_sign" unicode="&#xf172;" 
+d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5
+t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z
+M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="1024" 
+d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14
+q78 2 134 29z" />
+    <glyph glyph-name="tumblr_sign" unicode="&#xf174;" 
+d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="long_arrow_down" unicode="&#xf175;" horiz-adv-x="768" 
+d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+    <glyph glyph-name="long_arrow_up" unicode="&#xf176;" horiz-adv-x="768" 
+d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+    <glyph glyph-name="long_arrow_left" unicode="&#xf177;" horiz-adv-x="1792" 
+d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="long_arrow_right" unicode="&#xf178;" horiz-adv-x="1792" 
+d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+    <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1408" 
+d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65
+q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+    <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664" 
+d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+    <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408" 
+d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30
+t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5
+h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+    <glyph glyph-name="linux" unicode="&#xf17c;" 
+d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z
+M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7
+q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15
+q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5
+t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19
+q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63
+q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92
+q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152
+q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4
+t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5
+t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43
+q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49
+t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54
+q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5
+t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5
+t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+    <glyph glyph-name="dribble" unicode="&#xf17d;" 
+d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81
+t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19
+q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6
+t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="skype" unicode="&#xf17e;" 
+d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5
+t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5
+q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80
+q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+    <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1280" 
+d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z
+M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324
+l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+    <glyph glyph-name="trello" unicode="&#xf181;" 
+d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408
+q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280" 
+d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43
+q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024" 
+d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z
+M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="gittip" unicode="&#xf184;" 
+d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="sun" unicode="&#xf185;" horiz-adv-x="1792" 
+d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4
+l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94
+q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+    <glyph glyph-name="_366" unicode="&#xf186;" 
+d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61
+t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+    <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1792" 
+d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536
+q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1664" 
+d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207
+q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19
+t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+    <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1920" 
+d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58
+t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6
+q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24
+q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2
+q39 5 64 -2.5t31 -16.5z" />
+    <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792" 
+d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12
+q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422
+q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178
+q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z
+M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+    <glyph glyph-name="renren" unicode="&#xf18b;" 
+d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495
+q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+    <glyph glyph-name="_372" unicode="&#xf18c;" horiz-adv-x="1408" 
+d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5
+t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56
+t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5
+t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+    <glyph glyph-name="stack_exchange" unicode="&#xf18d;" horiz-adv-x="1280" 
+d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z
+" />
+    <glyph glyph-name="_374" unicode="&#xf18e;" 
+d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="arrow_circle_alt_left" unicode="&#xf190;" 
+d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_376" unicode="&#xf191;" 
+d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="dot_circle_alt" unicode="&#xf192;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5
+t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_378" unicode="&#xf193;" horiz-adv-x="1664" 
+d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128
+q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+    <glyph glyph-name="vimeo_square" unicode="&#xf194;" 
+d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179
+q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_380" unicode="&#xf195;" horiz-adv-x="1152" 
+d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160
+q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="plus_square_o" unicode="&#xf196;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832
+q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_382" unicode="&#xf197;" horiz-adv-x="2176" 
+d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40
+t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29
+q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+    <glyph glyph-name="_383" unicode="&#xf198;" horiz-adv-x="1664" 
+d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9
+q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102
+t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+    <glyph glyph-name="_384" unicode="&#xf199;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69
+q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13
+t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+    <glyph glyph-name="_385" unicode="&#xf19a;" horiz-adv-x="1792" 
+d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5
+t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21
+t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286
+t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273
+t273 -182.5t331.5 -68z" />
+    <glyph glyph-name="_386" unicode="&#xf19b;" horiz-adv-x="1792" 
+d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+    <glyph glyph-name="_387" unicode="&#xf19c;" horiz-adv-x="2048" 
+d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64
+q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+    <glyph glyph-name="_388" unicode="&#xf19d;" horiz-adv-x="2304" 
+d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433
+q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+    <glyph glyph-name="_389" unicode="&#xf19e;" 
+d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0
+q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+    <glyph glyph-name="uniF1A0" unicode="&#xf1a0;" 
+d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5
+t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
+    <glyph glyph-name="f1a1" unicode="&#xf1a1;" horiz-adv-x="1792" 
+d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26
+t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37
+q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191
+t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_392" unicode="&#xf1a2;" 
+d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54
+q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83
+q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_393" unicode="&#xf1a3;" 
+d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150
+v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103
+t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f1a4" unicode="&#xf1a4;" horiz-adv-x="1920" 
+d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328
+v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+    <glyph glyph-name="_395" unicode="&#xf1a5;" 
+d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="_396" unicode="&#xf1a6;" horiz-adv-x="2048" 
+d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
+v-369h123z" />
+    <glyph glyph-name="_397" unicode="&#xf1a7;" 
+d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101
+v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_398" unicode="&#xf1a8;" horiz-adv-x="2038" 
+d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14
+q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24
+q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33
+q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5
+t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43
+q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5
+t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13
+t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+    <glyph glyph-name="_399" unicode="&#xf1a9;" 
+d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10
+q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14
+q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14
+t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44
+q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+    <glyph glyph-name="_400" unicode="&#xf1aa;" 
+d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z
+M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5
+t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5
+q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126
+t135.5 51q85 0 145 -60.5t60 -145.5z" />
+    <glyph glyph-name="f1ab" unicode="&#xf1ab;" 
+d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5
+q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28
+q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z
+M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11
+q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5
+q20 0 20 -21v-418z" />
+    <glyph glyph-name="_402" unicode="&#xf1ac;" horiz-adv-x="1792" 
+d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48
+l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23
+t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128
+q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128
+q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+    <glyph glyph-name="_403" unicode="&#xf1ad;" 
+d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9
+t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9
+t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9
+t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+    <glyph glyph-name="_404" unicode="&#xf1ae;" horiz-adv-x="1280" 
+d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152
+q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="uniF1B1" unicode="&#xf1b0;" horiz-adv-x="1664" 
+d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5
+q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819
+q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5
+t100.5 134t141.5 55.5z" />
+    <glyph glyph-name="_406" unicode="&#xf1b1;" horiz-adv-x="768" 
+d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+    <glyph glyph-name="_407" unicode="&#xf1b2;" horiz-adv-x="1792" 
+d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z
+" />
+    <glyph glyph-name="_408" unicode="&#xf1b3;" horiz-adv-x="2304" 
+d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67
+t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70
+v-400l434 -186q36 -16 57 -48t21 -70z" />
+    <glyph glyph-name="_409" unicode="&#xf1b4;" horiz-adv-x="2048" 
+d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658
+q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204
+q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+    <glyph glyph-name="_410" unicode="&#xf1b5;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5
+t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217
+t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+    <glyph glyph-name="_411" unicode="&#xf1b6;" horiz-adv-x="1792" 
+d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5
+q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89
+q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+    <glyph glyph-name="_412" unicode="&#xf1b7;" 
+d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5
+q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5
+q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z
+" />
+    <glyph glyph-name="_413" unicode="&#xf1b8;" horiz-adv-x="1792" 
+d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188
+l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5
+t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1
+q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+    <glyph glyph-name="_414" unicode="&#xf1b9;" horiz-adv-x="2048" 
+d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384
+q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5
+l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_415" unicode="&#xf1ba;" horiz-adv-x="2048" 
+d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5
+t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z
+M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+    <glyph glyph-name="_416" unicode="&#xf1bb;" 
+d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384
+q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+    <glyph glyph-name="_417" unicode="&#xf1bc;" 
+d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64
+q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37
+q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_418" unicode="&#xf1bd;" horiz-adv-x="1024" 
+d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+    <glyph glyph-name="_419" unicode="&#xf1be;" horiz-adv-x="2304" 
+d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11
+q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245
+q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785
+l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242
+q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236
+q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786
+q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+    <glyph glyph-name="uniF1C0" unicode="&#xf1c0;" 
+d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127
+t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5
+t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+    <glyph glyph-name="uniF1C1" unicode="&#xf1c1;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197
+q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8
+q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+    <glyph glyph-name="_422" unicode="&#xf1c2;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5
+t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" />
+    <glyph glyph-name="_423" unicode="&#xf1c3;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107
+h-290v-107h68l189 -272l-194 -283h-68z" />
+    <glyph glyph-name="_424" unicode="&#xf1c4;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+    <glyph glyph-name="_425" unicode="&#xf1c5;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+    <glyph glyph-name="_426" unicode="&#xf1c6;" 
+d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400
+v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79
+q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+    <glyph glyph-name="_427" unicode="&#xf1c7;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5
+q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+    <glyph glyph-name="_428" unicode="&#xf1c8;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+    <glyph glyph-name="_429" unicode="&#xf1c9;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243
+l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+    <glyph glyph-name="_430" unicode="&#xf1ca;" 
+d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406
+q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+    <glyph glyph-name="_431" unicode="&#xf1cb;" horiz-adv-x="1792" 
+d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
+q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+    <glyph glyph-name="_432" unicode="&#xf1cc;" horiz-adv-x="2048" 
+d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94
+q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55
+t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" />
+    <glyph glyph-name="_433" unicode="&#xf1cd;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194
+q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5
+t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+    <glyph glyph-name="_434" unicode="&#xf1ce;" horiz-adv-x="1792" 
+d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5
+t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
+    <glyph glyph-name="uniF1D0" unicode="&#xf1d0;" horiz-adv-x="1792" 
+d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41
+t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170
+t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136
+q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+    <glyph glyph-name="uniF1D1" unicode="&#xf1d1;" horiz-adv-x="1792" 
+d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251
+l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162
+q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33
+q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5
+t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF1D2" unicode="&#xf1d2;" 
+d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85
+q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392
+q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072
+q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_438" unicode="&#xf1d3;" horiz-adv-x="1792" 
+d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58
+q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47
+q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171
+v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+    <glyph glyph-name="_439" unicode="&#xf1d4;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF1D5" unicode="&#xf1d5;" horiz-adv-x="1280" 
+d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5
+t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153
+t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+    <glyph glyph-name="uniF1D6" unicode="&#xf1d6;" horiz-adv-x="1792" 
+d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5
+q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20
+t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5
+t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+    <glyph glyph-name="uniF1D7" unicode="&#xf1d7;" horiz-adv-x="2048" 
+d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25
+q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5
+q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109
+q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+    <glyph glyph-name="_443" unicode="&#xf1d8;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+    <glyph glyph-name="_444" unicode="&#xf1d9;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137
+l863 639l-478 -797z" />
+    <glyph glyph-name="_445" unicode="&#xf1da;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23
+t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_446" unicode="&#xf1db;" 
+d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_447" unicode="&#xf1dc;" horiz-adv-x="1792" 
+d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15
+t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2
+t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160
+q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5
+q0 -26 -12 -48t-36 -22z" />
+    <glyph glyph-name="_448" unicode="&#xf1dd;" horiz-adv-x="1280" 
+d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179
+q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+    <glyph glyph-name="_449" unicode="&#xf1de;" 
+d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256
+q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+    <glyph glyph-name="uniF1E0" unicode="&#xf1e0;" 
+d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5
+t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+    <glyph glyph-name="_451" unicode="&#xf1e1;" 
+d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5
+t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_452" unicode="&#xf1e2;" horiz-adv-x="1792" 
+d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5
+t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91
+q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9
+t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="_453" unicode="&#xf1e3;" horiz-adv-x="1792" 
+d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323
+l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+    <glyph glyph-name="_454" unicode="&#xf1e4;" horiz-adv-x="1792" 
+d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5
+t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+    <glyph glyph-name="_455" unicode="&#xf1e5;" horiz-adv-x="1792" 
+d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z
+M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_456" unicode="&#xf1e6;" horiz-adv-x="1792" 
+d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234
+l401 400q38 37 91 37t90 -37z" />
+    <glyph glyph-name="_457" unicode="&#xf1e7;" horiz-adv-x="1792" 
+d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5
+t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z
+M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7
+t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+    <glyph glyph-name="_458" unicode="&#xf1e8;" horiz-adv-x="1792" 
+d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+    <glyph glyph-name="_459" unicode="&#xf1e9;" 
+d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36
+q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5
+t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87
+q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+    <glyph glyph-name="_460" unicode="&#xf1ea;" horiz-adv-x="2048" 
+d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19
+t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+    <glyph glyph-name="_461" unicode="&#xf1eb;" horiz-adv-x="2048" 
+d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121
+q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z
+M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+    <glyph glyph-name="_462" unicode="&#xf1ec;" horiz-adv-x="1792" 
+d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5
+t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38
+h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_463" unicode="&#xf1ed;" 
+d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246
+q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598
+q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
+    <glyph glyph-name="_464" unicode="&#xf1ee;" horiz-adv-x="1792" 
+d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640
+q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
+    <glyph glyph-name="uniF1F0" unicode="&#xf1f0;" horiz-adv-x="2304" 
+d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27
+q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128
+q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_466" unicode="&#xf1f1;" horiz-adv-x="2304" 
+d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249
+q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z
+M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32
+h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4
+q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75
+q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14
+q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22
+q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12
+q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122
+h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5
+t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_467" unicode="&#xf1f2;" horiz-adv-x="2304" 
+d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42
+q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604
+v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569
+q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73
+t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+    <glyph glyph-name="f1f3" unicode="&#xf1f3;" horiz-adv-x="2304" 
+d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z
+M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260
+l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279
+v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040
+q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168
+q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5
+t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21
+h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5
+t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+    <glyph glyph-name="_469" unicode="&#xf1f4;" horiz-adv-x="2304" 
+d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16
+t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76
+q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59
+t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489
+l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66
+q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_470" unicode="&#xf1f5;" horiz-adv-x="2304" 
+d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109
+q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118
+q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151
+q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31
+q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_471" unicode="&#xf1f6;" horiz-adv-x="2048" 
+d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5
+l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5
+l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_472" unicode="&#xf1f7;" horiz-adv-x="2048" 
+d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128
+q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161
+q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_473" unicode="&#xf1f8;" horiz-adv-x="1408" 
+d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167
+q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_474" unicode="&#xf1f9;" 
+d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5
+t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5
+t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_475" unicode="&#xf1fa;" 
+d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53
+q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24
+t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61
+t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+    <glyph glyph-name="_476" unicode="&#xf1fb;" horiz-adv-x="1792" 
+d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10
+t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+    <glyph glyph-name="f1fc" unicode="&#xf1fc;" horiz-adv-x="1792" 
+d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5
+t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+    <glyph glyph-name="_478" unicode="&#xf1fd;" horiz-adv-x="1792" 
+d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5
+t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38
+t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448
+h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5
+q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+    <glyph glyph-name="_479" unicode="&#xf1fe;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+    <glyph glyph-name="_480" unicode="&#xf200;" horiz-adv-x="1792" 
+d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_481" unicode="&#xf201;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="_482" unicode="&#xf202;" horiz-adv-x="1792" 
+d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20
+q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50
+t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1
+q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+    <glyph glyph-name="_483" unicode="&#xf203;" 
+d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73
+q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110
+q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_484" unicode="&#xf204;" horiz-adv-x="2048" 
+d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5
+t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5
+t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+    <glyph glyph-name="_485" unicode="&#xf205;" horiz-adv-x="2048" 
+d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5
+t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+    <glyph glyph-name="_486" unicode="&#xf206;" horiz-adv-x="2304" 
+d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94
+q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469
+q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400
+q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="_487" unicode="&#xf207;" 
+d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5
+h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+    <glyph glyph-name="_488" unicode="&#xf208;" horiz-adv-x="2048" 
+d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327
+q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5
+q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+    <glyph glyph-name="_489" unicode="&#xf209;" horiz-adv-x="1280" 
+d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119
+t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5
+t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14
+q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88
+q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5
+t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+    <glyph glyph-name="_490" unicode="&#xf20a;" horiz-adv-x="2048" 
+d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206
+q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307
+t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14
+t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+    <glyph glyph-name="_491" unicode="&#xf20b;" 
+d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5
+t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_492" unicode="&#xf20c;" 
+d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55
+q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410
+q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+    <glyph glyph-name="_493" unicode="&#xf20d;" 
+d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+    <glyph glyph-name="_494" unicode="&#xf20e;" horiz-adv-x="2048" 
+d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335
+q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5
+q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438
+h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66
+l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946
+l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82
+zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+    <glyph glyph-name="f210" unicode="&#xf210;" 
+d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+    <glyph glyph-name="_496" unicode="&#xf211;" 
+d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384
+q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+    <glyph glyph-name="f212" unicode="&#xf212;" horiz-adv-x="2048" 
+d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021
+q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25
+q209 0 374 -102q172 107 374 102z" />
+    <glyph glyph-name="_498" unicode="&#xf213;" horiz-adv-x="2048" 
+d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101
+q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284
+q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+    <glyph glyph-name="_499" unicode="&#xf214;" 
+d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
+l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
+v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
+M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
+v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51
+h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5
+t-43 -34t-16.5 -53.5z" />
+    <glyph glyph-name="_500" unicode="&#xf215;" horiz-adv-x="2048" 
+d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832
+q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+    <glyph glyph-name="_501" unicode="&#xf216;" horiz-adv-x="2048" 
+d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5
+t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113
+t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5
+q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+    <glyph glyph-name="_502" unicode="&#xf217;" horiz-adv-x="1664" 
+d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_503" unicode="&#xf218;" horiz-adv-x="1664" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_504" unicode="&#xf219;" horiz-adv-x="2048" 
+d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20
+l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+    <glyph glyph-name="_505" unicode="&#xf21a;" horiz-adv-x="2048" 
+d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83
+q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314
+v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+    <glyph glyph-name="_506" unicode="&#xf21b;" 
+d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14
+t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5
+q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31
+t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+    <glyph glyph-name="_507" unicode="&#xf21c;" horiz-adv-x="2304" 
+d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5
+t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105
+l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226
+t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+    <glyph glyph-name="_508" unicode="&#xf21d;" 
+d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12
+q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384
+q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5
+t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_509" unicode="&#xf21e;" horiz-adv-x="1792" 
+d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221
+q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124
+t127 -344z" />
+    <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292
+q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+    <glyph glyph-name="_511" unicode="&#xf222;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5
+q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_512" unicode="&#xf223;" horiz-adv-x="1280" 
+d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5
+t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_513" unicode="&#xf224;" 
+d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_514" unicode="&#xf225;" horiz-adv-x="1792" 
+d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9
+t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_515" unicode="&#xf226;" horiz-adv-x="1792" 
+d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23
+t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391
+q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391
+q0 -226 -154 -391q103 -57 218 -57z" />
+    <glyph glyph-name="_516" unicode="&#xf227;" horiz-adv-x="1920" 
+d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230
+q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9
+t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128
+q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+    <glyph glyph-name="_517" unicode="&#xf228;" horiz-adv-x="2048" 
+d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23
+t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9
+t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5
+t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+    <glyph glyph-name="_518" unicode="&#xf229;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5
+t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_519" unicode="&#xf22a;" horiz-adv-x="1280" 
+d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22
+t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5
+t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_520" unicode="&#xf22b;" horiz-adv-x="2048" 
+d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5
+t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5
+t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_521" unicode="&#xf22c;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_522" unicode="&#xf22d;" horiz-adv-x="1280" 
+d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123
+t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
+    <glyph glyph-name="_523" unicode="&#xf22e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_524" unicode="&#xf22f;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_525" unicode="&#xf230;" 
+d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+    <glyph glyph-name="_526" unicode="&#xf231;" horiz-adv-x="1280" 
+d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5
+l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5
+q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+    <glyph glyph-name="_527" unicode="&#xf232;" 
+d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5
+t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233
+l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+    <glyph glyph-name="_528" unicode="&#xf233;" horiz-adv-x="1792" 
+d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216
+q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+    <glyph glyph-name="_529" unicode="&#xf234;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5
+t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+    <glyph glyph-name="_530" unicode="&#xf235;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136
+q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69
+t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+    <glyph glyph-name="_531" unicode="&#xf236;" horiz-adv-x="2048" 
+d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704
+q-26 0 -45 -19t-19 -45v-384h1152z" />
+    <glyph glyph-name="_532" unicode="&#xf237;" 
+d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+    <glyph glyph-name="_533" unicode="&#xf238;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56
+t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+    <glyph glyph-name="_534" unicode="&#xf239;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47
+t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+    <glyph glyph-name="_535" unicode="&#xf23a;" horiz-adv-x="1792" 
+d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116
+q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
+    <glyph glyph-name="_536" unicode="&#xf23b;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
+    <glyph glyph-name="_537" unicode="&#xf23c;" horiz-adv-x="2296" 
+d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5
+q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5
+q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42
+q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37
+q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5
+q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139
+q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8
+t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132
+q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132
+q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z
+M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86
+t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103
+q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4
+l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130
+t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150
+q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12
+q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
+    <glyph glyph-name="_538" unicode="&#xf23d;" horiz-adv-x="2304" 
+d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5
+t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5
+t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
+    <glyph glyph-name="_539" unicode="&#xf23e;" horiz-adv-x="1792" 
+d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348
+t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23
+t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512
+q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
+    <glyph glyph-name="_540" unicode="&#xf240;" horiz-adv-x="2304" 
+d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113
+v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="_541" unicode="&#xf241;" horiz-adv-x="2304" 
+d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_542" unicode="&#xf242;" horiz-adv-x="2304" 
+d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_543" unicode="&#xf243;" horiz-adv-x="2304" 
+d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_544" unicode="&#xf244;" horiz-adv-x="2304" 
+d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23
+v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_545" unicode="&#xf245;" horiz-adv-x="1280" 
+d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
+    <glyph glyph-name="_546" unicode="&#xf246;" horiz-adv-x="1024" 
+d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
+    <glyph glyph-name="_547" unicode="&#xf247;" horiz-adv-x="2048" 
+d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
+h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
+    <glyph glyph-name="_548" unicode="&#xf248;" horiz-adv-x="2304" 
+d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
+v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
+    <glyph glyph-name="_549" unicode="&#xf249;" 
+d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
+    <glyph glyph-name="_550" unicode="&#xf24a;" 
+d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="_551" unicode="&#xf24b;" horiz-adv-x="2304" 
+d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5
+t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88
+t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90
+t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_552" unicode="&#xf24c;" horiz-adv-x="2304" 
+d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294
+t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z
+M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_553" unicode="&#xf24d;" horiz-adv-x="1792" 
+d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113
+zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_554" unicode="&#xf24e;" horiz-adv-x="2304" 
+d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91
+t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5
+t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
+    <glyph glyph-name="_555" unicode="&#xf250;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5
+t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_556" unicode="&#xf251;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
+    <glyph glyph-name="_557" unicode="&#xf252;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
+    <glyph glyph-name="_558" unicode="&#xf253;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196
+h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_559" unicode="&#xf254;" 
+d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87
+t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9
+h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
+    <glyph glyph-name="_560" unicode="&#xf255;" 
+d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25
+q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27
+t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21
+q72 69 174 69z" />
+    <glyph glyph-name="_561" unicode="&#xf256;" horiz-adv-x="1792" 
+d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33
+t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52
+h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
+    <glyph glyph-name="_562" unicode="&#xf257;" horiz-adv-x="1792" 
+d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668
+q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17
+t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5
+t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5
+q0 -42 -23 -78t-61 -53l-310 -141h91z" />
+    <glyph glyph-name="_563" unicode="&#xf258;" horiz-adv-x="2048" 
+d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32
+q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68
+q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
+    <glyph glyph-name="_564" unicode="&#xf259;" horiz-adv-x="2048" 
+d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79
+t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24
+q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26
+l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" />
+    <glyph glyph-name="_565" unicode="&#xf25a;" horiz-adv-x="1792" 
+d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5
+q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5
+v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32
+v-384h32z" />
+    <glyph glyph-name="_566" unicode="&#xf25b;" 
+d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181
+v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46
+q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5
+q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308
+q0 -53 37.5 -90.5t90.5 -37.5h668z" />
+    <glyph glyph-name="_567" unicode="&#xf25c;" horiz-adv-x="1973" 
+d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5
+t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141
+q13 0 22 -8.5t10 -20.5z" />
+    <glyph glyph-name="_568" unicode="&#xf25d;" horiz-adv-x="1792" 
+d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109
+t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640
+q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_569" unicode="&#xf25e;" horiz-adv-x="1792" 
+d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78
+q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5
+t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376
+q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
+    <glyph glyph-name="f260" unicode="&#xf260;" horiz-adv-x="2048" 
+d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
+    <glyph glyph-name="f261" unicode="&#xf261;" horiz-adv-x="1792" 
+d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_572" unicode="&#xf262;" horiz-adv-x="2304" 
+d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57
+t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197
+t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5
+t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5
+t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5
+q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
+    <glyph glyph-name="f263" unicode="&#xf263;" horiz-adv-x="1280" 
+d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5
+t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94
+q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
+    <glyph glyph-name="_574" unicode="&#xf264;" 
+d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32
+q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5
+zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_575" unicode="&#xf265;" horiz-adv-x="1720" 
+d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33
+l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
+    <glyph glyph-name="_576" unicode="&#xf266;" horiz-adv-x="2304" 
+d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540
+q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81
+l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
+    <glyph glyph-name="_577" unicode="&#xf267;" horiz-adv-x="1792" 
+d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640
+q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5
+t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5
+t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5
+t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191
+t191 -286t71 -348z" />
+    <glyph glyph-name="_578" unicode="&#xf268;" horiz-adv-x="1792" 
+d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962
+q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
+    <glyph glyph-name="_579" unicode="&#xf269;" horiz-adv-x="1792" 
+d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5
+q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5
+q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
+    <glyph glyph-name="_580" unicode="&#xf26a;" horiz-adv-x="1792" 
+d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339
+q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z
+" />
+    <glyph glyph-name="_581" unicode="&#xf26b;" horiz-adv-x="1792" 
+d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606
+q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z
+M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
+    <glyph glyph-name="_582" unicode="&#xf26c;" horiz-adv-x="2048" 
+d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23
+v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_583" unicode="&#xf26d;" horiz-adv-x="1792" 
+d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34
+h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100
+q-68 175 -180 287z" />
+    <glyph glyph-name="_584" unicode="&#xf26e;" 
+d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6
+q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13
+q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249
+q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183
+q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46
+t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
+    <glyph glyph-name="_585" unicode="&#xf270;" horiz-adv-x="1792" 
+d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z
+M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30
+q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57
+t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133
+q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
+    <glyph glyph-name="_586" unicode="&#xf271;" horiz-adv-x="1792" 
+d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9
+h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224
+v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
+    <glyph glyph-name="_587" unicode="&#xf272;" horiz-adv-x="1792" 
+d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23
+t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_588" unicode="&#xf273;" horiz-adv-x="1792" 
+d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z
+M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_589" unicode="&#xf274;" horiz-adv-x="1792" 
+d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23
+t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_590" unicode="&#xf275;" horiz-adv-x="1792" 
+d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
+    <glyph glyph-name="_591" unicode="&#xf276;" horiz-adv-x="1024" 
+d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249
+q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
+    <glyph glyph-name="_592" unicode="&#xf277;" horiz-adv-x="1792" 
+d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768
+q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
+    <glyph glyph-name="_593" unicode="&#xf278;" horiz-adv-x="2048" 
+d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
+v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
+    <glyph glyph-name="_594" unicode="&#xf279;" horiz-adv-x="1792" 
+d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
+q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
+    <glyph glyph-name="_595" unicode="&#xf27a;" horiz-adv-x="1792" 
+d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37
+t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="_596" unicode="&#xf27b;" horiz-adv-x="1792" 
+d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5
+t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51
+t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
+    <glyph glyph-name="_597" unicode="&#xf27c;" horiz-adv-x="1024" 
+d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
+    <glyph glyph-name="_598" unicode="&#xf27d;" horiz-adv-x="1792" 
+d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246
+q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
+    <glyph glyph-name="f27e" unicode="&#xf27e;" 
+d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
+    <glyph glyph-name="uniF280" unicode="&#xf280;" 
+d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72
+h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275
+l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
+    <glyph glyph-name="uniF281" unicode="&#xf281;" horiz-adv-x="1792" 
+d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5
+l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44
+t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106
+q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
+    <glyph glyph-name="_602" unicode="&#xf282;" horiz-adv-x="1792" 
+d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53
+q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
+    <glyph glyph-name="_603" unicode="&#xf283;" horiz-adv-x="2304" 
+d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
+    <glyph glyph-name="_604" unicode="&#xf284;" horiz-adv-x="1792" 
+d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308
+t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20
+t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" />
+    <glyph glyph-name="uniF285" unicode="&#xf285;" horiz-adv-x="1792" 
+d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
+    <glyph glyph-name="uniF286" unicode="&#xf286;" horiz-adv-x="1792" 
+d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96
+q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5
+q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96
+q16 0 16 -16z" />
+    <glyph glyph-name="_607" unicode="&#xf287;" horiz-adv-x="2304" 
+d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96
+q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5
+t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
+    <glyph glyph-name="_608" unicode="&#xf288;" horiz-adv-x="1792" 
+d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348
+t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_609" unicode="&#xf289;" horiz-adv-x="2304" 
+d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22
+q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5
+q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13
+q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
+    <glyph glyph-name="_610" unicode="&#xf28a;" 
+d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83
+t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20
+q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5
+t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
+    <glyph glyph-name="_611" unicode="&#xf28b;" 
+d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103
+t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_612" unicode="&#xf28c;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
+    <glyph glyph-name="_613" unicode="&#xf28d;" 
+d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="_614" unicode="&#xf28e;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
+    <glyph glyph-name="_615" unicode="&#xf290;" horiz-adv-x="1792" 
+d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_616" unicode="&#xf291;" horiz-adv-x="2048" 
+d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5
+t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416
+q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441
+h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
+    <glyph glyph-name="_617" unicode="&#xf292;" horiz-adv-x="1792" 
+d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12
+q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311
+q15 0 25 -12q9 -12 6 -28z" />
+    <glyph glyph-name="_618" unicode="&#xf293;" 
+d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5
+t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
+    <glyph glyph-name="_619" unicode="&#xf294;" horiz-adv-x="1024" 
+d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
+    <glyph glyph-name="_620" unicode="&#xf295;" 
+d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5
+t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_621" unicode="&#xf296;" horiz-adv-x="1792" 
+d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
+    <glyph glyph-name="_622" unicode="&#xf297;" horiz-adv-x="1792" 
+d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111
+q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
+    <glyph glyph-name="_623" unicode="&#xf298;" 
+d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14
+t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
+    <glyph glyph-name="_624" unicode="&#xf299;" horiz-adv-x="1792" 
+d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57
+q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285
+q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
+    <glyph glyph-name="_625" unicode="&#xf29a;" horiz-adv-x="1792" 
+d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42
+q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298
+t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_626" unicode="&#xf29b;" 
+d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300
+l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z
+M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
+    <glyph glyph-name="_627" unicode="&#xf29c;" 
+d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5
+t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5
+t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5
+t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_628" unicode="&#xf29d;" horiz-adv-x="1408" 
+d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457
+q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521
+q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661
+q3 -1 7 1t7 4l3 2q11 9 11 17z" />
+    <glyph glyph-name="_629" unicode="&#xf29e;" horiz-adv-x="2304" 
+d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10
+t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5
+t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5
+h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96
+t9.5 -70.5z" />
+    <glyph glyph-name="uniF2A0" unicode="&#xf2a0;" horiz-adv-x="1408" 
+d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5
+q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127
+l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272
+t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249
+q-18 -19 -45 -19z" />
+    <glyph glyph-name="uniF2A1" unicode="&#xf2a1;" horiz-adv-x="2176" 
+d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136
+t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56
+t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56
+t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136
+t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="uniF2A2" unicode="&#xf2a2;" horiz-adv-x="1792" 
+d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z
+M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72
+t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45
+t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4
+q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
+    <glyph glyph-name="uniF2A3" unicode="&#xf2a3;" horiz-adv-x="2304" 
+d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55
+q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5
+q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101
+q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35
+q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5
+q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
+    <glyph glyph-name="uniF2A4" unicode="&#xf2a4;" horiz-adv-x="1792" 
+d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19
+t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74
+t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233
+l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
+    <glyph glyph-name="uniF2A5" unicode="&#xf2a5;" 
+d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2
+q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10
+q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2A6" unicode="&#xf2a6;" horiz-adv-x="1535" 
+d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5
+l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5
+q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9
+q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
+    <glyph glyph-name="uniF2A7" unicode="&#xf2a7;" horiz-adv-x="1664" 
+d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37
+t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
+l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148
+q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26
+l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
+    <glyph glyph-name="uniF2A8" unicode="&#xf2a8;" horiz-adv-x="1792" 
+d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5
+q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841
+q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5
+q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
+    <glyph glyph-name="uniF2A9" unicode="&#xf2a9;" horiz-adv-x="1280" 
+d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5
+q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z
+M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
+    <glyph glyph-name="uniF2AA" unicode="&#xf2aa;" 
+d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z
+M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5
+q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AB" unicode="&#xf2ab;" 
+d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114
+q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5
+t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="uniF2AC" unicode="&#xf2ac;" horiz-adv-x="1664" 
+d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35
+q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5
+t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
+    <glyph glyph-name="uniF2AD" unicode="&#xf2ad;" 
+d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115
+q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15
+t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AE" unicode="&#xf2ae;" horiz-adv-x="2304" 
+d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7
+q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158
+q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
+    <glyph glyph-name="uniF2B0" unicode="&#xf2b0;" 
+d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104
+q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108
+l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z
+M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
+    <glyph glyph-name="uniF2B1" unicode="&#xf2b1;" horiz-adv-x="1664" 
+d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5
+t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
+    <glyph glyph-name="uniF2B2" unicode="&#xf2b2;" horiz-adv-x="1792" 
+d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5
+t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114
+q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50
+q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5
+t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46
+q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5
+q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177
+t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
+    <glyph glyph-name="uniF2B3" unicode="&#xf2b3;" 
+d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110
+h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="uniF2B4" unicode="&#xf2b4;" 
+d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5
+q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B5" unicode="&#xf2b5;" horiz-adv-x="2304" 
+d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66
+l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180
+q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z
+M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421
+q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B6" unicode="&#xf2b6;" horiz-adv-x="1792" 
+d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107
+t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39
+q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" />
+    <glyph glyph-name="uniF2B7" unicode="&#xf2b7;" horiz-adv-x="1792" 
+d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5
+l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5
+h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94
+q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" />
+    <glyph glyph-name="uniF2B8" unicode="&#xf2b8;" 
+d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465
+l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161
+q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74
+q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" />
+    <glyph glyph-name="uniF2B9" unicode="&#xf2b9;" horiz-adv-x="1664" 
+d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576
+q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216
+q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="uniF2BA" unicode="&#xf2ba;" horiz-adv-x="1664" 
+d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5
+t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96
+q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216
+q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" />
+    <glyph glyph-name="uniF2BB" unicode="&#xf2bb;" horiz-adv-x="2048" 
+d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z
+M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568
+q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9
+h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BC" unicode="&#xf2bc;" horiz-adv-x="2048" 
+d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925
+q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568
+q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5
+t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113
+t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BD" unicode="&#xf2bd;" horiz-adv-x="1792" 
+d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5
+t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2BE" unicode="&#xf2be;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61
+t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z" />
+    <glyph glyph-name="uniF2C0" unicode="&#xf2c0;" 
+d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5
+t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145
+q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" />
+    <glyph glyph-name="uniF2C1" unicode="&#xf2c1;" horiz-adv-x="1280" 
+d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5
+t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352
+q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C2" unicode="&#xf2c2;" horiz-adv-x="2048" 
+d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56
+t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23
+v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728
+q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C3" unicode="&#xf2c3;" horiz-adv-x="2048" 
+d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z
+M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47
+h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C4" unicode="&#xf2c4;" horiz-adv-x="1792" 
+d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117
+q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5
+t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" />
+    <glyph glyph-name="uniF2C5" unicode="&#xf2c5;" horiz-adv-x="2304" 
+d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21
+t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46
+t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54
+t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29
+q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5
+t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314
+q2 -42 2 -64z" />
+    <glyph glyph-name="uniF2C6" unicode="&#xf2c6;" horiz-adv-x="1792" 
+d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2C7" unicode="&#xf2c7;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C8" unicode="&#xf2c8;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C9" unicode="&#xf2c9;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CA" unicode="&#xf2ca;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CB" unicode="&#xf2cb;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z
+M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
+    <glyph glyph-name="uniF2CC" unicode="&#xf2cc;" horiz-adv-x="1920" 
+d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41
+t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19
+t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19
+t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" />
+    <glyph glyph-name="uniF2CD" unicode="&#xf2cd;" horiz-adv-x="1792" 
+d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42
+q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9
+t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23
+t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" />
+    <glyph glyph-name="uniF2CE" unicode="&#xf2ce;" 
+d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5
+t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70
+q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20
+q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5
+t72.5 -263.5z" />
+    <glyph glyph-name="uniF2D0" unicode="&#xf2d0;" horiz-adv-x="1792" 
+d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D1" unicode="&#xf2d1;" horiz-adv-x="1792" 
+d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D2" unicode="&#xf2d2;" horiz-adv-x="2048" 
+d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="uniF2D3" unicode="&#xf2d3;" horiz-adv-x="1792" 
+d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10
+l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D4" unicode="&#xf2d4;" horiz-adv-x="1792" 
+d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D5" unicode="&#xf2d5;" horiz-adv-x="1792" 
+d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D6" unicode="&#xf2d6;" horiz-adv-x="1794" 
+d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12
+t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5
+t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5
+q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5
+q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34
+q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5
+t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D7" unicode="&#xf2d7;" 
+d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89
+q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5
+t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" />
+    <glyph glyph-name="uniF2D8" unicode="&#xf2d8;" 
+d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7
+t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5
+h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113
+v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D9" unicode="&#xf2d9;" horiz-adv-x="2176" 
+d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584
+q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5
+q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15
+q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82
+q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104
+t302 11t306.5 -97q220 -115 333 -336t87 -474z" />
+    <glyph glyph-name="uniF2DA" unicode="&#xf2da;" horiz-adv-x="1792" 
+d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178
+q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199
+t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297
+t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208
+t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" />
+    <glyph glyph-name="uniF2DB" unicode="&#xf2db;" 
+d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16
+q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28
+t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32
+q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16
+h48q16 0 16 -16z" />
+    <glyph glyph-name="uniF2DC" unicode="&#xf2dc;" horiz-adv-x="1664" 
+d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45
+t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33
+q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313
+l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106
+q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" />
+    <glyph glyph-name="uniF2DD" unicode="&#xf2dd;" horiz-adv-x="1792" 
+d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321
+q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" />
+    <glyph glyph-name="uniF2DE" unicode="&#xf2de;" horiz-adv-x="1792" 
+d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62
+t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71
+t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2E0" unicode="&#xf2e0;" horiz-adv-x="1920" 
+d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3
+t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53
+q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5
+q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5
+t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5
+q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z
+M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21
+q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16
+q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" />
+    <glyph glyph-name="uniF2E1" unicode="&#xf2e1;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E2" unicode="&#xf2e2;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E3" unicode="&#xf2e3;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E4" unicode="&#xf2e4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E5" unicode="&#xf2e5;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E6" unicode="&#xf2e6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E7" unicode="&#xf2e7;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_698" unicode="&#xf2e8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E9" unicode="&#xf2e9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EA" unicode="&#xf2ea;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EB" unicode="&#xf2eb;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EC" unicode="&#xf2ec;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2ED" unicode="&#xf2ed;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EE" unicode="&#xf2ee;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="lessequal" unicode="&#xf500;" horiz-adv-x="1792" 
+ />
+  </font>
+</defs></svg>
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.ttf b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.ttf differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.woff b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..400014a4b06eee3d0c0d54402a47ab2601b2862b
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.woff differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.woff2 b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/fontawesome-webfont.woff2 differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold-italic.woff b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold-italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..88ad05b9ff413055b4d4e89dd3eec1c193fa20c6
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold-italic.woff differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold-italic.woff2 b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..c4e3d804b57b625b16a36d767bfca6bbf63d414e
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold-italic.woff2 differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold.woff b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..c6dff51f063cc732fdb5fe786a8966de85f4ebec
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold.woff differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold.woff2 b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..bb195043cfc07fa52741c6144d7378b5ba8be4c5
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-bold.woff2 differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal-italic.woff b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal-italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..76114bc03362242c3325ecda6ce6d02bb737880f
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal-italic.woff differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal-italic.woff2 b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..3404f37e2e312757841abe20343588a7740768ca
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal-italic.woff2 differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal.woff b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal.woff
new file mode 100644
index 0000000000000000000000000000000000000000..ae1307ff5f4c48678621c240f8972d5a6e20b22c
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal.woff differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal.woff2 b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..3bf9843328a6359b6bd06e50010319c63da0d717
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/fonts/lato-normal.woff2 differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/theme.css b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/theme.css
new file mode 100644
index 0000000000000000000000000000000000000000..0d9ae7e1a45b82198c53548383a570d924993371
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/css/theme.css
@@ -0,0 +1,4 @@
+html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/custom.css b/VimbaX/doc/VimbaX_ReleaseNotes/_static/custom.css
new file mode 100644
index 0000000000000000000000000000000000000000..253f08d4161357c64af867f6f9e091a12b22e1e8
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/custom.css
@@ -0,0 +1,6247 @@
+html {
+  box-sizing: border-box;
+}
+*,
+:after,
+:before {
+  box-sizing: inherit;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+  display: block;
+}
+audio,
+canvas,
+video {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+}
+[hidden],
+audio:not([controls]) {
+  display: none;
+}
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+html {
+  font-size: 100%;
+  -webkit-text-size-adjust: 100%;
+  -ms-text-size-adjust: 100%;
+}
+body {
+  margin: 0;
+}
+a:active,
+a:hover {
+  outline: 0;
+}
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+b,
+strong {
+  font-weight: 700;
+}
+blockquote {
+  margin: 0;
+}
+dfn {
+  font-style: italic;
+}
+ins {
+  background: #ff9;
+  text-decoration: none;
+}
+ins,
+mark {
+  color: #000;
+}
+mark {
+  background: #ff0;
+  font-style: italic;
+  font-weight: 700;
+}
+.rst-content code,
+.rst-content tt,
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, serif;
+  _font-family: courier new, monospace;
+  font-size: 1em;
+}
+pre {
+  white-space: pre;
+}
+q {
+  quotes: none;
+}
+q:after,
+q:before {
+  content: "";
+  content: none;
+}
+small {
+  font-size: 85%;
+}
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+sup {
+  top: -0.5em;
+}
+sub {
+  bottom: -0.25em;
+}
+dl,
+ol,
+ul {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  list-style-image: none;
+}
+li {
+  list-style: none;
+}
+dd {
+  margin: 0;
+}
+img {
+  border: 0;
+  -ms-interpolation-mode: bicubic;
+  vertical-align: middle;
+  max-width: 100%;
+}
+svg:not(:root) {
+  overflow: hidden;
+}
+figure,
+form {
+  margin: 0;
+}
+label {
+  cursor: pointer;
+}
+button,
+input,
+select,
+textarea {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+}
+button,
+input {
+  line-height: normal;
+}
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  cursor: pointer;
+  -webkit-appearance: button;
+  *overflow: visible;
+}
+button[disabled],
+input[disabled] {
+  cursor: default;
+}
+input[type="search"] {
+  -webkit-appearance: textfield;
+  -moz-box-sizing: content-box;
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+}
+textarea {
+  resize: vertical;
+}
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+td {
+  vertical-align: top;
+}
+.chromeframe {
+  margin: 0.2em 0;
+  background: #ccc;
+  color: #000;
+  padding: 0.2em 0;
+}
+.ir {
+  display: block;
+  border: 0;
+  text-indent: -999em;
+  overflow: hidden;
+  background-color: transparent;
+  background-repeat: no-repeat;
+  text-align: left;
+  direction: ltr;
+  *line-height: 0;
+}
+.ir br {
+  display: none;
+}
+.hidden {
+  display: none !important;
+  visibility: hidden;
+}
+.visuallyhidden {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+}
+.visuallyhidden.focusable:active,
+.visuallyhidden.focusable:focus {
+  clip: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  position: static;
+  width: auto;
+}
+.invisible {
+  visibility: hidden;
+}
+.relative {
+  position: relative;
+}
+big,
+small {
+  font-size: 100%;
+}
+@media print {
+  body,
+  html,
+  section {
+    background: none !important;
+  }
+  * {
+    box-shadow: none !important;
+    text-shadow: none !important;
+    filter: none !important;
+    -ms-filter: none !important;
+  }
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+  .ir a:after,
+  a[href^="#"]:after,
+  a[href^="javascript:"]:after {
+    content: "";
+  }
+  blockquote,
+  pre {
+    page-break-inside: avoid;
+  }
+  thead {
+    display: table-header-group;
+  }
+  img,
+  tr {
+    page-break-inside: avoid;
+  }
+  img {
+    max-width: 100% !important;
+  }
+  @page {
+    margin: 0.5cm;
+  }
+  .rst-content .toctree-wrapper > p.caption,
+  h2,
+  h3,
+  p {
+    orphans: 3;
+    widows: 3;
+  }
+  .rst-content .toctree-wrapper > p.caption,
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+}
+.btn,
+.fa:before,
+.icon:before,
+.rst-content .admonition,
+.rst-content .admonition-title:before,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .code-block-caption .headerlink:before,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning,
+.rst-content code.download span:first-child:before,
+.rst-content dl dt .headerlink:before,
+.rst-content h1 .headerlink:before,
+.rst-content h2 .headerlink:before,
+.rst-content h3 .headerlink:before,
+.rst-content h4 .headerlink:before,
+.rst-content h5 .headerlink:before,
+.rst-content h6 .headerlink:before,
+.rst-content p.caption .headerlink:before,
+.rst-content table > caption .headerlink:before,
+.rst-content tt.download span:first-child:before,
+.wy-alert,
+.wy-dropdown .caret:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,
+.wy-menu-vertical li.current > a,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a,
+.wy-menu-vertical li.on a span.toctree-expand:before,
+.wy-menu-vertical li span.toctree-expand:before,
+.wy-nav-top a,
+.wy-side-nav-search .wy-dropdown > a,
+.wy-side-nav-search > a,
+input[type="color"],
+input[type="date"],
+input[type="datetime-local"],
+input[type="datetime"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"],
+select,
+textarea {
+  -webkit-font-smoothing: antialiased;
+}
+.clearfix {
+  *zoom: 1;
+}
+.clearfix:after,
+.clearfix:before {
+  display: table;
+  content: "";
+}
+.clearfix:after {
+  clear: both;
+} /*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+@font-face {
+  font-family: FontAwesome;
+  src: url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);
+  src: url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0)
+      format("embedded-opentype"),
+    url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e)
+      format("woff2"),
+    url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad)
+      format("woff"),
+    url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9)
+      format("truetype"),
+    url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular)
+      format("svg");
+  font-weight: 400;
+  font-style: normal;
+}
+.fa,
+.icon,
+.rst-content .admonition-title,
+.rst-content .code-block-caption .headerlink,
+.rst-content code.download span:first-child,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink,
+.rst-content tt.download span:first-child,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li span.toctree-expand {
+  display: inline-block;
+  font: normal normal normal 14px/1 FontAwesome;
+  font-size: inherit;
+  text-rendering: auto;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.fa-lg {
+  font-size: 1.33333em;
+  line-height: 0.75em;
+  vertical-align: -15%;
+}
+.fa-2x {
+  font-size: 2em;
+}
+.fa-3x {
+  font-size: 3em;
+}
+.fa-4x {
+  font-size: 4em;
+}
+.fa-5x {
+  font-size: 5em;
+}
+.fa-fw {
+  width: 1.28571em;
+  text-align: center;
+}
+.fa-ul {
+  padding-left: 0;
+  margin-left: 2.14286em;
+  list-style-type: none;
+}
+.fa-ul > li {
+  position: relative;
+}
+.fa-li {
+  position: absolute;
+  left: -2.14286em;
+  width: 2.14286em;
+  top: 0.14286em;
+  text-align: center;
+}
+.fa-li.fa-lg {
+  left: -1.85714em;
+}
+.fa-border {
+  padding: 0.2em 0.25em 0.15em;
+  border: 0.08em solid #eee;
+  border-radius: 0.1em;
+}
+.fa-pull-left {
+  float: left;
+}
+.fa-pull-right {
+  float: right;
+}
+.fa-pull-left.icon,
+.fa.fa-pull-left,
+.rst-content .code-block-caption .fa-pull-left.headerlink,
+.rst-content .fa-pull-left.admonition-title,
+.rst-content code.download span.fa-pull-left:first-child,
+.rst-content dl dt .fa-pull-left.headerlink,
+.rst-content h1 .fa-pull-left.headerlink,
+.rst-content h2 .fa-pull-left.headerlink,
+.rst-content h3 .fa-pull-left.headerlink,
+.rst-content h4 .fa-pull-left.headerlink,
+.rst-content h5 .fa-pull-left.headerlink,
+.rst-content h6 .fa-pull-left.headerlink,
+.rst-content p.caption .fa-pull-left.headerlink,
+.rst-content table > caption .fa-pull-left.headerlink,
+.rst-content tt.download span.fa-pull-left:first-child,
+.wy-menu-vertical li.current > a span.fa-pull-left.toctree-expand,
+.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,
+.wy-menu-vertical li span.fa-pull-left.toctree-expand {
+  margin-right: 0.3em;
+}
+.fa-pull-right.icon,
+.fa.fa-pull-right,
+.rst-content .code-block-caption .fa-pull-right.headerlink,
+.rst-content .fa-pull-right.admonition-title,
+.rst-content code.download span.fa-pull-right:first-child,
+.rst-content dl dt .fa-pull-right.headerlink,
+.rst-content h1 .fa-pull-right.headerlink,
+.rst-content h2 .fa-pull-right.headerlink,
+.rst-content h3 .fa-pull-right.headerlink,
+.rst-content h4 .fa-pull-right.headerlink,
+.rst-content h5 .fa-pull-right.headerlink,
+.rst-content h6 .fa-pull-right.headerlink,
+.rst-content p.caption .fa-pull-right.headerlink,
+.rst-content table > caption .fa-pull-right.headerlink,
+.rst-content tt.download span.fa-pull-right:first-child,
+.wy-menu-vertical li.current > a span.fa-pull-right.toctree-expand,
+.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,
+.wy-menu-vertical li span.fa-pull-right.toctree-expand {
+  margin-left: 0.3em;
+}
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+.fa.pull-left,
+.pull-left.icon,
+.rst-content .code-block-caption .pull-left.headerlink,
+.rst-content .pull-left.admonition-title,
+.rst-content code.download span.pull-left:first-child,
+.rst-content dl dt .pull-left.headerlink,
+.rst-content h1 .pull-left.headerlink,
+.rst-content h2 .pull-left.headerlink,
+.rst-content h3 .pull-left.headerlink,
+.rst-content h4 .pull-left.headerlink,
+.rst-content h5 .pull-left.headerlink,
+.rst-content h6 .pull-left.headerlink,
+.rst-content p.caption .pull-left.headerlink,
+.rst-content table > caption .pull-left.headerlink,
+.rst-content tt.download span.pull-left:first-child,
+.wy-menu-vertical li.current > a span.pull-left.toctree-expand,
+.wy-menu-vertical li.on a span.pull-left.toctree-expand,
+.wy-menu-vertical li span.pull-left.toctree-expand {
+  margin-right: 0.3em;
+}
+.fa.pull-right,
+.pull-right.icon,
+.rst-content .code-block-caption .pull-right.headerlink,
+.rst-content .pull-right.admonition-title,
+.rst-content code.download span.pull-right:first-child,
+.rst-content dl dt .pull-right.headerlink,
+.rst-content h1 .pull-right.headerlink,
+.rst-content h2 .pull-right.headerlink,
+.rst-content h3 .pull-right.headerlink,
+.rst-content h4 .pull-right.headerlink,
+.rst-content h5 .pull-right.headerlink,
+.rst-content h6 .pull-right.headerlink,
+.rst-content p.caption .pull-right.headerlink,
+.rst-content table > caption .pull-right.headerlink,
+.rst-content tt.download span.pull-right:first-child,
+.wy-menu-vertical li.current > a span.pull-right.toctree-expand,
+.wy-menu-vertical li.on a span.pull-right.toctree-expand,
+.wy-menu-vertical li span.pull-right.toctree-expand {
+  margin-left: 0.3em;
+}
+.fa-spin {
+  -webkit-animation: fa-spin 2s linear infinite;
+  animation: fa-spin 2s linear infinite;
+}
+.fa-pulse {
+  -webkit-animation: fa-spin 1s steps(8) infinite;
+  animation: fa-spin 1s steps(8) infinite;
+}
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+.fa-rotate-90 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+  -webkit-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.fa-rotate-180 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+  -webkit-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.fa-rotate-270 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+  -webkit-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+  -webkit-transform: scaleX(-1);
+  -ms-transform: scaleX(-1);
+  transform: scaleX(-1);
+}
+.fa-flip-vertical {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+  -webkit-transform: scaleY(-1);
+  -ms-transform: scaleY(-1);
+  transform: scaleY(-1);
+}
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical,
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270 {
+  filter: none;
+}
+.fa-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.fa-stack-1x {
+  line-height: inherit;
+}
+.fa-stack-2x {
+  font-size: 2em;
+}
+.fa-inverse {
+  color: #fff;
+}
+.fa-glass:before {
+  content: "";
+}
+.fa-music:before {
+  content: "";
+}
+.fa-search:before,
+.icon-search:before {
+  content: "";
+}
+.fa-envelope-o:before {
+  content: "";
+}
+.fa-heart:before {
+  content: "";
+}
+.fa-star:before {
+  content: "";
+}
+.fa-star-o:before {
+  content: "";
+}
+.fa-user:before {
+  content: "";
+}
+.fa-film:before {
+  content: "";
+}
+.fa-th-large:before {
+  content: "";
+}
+.fa-th:before {
+  content: "";
+}
+.fa-th-list:before {
+  content: "";
+}
+.fa-check:before {
+  content: "";
+}
+.fa-close:before,
+.fa-remove:before,
+.fa-times:before {
+  content: "";
+}
+.fa-search-plus:before {
+  content: "";
+}
+.fa-search-minus:before {
+  content: "";
+}
+.fa-power-off:before {
+  content: "";
+}
+.fa-signal:before {
+  content: "";
+}
+.fa-cog:before,
+.fa-gear:before {
+  content: "";
+}
+.fa-trash-o:before {
+  content: "";
+}
+.fa-home:before,
+.icon-home:before {
+  content: "";
+}
+.fa-file-o:before {
+  content: "";
+}
+.fa-clock-o:before {
+  content: "";
+}
+.fa-road:before {
+  content: "";
+}
+.fa-download:before,
+.rst-content code.download span:first-child:before,
+.rst-content tt.download span:first-child:before {
+  content: "";
+}
+.fa-arrow-circle-o-down:before {
+  content: "";
+}
+.fa-arrow-circle-o-up:before {
+  content: "";
+}
+.fa-inbox:before {
+  content: "";
+}
+.fa-play-circle-o:before {
+  content: "";
+}
+.fa-repeat:before,
+.fa-rotate-right:before {
+  content: "";
+}
+.fa-refresh:before {
+  content: "";
+}
+.fa-list-alt:before {
+  content: "";
+}
+.fa-lock:before {
+  content: "";
+}
+.fa-flag:before {
+  content: "";
+}
+.fa-headphones:before {
+  content: "";
+}
+.fa-volume-off:before {
+  content: "";
+}
+.fa-volume-down:before {
+  content: "";
+}
+.fa-volume-up:before {
+  content: "";
+}
+.fa-qrcode:before {
+  content: "";
+}
+.fa-barcode:before {
+  content: "";
+}
+.fa-tag:before {
+  content: "";
+}
+.fa-tags:before {
+  content: "";
+}
+.fa-book:before,
+.icon-book:before {
+  content: "";
+}
+.fa-bookmark:before {
+  content: "";
+}
+.fa-print:before {
+  content: "";
+}
+.fa-camera:before {
+  content: "";
+}
+.fa-font:before {
+  content: "";
+}
+.fa-bold:before {
+  content: "";
+}
+.fa-italic:before {
+  content: "";
+}
+.fa-text-height:before {
+  content: "";
+}
+.fa-text-width:before {
+  content: "";
+}
+.fa-align-left:before {
+  content: "";
+}
+.fa-align-center:before {
+  content: "";
+}
+.fa-align-right:before {
+  content: "";
+}
+.fa-align-justify:before {
+  content: "";
+}
+.fa-list:before {
+  content: "";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+  content: "";
+}
+.fa-indent:before {
+  content: "";
+}
+.fa-video-camera:before {
+  content: "";
+}
+.fa-image:before,
+.fa-photo:before,
+.fa-picture-o:before {
+  content: "";
+}
+.fa-pencil:before {
+  content: "";
+}
+.fa-map-marker:before {
+  content: "";
+}
+.fa-adjust:before {
+  content: "";
+}
+.fa-tint:before {
+  content: "";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+  content: "";
+}
+.fa-share-square-o:before {
+  content: "";
+}
+.fa-check-square-o:before {
+  content: "";
+}
+.fa-arrows:before {
+  content: "";
+}
+.fa-step-backward:before {
+  content: "";
+}
+.fa-fast-backward:before {
+  content: "";
+}
+.fa-backward:before {
+  content: "";
+}
+.fa-play:before {
+  content: "";
+}
+.fa-pause:before {
+  content: "";
+}
+.fa-stop:before {
+  content: "";
+}
+.fa-forward:before {
+  content: "";
+}
+.fa-fast-forward:before {
+  content: "";
+}
+.fa-step-forward:before {
+  content: "";
+}
+.fa-eject:before {
+  content: "";
+}
+.fa-chevron-left:before {
+  content: "";
+}
+.fa-chevron-right:before {
+  content: "";
+}
+.fa-plus-circle:before {
+  content: "";
+}
+.fa-minus-circle:before {
+  content: "";
+}
+.fa-times-circle:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before {
+  content: "";
+}
+.fa-check-circle:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before {
+  content: "";
+}
+.fa-question-circle:before {
+  content: "";
+}
+.fa-info-circle:before {
+  content: "";
+}
+.fa-crosshairs:before {
+  content: "";
+}
+.fa-times-circle-o:before {
+  content: "";
+}
+.fa-check-circle-o:before {
+  content: "";
+}
+.fa-ban:before {
+  content: "";
+}
+.fa-arrow-left:before {
+  content: "";
+}
+.fa-arrow-right:before {
+  content: "";
+}
+.fa-arrow-up:before {
+  content: "";
+}
+.fa-arrow-down:before {
+  content: "";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+  content: "";
+}
+.fa-expand:before {
+  content: "";
+}
+.fa-compress:before {
+  content: "";
+}
+.fa-plus:before {
+  content: "";
+}
+.fa-minus:before {
+  content: "";
+}
+.fa-asterisk:before {
+  content: "";
+}
+.fa-exclamation-circle:before,
+.rst-content .admonition-title:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before {
+  content: "";
+}
+.fa-gift:before {
+  content: "";
+}
+.fa-leaf:before {
+  content: "";
+}
+.fa-fire:before,
+.icon-fire:before {
+  content: "";
+}
+.fa-eye:before {
+  content: "";
+}
+.fa-eye-slash:before {
+  content: "";
+}
+.fa-exclamation-triangle:before,
+.fa-warning:before {
+  content: "";
+}
+.fa-plane:before {
+  content: "";
+}
+.fa-calendar:before {
+  content: "";
+}
+.fa-random:before {
+  content: "";
+}
+.fa-comment:before {
+  content: "";
+}
+.fa-magnet:before {
+  content: "";
+}
+.fa-chevron-up:before {
+  content: "";
+}
+.fa-chevron-down:before {
+  content: "";
+}
+.fa-retweet:before {
+  content: "";
+}
+.fa-shopping-cart:before {
+  content: "";
+}
+.fa-folder:before {
+  content: "";
+}
+.fa-folder-open:before {
+  content: "";
+}
+.fa-arrows-v:before {
+  content: "";
+}
+.fa-arrows-h:before {
+  content: "";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+  content: "";
+}
+.fa-twitter-square:before {
+  content: "";
+}
+.fa-facebook-square:before {
+  content: "";
+}
+.fa-camera-retro:before {
+  content: "";
+}
+.fa-key:before {
+  content: "";
+}
+.fa-cogs:before,
+.fa-gears:before {
+  content: "";
+}
+.fa-comments:before {
+  content: "";
+}
+.fa-thumbs-o-up:before {
+  content: "";
+}
+.fa-thumbs-o-down:before {
+  content: "";
+}
+.fa-star-half:before {
+  content: "";
+}
+.fa-heart-o:before {
+  content: "";
+}
+.fa-sign-out:before {
+  content: "";
+}
+.fa-linkedin-square:before {
+  content: "";
+}
+.fa-thumb-tack:before {
+  content: "";
+}
+.fa-external-link:before {
+  content: "";
+}
+.fa-sign-in:before {
+  content: "";
+}
+.fa-trophy:before {
+  content: "";
+}
+.fa-github-square:before {
+  content: "";
+}
+.fa-upload:before {
+  content: "";
+}
+.fa-lemon-o:before {
+  content: "";
+}
+.fa-phone:before {
+  content: "";
+}
+.fa-square-o:before {
+  content: "";
+}
+.fa-bookmark-o:before {
+  content: "";
+}
+.fa-phone-square:before {
+  content: "";
+}
+.fa-twitter:before {
+  content: "";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+  content: "";
+}
+.fa-github:before,
+.icon-github:before {
+  content: "";
+}
+.fa-unlock:before {
+  content: "";
+}
+.fa-credit-card:before {
+  content: "";
+}
+.fa-feed:before,
+.fa-rss:before {
+  content: "";
+}
+.fa-hdd-o:before {
+  content: "";
+}
+.fa-bullhorn:before {
+  content: "";
+}
+.fa-bell:before {
+  content: "";
+}
+.fa-certificate:before {
+  content: "";
+}
+.fa-hand-o-right:before {
+  content: "";
+}
+.fa-hand-o-left:before {
+  content: "";
+}
+.fa-hand-o-up:before {
+  content: "";
+}
+.fa-hand-o-down:before {
+  content: "";
+}
+.fa-arrow-circle-left:before,
+.icon-circle-arrow-left:before {
+  content: "";
+}
+.fa-arrow-circle-right:before,
+.icon-circle-arrow-right:before {
+  content: "";
+}
+.fa-arrow-circle-up:before {
+  content: "";
+}
+.fa-arrow-circle-down:before {
+  content: "";
+}
+.fa-globe:before {
+  content: "";
+}
+.fa-wrench:before {
+  content: "";
+}
+.fa-tasks:before {
+  content: "";
+}
+.fa-filter:before {
+  content: "";
+}
+.fa-briefcase:before {
+  content: "";
+}
+.fa-arrows-alt:before {
+  content: "";
+}
+.fa-group:before,
+.fa-users:before {
+  content: "";
+}
+.fa-chain:before,
+.fa-link:before,
+.icon-link:before {
+  content: "";
+}
+.fa-cloud:before {
+  content: "";
+}
+.fa-flask:before {
+  content: "";
+}
+.fa-cut:before,
+.fa-scissors:before {
+  content: "";
+}
+.fa-copy:before,
+.fa-files-o:before {
+  content: "";
+}
+.fa-paperclip:before {
+  content: "";
+}
+.fa-floppy-o:before,
+.fa-save:before {
+  content: "";
+}
+.fa-square:before {
+  content: "";
+}
+.fa-bars:before,
+.fa-navicon:before,
+.fa-reorder:before {
+  content: "";
+}
+.fa-list-ul:before {
+  content: "";
+}
+.fa-list-ol:before {
+  content: "";
+}
+.fa-strikethrough:before {
+  content: "";
+}
+.fa-underline:before {
+  content: "";
+}
+.fa-table:before {
+  content: "";
+}
+.fa-magic:before {
+  content: "";
+}
+.fa-truck:before {
+  content: "";
+}
+.fa-pinterest:before {
+  content: "";
+}
+.fa-pinterest-square:before {
+  content: "";
+}
+.fa-google-plus-square:before {
+  content: "";
+}
+.fa-google-plus:before {
+  content: "";
+}
+.fa-money:before {
+  content: "";
+}
+.fa-caret-down:before,
+.icon-caret-down:before,
+.wy-dropdown .caret:before {
+  content: "";
+}
+.fa-caret-up:before {
+  content: "";
+}
+.fa-caret-left:before {
+  content: "";
+}
+.fa-caret-right:before {
+  content: "";
+}
+.fa-columns:before {
+  content: "";
+}
+.fa-sort:before,
+.fa-unsorted:before {
+  content: "";
+}
+.fa-sort-desc:before,
+.fa-sort-down:before {
+  content: "";
+}
+.fa-sort-asc:before,
+.fa-sort-up:before {
+  content: "";
+}
+.fa-envelope:before {
+  content: "";
+}
+.fa-linkedin:before {
+  content: "";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+  content: "";
+}
+.fa-gavel:before,
+.fa-legal:before {
+  content: "";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+  content: "";
+}
+.fa-comment-o:before {
+  content: "";
+}
+.fa-comments-o:before {
+  content: "";
+}
+.fa-bolt:before,
+.fa-flash:before {
+  content: "";
+}
+.fa-sitemap:before {
+  content: "";
+}
+.fa-umbrella:before {
+  content: "";
+}
+.fa-clipboard:before,
+.fa-paste:before {
+  content: "";
+}
+.fa-lightbulb-o:before {
+  content: "";
+}
+.fa-exchange:before {
+  content: "";
+}
+.fa-cloud-download:before {
+  content: "";
+}
+.fa-cloud-upload:before {
+  content: "";
+}
+.fa-user-md:before {
+  content: "";
+}
+.fa-stethoscope:before {
+  content: "";
+}
+.fa-suitcase:before {
+  content: "";
+}
+.fa-bell-o:before {
+  content: "";
+}
+.fa-coffee:before {
+  content: "";
+}
+.fa-cutlery:before {
+  content: "";
+}
+.fa-file-text-o:before {
+  content: "";
+}
+.fa-building-o:before {
+  content: "";
+}
+.fa-hospital-o:before {
+  content: "";
+}
+.fa-ambulance:before {
+  content: "";
+}
+.fa-medkit:before {
+  content: "";
+}
+.fa-fighter-jet:before {
+  content: "";
+}
+.fa-beer:before {
+  content: "";
+}
+.fa-h-square:before {
+  content: "";
+}
+.fa-plus-square:before {
+  content: "";
+}
+.fa-angle-double-left:before {
+  content: "";
+}
+.fa-angle-double-right:before {
+  content: "";
+}
+.fa-angle-double-up:before {
+  content: "";
+}
+.fa-angle-double-down:before {
+  content: "";
+}
+.fa-angle-left:before {
+  content: "";
+}
+.fa-angle-right:before {
+  content: "";
+}
+.fa-angle-up:before {
+  content: "";
+}
+.fa-angle-down:before {
+  content: "";
+}
+.fa-desktop:before {
+  content: "";
+}
+.fa-laptop:before {
+  content: "";
+}
+.fa-tablet:before {
+  content: "";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+  content: "";
+}
+.fa-circle-o:before {
+  content: "";
+}
+.fa-quote-left:before {
+  content: "";
+}
+.fa-quote-right:before {
+  content: "";
+}
+.fa-spinner:before {
+  content: "";
+}
+.fa-circle:before {
+  content: "";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+  content: "";
+}
+.fa-github-alt:before {
+  content: "";
+}
+.fa-folder-o:before {
+  content: "";
+}
+.fa-folder-open-o:before {
+  content: "";
+}
+.fa-smile-o:before {
+  content: "";
+}
+.fa-frown-o:before {
+  content: "";
+}
+.fa-meh-o:before {
+  content: "";
+}
+.fa-gamepad:before {
+  content: "";
+}
+.fa-keyboard-o:before {
+  content: "";
+}
+.fa-flag-o:before {
+  content: "";
+}
+.fa-flag-checkered:before {
+  content: "";
+}
+.fa-terminal:before {
+  content: "";
+}
+.fa-code:before {
+  content: "";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+  content: "";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+  content: "";
+}
+.fa-location-arrow:before {
+  content: "";
+}
+.fa-crop:before {
+  content: "";
+}
+.fa-code-fork:before {
+  content: "";
+}
+.fa-chain-broken:before,
+.fa-unlink:before {
+  content: "";
+}
+.fa-question:before {
+  content: "";
+}
+.fa-info:before {
+  content: "";
+}
+.fa-exclamation:before {
+  content: "";
+}
+.fa-superscript:before {
+  content: "";
+}
+.fa-subscript:before {
+  content: "";
+}
+.fa-eraser:before {
+  content: "";
+}
+.fa-puzzle-piece:before {
+  content: "";
+}
+.fa-microphone:before {
+  content: "";
+}
+.fa-microphone-slash:before {
+  content: "";
+}
+.fa-shield:before {
+  content: "";
+}
+.fa-calendar-o:before {
+  content: "";
+}
+.fa-fire-extinguisher:before {
+  content: "";
+}
+.fa-rocket:before {
+  content: "";
+}
+.fa-maxcdn:before {
+  content: "";
+}
+.fa-chevron-circle-left:before {
+  content: "";
+}
+.fa-chevron-circle-right:before {
+  content: "";
+}
+.fa-chevron-circle-up:before {
+  content: "";
+}
+.fa-chevron-circle-down:before {
+  content: "";
+}
+.fa-html5:before {
+  content: "";
+}
+.fa-css3:before {
+  content: "";
+}
+.fa-anchor:before {
+  content: "";
+}
+.fa-unlock-alt:before {
+  content: "";
+}
+.fa-bullseye:before {
+  content: "";
+}
+.fa-ellipsis-h:before {
+  content: "";
+}
+.fa-ellipsis-v:before {
+  content: "";
+}
+.fa-rss-square:before {
+  content: "";
+}
+.fa-play-circle:before {
+  content: "";
+}
+.fa-ticket:before {
+  content: "";
+}
+.fa-minus-square:before {
+  content: "";
+}
+.fa-minus-square-o:before,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a span.toctree-expand:before {
+  content: "";
+}
+.fa-level-up:before {
+  content: "";
+}
+.fa-level-down:before {
+  content: "";
+}
+.fa-check-square:before {
+  content: "";
+}
+.fa-pencil-square:before {
+  content: "";
+}
+.fa-external-link-square:before {
+  content: "";
+}
+.fa-share-square:before {
+  content: "";
+}
+.fa-compass:before {
+  content: "";
+}
+.fa-caret-square-o-down:before,
+.fa-toggle-down:before {
+  content: "";
+}
+.fa-caret-square-o-up:before,
+.fa-toggle-up:before {
+  content: "";
+}
+.fa-caret-square-o-right:before,
+.fa-toggle-right:before {
+  content: "";
+}
+.fa-eur:before,
+.fa-euro:before {
+  content: "";
+}
+.fa-gbp:before {
+  content: "";
+}
+.fa-dollar:before,
+.fa-usd:before {
+  content: "";
+}
+.fa-inr:before,
+.fa-rupee:before {
+  content: "";
+}
+.fa-cny:before,
+.fa-jpy:before,
+.fa-rmb:before,
+.fa-yen:before {
+  content: "";
+}
+.fa-rouble:before,
+.fa-rub:before,
+.fa-ruble:before {
+  content: "";
+}
+.fa-krw:before,
+.fa-won:before {
+  content: "";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+  content: "";
+}
+.fa-file:before {
+  content: "";
+}
+.fa-file-text:before {
+  content: "";
+}
+.fa-sort-alpha-asc:before {
+  content: "";
+}
+.fa-sort-alpha-desc:before {
+  content: "";
+}
+.fa-sort-amount-asc:before {
+  content: "";
+}
+.fa-sort-amount-desc:before {
+  content: "";
+}
+.fa-sort-numeric-asc:before {
+  content: "";
+}
+.fa-sort-numeric-desc:before {
+  content: "";
+}
+.fa-thumbs-up:before {
+  content: "";
+}
+.fa-thumbs-down:before {
+  content: "";
+}
+.fa-youtube-square:before {
+  content: "";
+}
+.fa-youtube:before {
+  content: "";
+}
+.fa-xing:before {
+  content: "";
+}
+.fa-xing-square:before {
+  content: "";
+}
+.fa-youtube-play:before {
+  content: "";
+}
+.fa-dropbox:before {
+  content: "";
+}
+.fa-stack-overflow:before {
+  content: "";
+}
+.fa-instagram:before {
+  content: "";
+}
+.fa-flickr:before {
+  content: "";
+}
+.fa-adn:before {
+  content: "";
+}
+.fa-bitbucket:before,
+.icon-bitbucket:before {
+  content: "";
+}
+.fa-bitbucket-square:before {
+  content: "";
+}
+.fa-tumblr:before {
+  content: "";
+}
+.fa-tumblr-square:before {
+  content: "";
+}
+.fa-long-arrow-down:before {
+  content: "";
+}
+.fa-long-arrow-up:before {
+  content: "";
+}
+.fa-long-arrow-left:before {
+  content: "";
+}
+.fa-long-arrow-right:before {
+  content: "";
+}
+.fa-apple:before {
+  content: "";
+}
+.fa-windows:before {
+  content: "";
+}
+.fa-android:before {
+  content: "";
+}
+.fa-linux:before {
+  content: "";
+}
+.fa-dribbble:before {
+  content: "";
+}
+.fa-skype:before {
+  content: "";
+}
+.fa-foursquare:before {
+  content: "";
+}
+.fa-trello:before {
+  content: "";
+}
+.fa-female:before {
+  content: "";
+}
+.fa-male:before {
+  content: "";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+  content: "";
+}
+.fa-sun-o:before {
+  content: "";
+}
+.fa-moon-o:before {
+  content: "";
+}
+.fa-archive:before {
+  content: "";
+}
+.fa-bug:before {
+  content: "";
+}
+.fa-vk:before {
+  content: "";
+}
+.fa-weibo:before {
+  content: "";
+}
+.fa-renren:before {
+  content: "";
+}
+.fa-pagelines:before {
+  content: "";
+}
+.fa-stack-exchange:before {
+  content: "";
+}
+.fa-arrow-circle-o-right:before {
+  content: "";
+}
+.fa-arrow-circle-o-left:before {
+  content: "";
+}
+.fa-caret-square-o-left:before,
+.fa-toggle-left:before {
+  content: "";
+}
+.fa-dot-circle-o:before {
+  content: "";
+}
+.fa-wheelchair:before {
+  content: "";
+}
+.fa-vimeo-square:before {
+  content: "";
+}
+.fa-try:before,
+.fa-turkish-lira:before {
+  content: "";
+}
+.fa-plus-square-o:before,
+.wy-menu-vertical li span.toctree-expand:before {
+  content: "";
+}
+.fa-space-shuttle:before {
+  content: "";
+}
+.fa-slack:before {
+  content: "";
+}
+.fa-envelope-square:before {
+  content: "";
+}
+.fa-wordpress:before {
+  content: "";
+}
+.fa-openid:before {
+  content: "";
+}
+.fa-bank:before,
+.fa-institution:before,
+.fa-university:before {
+  content: "";
+}
+.fa-graduation-cap:before,
+.fa-mortar-board:before {
+  content: "";
+}
+.fa-yahoo:before {
+  content: "";
+}
+.fa-google:before {
+  content: "";
+}
+.fa-reddit:before {
+  content: "";
+}
+.fa-reddit-square:before {
+  content: "";
+}
+.fa-stumbleupon-circle:before {
+  content: "";
+}
+.fa-stumbleupon:before {
+  content: "";
+}
+.fa-delicious:before {
+  content: "";
+}
+.fa-digg:before {
+  content: "";
+}
+.fa-pied-piper-pp:before {
+  content: "";
+}
+.fa-pied-piper-alt:before {
+  content: "";
+}
+.fa-drupal:before {
+  content: "";
+}
+.fa-joomla:before {
+  content: "";
+}
+.fa-language:before {
+  content: "";
+}
+.fa-fax:before {
+  content: "";
+}
+.fa-building:before {
+  content: "";
+}
+.fa-child:before {
+  content: "";
+}
+.fa-paw:before {
+  content: "";
+}
+.fa-spoon:before {
+  content: "";
+}
+.fa-cube:before {
+  content: "";
+}
+.fa-cubes:before {
+  content: "";
+}
+.fa-behance:before {
+  content: "";
+}
+.fa-behance-square:before {
+  content: "";
+}
+.fa-steam:before {
+  content: "";
+}
+.fa-steam-square:before {
+  content: "";
+}
+.fa-recycle:before {
+  content: "";
+}
+.fa-automobile:before,
+.fa-car:before {
+  content: "";
+}
+.fa-cab:before,
+.fa-taxi:before {
+  content: "";
+}
+.fa-tree:before {
+  content: "";
+}
+.fa-spotify:before {
+  content: "";
+}
+.fa-deviantart:before {
+  content: "";
+}
+.fa-soundcloud:before {
+  content: "";
+}
+.fa-database:before {
+  content: "";
+}
+.fa-file-pdf-o:before {
+  content: "";
+}
+.fa-file-word-o:before {
+  content: "";
+}
+.fa-file-excel-o:before {
+  content: "";
+}
+.fa-file-powerpoint-o:before {
+  content: "";
+}
+.fa-file-image-o:before,
+.fa-file-photo-o:before,
+.fa-file-picture-o:before {
+  content: "";
+}
+.fa-file-archive-o:before,
+.fa-file-zip-o:before {
+  content: "";
+}
+.fa-file-audio-o:before,
+.fa-file-sound-o:before {
+  content: "";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+  content: "";
+}
+.fa-file-code-o:before {
+  content: "";
+}
+.fa-vine:before {
+  content: "";
+}
+.fa-codepen:before {
+  content: "";
+}
+.fa-jsfiddle:before {
+  content: "";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-ring:before,
+.fa-life-saver:before,
+.fa-support:before {
+  content: "";
+}
+.fa-circle-o-notch:before {
+  content: "";
+}
+.fa-ra:before,
+.fa-rebel:before,
+.fa-resistance:before {
+  content: "";
+}
+.fa-empire:before,
+.fa-ge:before {
+  content: "";
+}
+.fa-git-square:before {
+  content: "";
+}
+.fa-git:before {
+  content: "";
+}
+.fa-hacker-news:before,
+.fa-y-combinator-square:before,
+.fa-yc-square:before {
+  content: "";
+}
+.fa-tencent-weibo:before {
+  content: "";
+}
+.fa-qq:before {
+  content: "";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+  content: "";
+}
+.fa-paper-plane:before,
+.fa-send:before {
+  content: "";
+}
+.fa-paper-plane-o:before,
+.fa-send-o:before {
+  content: "";
+}
+.fa-history:before {
+  content: "";
+}
+.fa-circle-thin:before {
+  content: "";
+}
+.fa-header:before {
+  content: "";
+}
+.fa-paragraph:before {
+  content: "";
+}
+.fa-sliders:before {
+  content: "";
+}
+.fa-share-alt:before {
+  content: "";
+}
+.fa-share-alt-square:before {
+  content: "";
+}
+.fa-bomb:before {
+  content: "";
+}
+.fa-futbol-o:before,
+.fa-soccer-ball-o:before {
+  content: "";
+}
+.fa-tty:before {
+  content: "";
+}
+.fa-binoculars:before {
+  content: "";
+}
+.fa-plug:before {
+  content: "";
+}
+.fa-slideshare:before {
+  content: "";
+}
+.fa-twitch:before {
+  content: "";
+}
+.fa-yelp:before {
+  content: "";
+}
+.fa-newspaper-o:before {
+  content: "";
+}
+.fa-wifi:before {
+  content: "";
+}
+.fa-calculator:before {
+  content: "";
+}
+.fa-paypal:before {
+  content: "";
+}
+.fa-google-wallet:before {
+  content: "";
+}
+.fa-cc-visa:before {
+  content: "";
+}
+.fa-cc-mastercard:before {
+  content: "";
+}
+.fa-cc-discover:before {
+  content: "";
+}
+.fa-cc-amex:before {
+  content: "";
+}
+.fa-cc-paypal:before {
+  content: "";
+}
+.fa-cc-stripe:before {
+  content: "";
+}
+.fa-bell-slash:before {
+  content: "";
+}
+.fa-bell-slash-o:before {
+  content: "";
+}
+.fa-trash:before {
+  content: "";
+}
+.fa-copyright:before {
+  content: "";
+}
+.fa-at:before {
+  content: "";
+}
+.fa-eyedropper:before {
+  content: "";
+}
+.fa-paint-brush:before {
+  content: "";
+}
+.fa-birthday-cake:before {
+  content: "";
+}
+.fa-area-chart:before {
+  content: "";
+}
+.fa-pie-chart:before {
+  content: "";
+}
+.fa-line-chart:before {
+  content: "";
+}
+.fa-lastfm:before {
+  content: "";
+}
+.fa-lastfm-square:before {
+  content: "";
+}
+.fa-toggle-off:before {
+  content: "";
+}
+.fa-toggle-on:before {
+  content: "";
+}
+.fa-bicycle:before {
+  content: "";
+}
+.fa-bus:before {
+  content: "";
+}
+.fa-ioxhost:before {
+  content: "";
+}
+.fa-angellist:before {
+  content: "";
+}
+.fa-cc:before {
+  content: "";
+}
+.fa-ils:before,
+.fa-shekel:before,
+.fa-sheqel:before {
+  content: "";
+}
+.fa-meanpath:before {
+  content: "";
+}
+.fa-buysellads:before {
+  content: "";
+}
+.fa-connectdevelop:before {
+  content: "";
+}
+.fa-dashcube:before {
+  content: "";
+}
+.fa-forumbee:before {
+  content: "";
+}
+.fa-leanpub:before {
+  content: "";
+}
+.fa-sellsy:before {
+  content: "";
+}
+.fa-shirtsinbulk:before {
+  content: "";
+}
+.fa-simplybuilt:before {
+  content: "";
+}
+.fa-skyatlas:before {
+  content: "";
+}
+.fa-cart-plus:before {
+  content: "";
+}
+.fa-cart-arrow-down:before {
+  content: "";
+}
+.fa-diamond:before {
+  content: "";
+}
+.fa-ship:before {
+  content: "";
+}
+.fa-user-secret:before {
+  content: "";
+}
+.fa-motorcycle:before {
+  content: "";
+}
+.fa-street-view:before {
+  content: "";
+}
+.fa-heartbeat:before {
+  content: "";
+}
+.fa-venus:before {
+  content: "";
+}
+.fa-mars:before {
+  content: "";
+}
+.fa-mercury:before {
+  content: "";
+}
+.fa-intersex:before,
+.fa-transgender:before {
+  content: "";
+}
+.fa-transgender-alt:before {
+  content: "";
+}
+.fa-venus-double:before {
+  content: "";
+}
+.fa-mars-double:before {
+  content: "";
+}
+.fa-venus-mars:before {
+  content: "";
+}
+.fa-mars-stroke:before {
+  content: "";
+}
+.fa-mars-stroke-v:before {
+  content: "";
+}
+.fa-mars-stroke-h:before {
+  content: "";
+}
+.fa-neuter:before {
+  content: "";
+}
+.fa-genderless:before {
+  content: "";
+}
+.fa-facebook-official:before {
+  content: "";
+}
+.fa-pinterest-p:before {
+  content: "";
+}
+.fa-whatsapp:before {
+  content: "";
+}
+.fa-server:before {
+  content: "";
+}
+.fa-user-plus:before {
+  content: "";
+}
+.fa-user-times:before {
+  content: "";
+}
+.fa-bed:before,
+.fa-hotel:before {
+  content: "";
+}
+.fa-viacoin:before {
+  content: "";
+}
+.fa-train:before {
+  content: "";
+}
+.fa-subway:before {
+  content: "";
+}
+.fa-medium:before {
+  content: "";
+}
+.fa-y-combinator:before,
+.fa-yc:before {
+  content: "";
+}
+.fa-optin-monster:before {
+  content: "";
+}
+.fa-opencart:before {
+  content: "";
+}
+.fa-expeditedssl:before {
+  content: "";
+}
+.fa-battery-4:before,
+.fa-battery-full:before,
+.fa-battery:before {
+  content: "";
+}
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+  content: "";
+}
+.fa-battery-2:before,
+.fa-battery-half:before {
+  content: "";
+}
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+  content: "";
+}
+.fa-battery-0:before,
+.fa-battery-empty:before {
+  content: "";
+}
+.fa-mouse-pointer:before {
+  content: "";
+}
+.fa-i-cursor:before {
+  content: "";
+}
+.fa-object-group:before {
+  content: "";
+}
+.fa-object-ungroup:before {
+  content: "";
+}
+.fa-sticky-note:before {
+  content: "";
+}
+.fa-sticky-note-o:before {
+  content: "";
+}
+.fa-cc-jcb:before {
+  content: "";
+}
+.fa-cc-diners-club:before {
+  content: "";
+}
+.fa-clone:before {
+  content: "";
+}
+.fa-balance-scale:before {
+  content: "";
+}
+.fa-hourglass-o:before {
+  content: "";
+}
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+  content: "";
+}
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+  content: "";
+}
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+  content: "";
+}
+.fa-hourglass:before {
+  content: "";
+}
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+  content: "";
+}
+.fa-hand-paper-o:before,
+.fa-hand-stop-o:before {
+  content: "";
+}
+.fa-hand-scissors-o:before {
+  content: "";
+}
+.fa-hand-lizard-o:before {
+  content: "";
+}
+.fa-hand-spock-o:before {
+  content: "";
+}
+.fa-hand-pointer-o:before {
+  content: "";
+}
+.fa-hand-peace-o:before {
+  content: "";
+}
+.fa-trademark:before {
+  content: "";
+}
+.fa-registered:before {
+  content: "";
+}
+.fa-creative-commons:before {
+  content: "";
+}
+.fa-gg:before {
+  content: "";
+}
+.fa-gg-circle:before {
+  content: "";
+}
+.fa-tripadvisor:before {
+  content: "";
+}
+.fa-odnoklassniki:before {
+  content: "";
+}
+.fa-odnoklassniki-square:before {
+  content: "";
+}
+.fa-get-pocket:before {
+  content: "";
+}
+.fa-wikipedia-w:before {
+  content: "";
+}
+.fa-safari:before {
+  content: "";
+}
+.fa-chrome:before {
+  content: "";
+}
+.fa-firefox:before {
+  content: "";
+}
+.fa-opera:before {
+  content: "";
+}
+.fa-internet-explorer:before {
+  content: "";
+}
+.fa-television:before,
+.fa-tv:before {
+  content: "";
+}
+.fa-contao:before {
+  content: "";
+}
+.fa-500px:before {
+  content: "";
+}
+.fa-amazon:before {
+  content: "";
+}
+.fa-calendar-plus-o:before {
+  content: "";
+}
+.fa-calendar-minus-o:before {
+  content: "";
+}
+.fa-calendar-times-o:before {
+  content: "";
+}
+.fa-calendar-check-o:before {
+  content: "";
+}
+.fa-industry:before {
+  content: "";
+}
+.fa-map-pin:before {
+  content: "";
+}
+.fa-map-signs:before {
+  content: "";
+}
+.fa-map-o:before {
+  content: "";
+}
+.fa-map:before {
+  content: "";
+}
+.fa-commenting:before {
+  content: "";
+}
+.fa-commenting-o:before {
+  content: "";
+}
+.fa-houzz:before {
+  content: "";
+}
+.fa-vimeo:before {
+  content: "";
+}
+.fa-black-tie:before {
+  content: "";
+}
+.fa-fonticons:before {
+  content: "";
+}
+.fa-reddit-alien:before {
+  content: "";
+}
+.fa-edge:before {
+  content: "";
+}
+.fa-credit-card-alt:before {
+  content: "";
+}
+.fa-codiepie:before {
+  content: "";
+}
+.fa-modx:before {
+  content: "";
+}
+.fa-fort-awesome:before {
+  content: "";
+}
+.fa-usb:before {
+  content: "";
+}
+.fa-product-hunt:before {
+  content: "";
+}
+.fa-mixcloud:before {
+  content: "";
+}
+.fa-scribd:before {
+  content: "";
+}
+.fa-pause-circle:before {
+  content: "";
+}
+.fa-pause-circle-o:before {
+  content: "";
+}
+.fa-stop-circle:before {
+  content: "";
+}
+.fa-stop-circle-o:before {
+  content: "";
+}
+.fa-shopping-bag:before {
+  content: "";
+}
+.fa-shopping-basket:before {
+  content: "";
+}
+.fa-hashtag:before {
+  content: "";
+}
+.fa-bluetooth:before {
+  content: "";
+}
+.fa-bluetooth-b:before {
+  content: "";
+}
+.fa-percent:before {
+  content: "";
+}
+.fa-gitlab:before,
+.icon-gitlab:before {
+  content: "";
+}
+.fa-wpbeginner:before {
+  content: "";
+}
+.fa-wpforms:before {
+  content: "";
+}
+.fa-envira:before {
+  content: "";
+}
+.fa-universal-access:before {
+  content: "";
+}
+.fa-wheelchair-alt:before {
+  content: "";
+}
+.fa-question-circle-o:before {
+  content: "";
+}
+.fa-blind:before {
+  content: "";
+}
+.fa-audio-description:before {
+  content: "";
+}
+.fa-volume-control-phone:before {
+  content: "";
+}
+.fa-braille:before {
+  content: "";
+}
+.fa-assistive-listening-systems:before {
+  content: "";
+}
+.fa-american-sign-language-interpreting:before,
+.fa-asl-interpreting:before {
+  content: "";
+}
+.fa-deaf:before,
+.fa-deafness:before,
+.fa-hard-of-hearing:before {
+  content: "";
+}
+.fa-glide:before {
+  content: "";
+}
+.fa-glide-g:before {
+  content: "";
+}
+.fa-sign-language:before,
+.fa-signing:before {
+  content: "";
+}
+.fa-low-vision:before {
+  content: "";
+}
+.fa-viadeo:before {
+  content: "";
+}
+.fa-viadeo-square:before {
+  content: "";
+}
+.fa-snapchat:before {
+  content: "";
+}
+.fa-snapchat-ghost:before {
+  content: "";
+}
+.fa-snapchat-square:before {
+  content: "";
+}
+.fa-pied-piper:before {
+  content: "";
+}
+.fa-first-order:before {
+  content: "";
+}
+.fa-yoast:before {
+  content: "";
+}
+.fa-themeisle:before {
+  content: "";
+}
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+  content: "";
+}
+.fa-fa:before,
+.fa-font-awesome:before {
+  content: "";
+}
+.fa-handshake-o:before {
+  content: "";
+}
+.fa-envelope-open:before {
+  content: "";
+}
+.fa-envelope-open-o:before {
+  content: "";
+}
+.fa-linode:before {
+  content: "";
+}
+.fa-address-book:before {
+  content: "";
+}
+.fa-address-book-o:before {
+  content: "";
+}
+.fa-address-card:before,
+.fa-vcard:before {
+  content: "";
+}
+.fa-address-card-o:before,
+.fa-vcard-o:before {
+  content: "";
+}
+.fa-user-circle:before {
+  content: "";
+}
+.fa-user-circle-o:before {
+  content: "";
+}
+.fa-user-o:before {
+  content: "";
+}
+.fa-id-badge:before {
+  content: "";
+}
+.fa-drivers-license:before,
+.fa-id-card:before {
+  content: "";
+}
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+  content: "";
+}
+.fa-quora:before {
+  content: "";
+}
+.fa-free-code-camp:before {
+  content: "";
+}
+.fa-telegram:before {
+  content: "";
+}
+.fa-thermometer-4:before,
+.fa-thermometer-full:before,
+.fa-thermometer:before {
+  content: "";
+}
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+  content: "";
+}
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+  content: "";
+}
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+  content: "";
+}
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+  content: "";
+}
+.fa-shower:before {
+  content: "";
+}
+.fa-bath:before,
+.fa-bathtub:before,
+.fa-s15:before {
+  content: "";
+}
+.fa-podcast:before {
+  content: "";
+}
+.fa-window-maximize:before {
+  content: "";
+}
+.fa-window-minimize:before {
+  content: "";
+}
+.fa-window-restore:before {
+  content: "";
+}
+.fa-times-rectangle:before,
+.fa-window-close:before {
+  content: "";
+}
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+  content: "";
+}
+.fa-bandcamp:before {
+  content: "";
+}
+.fa-grav:before {
+  content: "";
+}
+.fa-etsy:before {
+  content: "";
+}
+.fa-imdb:before {
+  content: "";
+}
+.fa-ravelry:before {
+  content: "";
+}
+.fa-eercast:before {
+  content: "";
+}
+.fa-microchip:before {
+  content: "";
+}
+.fa-snowflake-o:before {
+  content: "";
+}
+.fa-superpowers:before {
+  content: "";
+}
+.fa-wpexplorer:before {
+  content: "";
+}
+.fa-meetup:before {
+  content: "";
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
+.fa,
+.icon,
+.rst-content .admonition-title,
+.rst-content .code-block-caption .headerlink,
+.rst-content code.download span:first-child,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink,
+.rst-content tt.download span:first-child,
+.wy-dropdown .caret,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li span.toctree-expand {
+  font-family: inherit;
+}
+.fa:before,
+.icon:before,
+.rst-content .admonition-title:before,
+.rst-content .code-block-caption .headerlink:before,
+.rst-content code.download span:first-child:before,
+.rst-content dl dt .headerlink:before,
+.rst-content h1 .headerlink:before,
+.rst-content h2 .headerlink:before,
+.rst-content h3 .headerlink:before,
+.rst-content h4 .headerlink:before,
+.rst-content h5 .headerlink:before,
+.rst-content h6 .headerlink:before,
+.rst-content p.caption .headerlink:before,
+.rst-content table > caption .headerlink:before,
+.rst-content tt.download span:first-child:before,
+.wy-dropdown .caret:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a span.toctree-expand:before,
+.wy-menu-vertical li span.toctree-expand:before {
+  font-family: FontAwesome;
+  display: inline-block;
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1;
+  text-decoration: inherit;
+}
+.rst-content .code-block-caption a .headerlink,
+.rst-content a .admonition-title,
+.rst-content code.download a span:first-child,
+.rst-content dl dt a .headerlink,
+.rst-content h1 a .headerlink,
+.rst-content h2 a .headerlink,
+.rst-content h3 a .headerlink,
+.rst-content h4 a .headerlink,
+.rst-content h5 a .headerlink,
+.rst-content h6 a .headerlink,
+.rst-content p.caption a .headerlink,
+.rst-content table > caption a .headerlink,
+.rst-content tt.download a span:first-child,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li a span.toctree-expand,
+a .fa,
+a .icon,
+a .rst-content .admonition-title,
+a .rst-content .code-block-caption .headerlink,
+a .rst-content code.download span:first-child,
+a .rst-content dl dt .headerlink,
+a .rst-content h1 .headerlink,
+a .rst-content h2 .headerlink,
+a .rst-content h3 .headerlink,
+a .rst-content h4 .headerlink,
+a .rst-content h5 .headerlink,
+a .rst-content h6 .headerlink,
+a .rst-content p.caption .headerlink,
+a .rst-content table > caption .headerlink,
+a .rst-content tt.download span:first-child,
+a .wy-menu-vertical li span.toctree-expand {
+  display: inline-block;
+  text-decoration: inherit;
+}
+.btn .fa,
+.btn .icon,
+.btn .rst-content .admonition-title,
+.btn .rst-content .code-block-caption .headerlink,
+.btn .rst-content code.download span:first-child,
+.btn .rst-content dl dt .headerlink,
+.btn .rst-content h1 .headerlink,
+.btn .rst-content h2 .headerlink,
+.btn .rst-content h3 .headerlink,
+.btn .rst-content h4 .headerlink,
+.btn .rst-content h5 .headerlink,
+.btn .rst-content h6 .headerlink,
+.btn .rst-content p.caption .headerlink,
+.btn .rst-content table > caption .headerlink,
+.btn .rst-content tt.download span:first-child,
+.btn .wy-menu-vertical li.current > a span.toctree-expand,
+.btn .wy-menu-vertical li.on a span.toctree-expand,
+.btn .wy-menu-vertical li span.toctree-expand,
+.nav .fa,
+.nav .icon,
+.nav .rst-content .admonition-title,
+.nav .rst-content .code-block-caption .headerlink,
+.nav .rst-content code.download span:first-child,
+.nav .rst-content dl dt .headerlink,
+.nav .rst-content h1 .headerlink,
+.nav .rst-content h2 .headerlink,
+.nav .rst-content h3 .headerlink,
+.nav .rst-content h4 .headerlink,
+.nav .rst-content h5 .headerlink,
+.nav .rst-content h6 .headerlink,
+.nav .rst-content p.caption .headerlink,
+.nav .rst-content table > caption .headerlink,
+.nav .rst-content tt.download span:first-child,
+.nav .wy-menu-vertical li.current > a span.toctree-expand,
+.nav .wy-menu-vertical li.on a span.toctree-expand,
+.nav .wy-menu-vertical li span.toctree-expand,
+.rst-content .btn .admonition-title,
+.rst-content .code-block-caption .btn .headerlink,
+.rst-content .code-block-caption .nav .headerlink,
+.rst-content .nav .admonition-title,
+.rst-content code.download .btn span:first-child,
+.rst-content code.download .nav span:first-child,
+.rst-content dl dt .btn .headerlink,
+.rst-content dl dt .nav .headerlink,
+.rst-content h1 .btn .headerlink,
+.rst-content h1 .nav .headerlink,
+.rst-content h2 .btn .headerlink,
+.rst-content h2 .nav .headerlink,
+.rst-content h3 .btn .headerlink,
+.rst-content h3 .nav .headerlink,
+.rst-content h4 .btn .headerlink,
+.rst-content h4 .nav .headerlink,
+.rst-content h5 .btn .headerlink,
+.rst-content h5 .nav .headerlink,
+.rst-content h6 .btn .headerlink,
+.rst-content h6 .nav .headerlink,
+.rst-content p.caption .btn .headerlink,
+.rst-content p.caption .nav .headerlink,
+.rst-content table > caption .btn .headerlink,
+.rst-content table > caption .nav .headerlink,
+.rst-content tt.download .btn span:first-child,
+.rst-content tt.download .nav span:first-child,
+.wy-menu-vertical li .btn span.toctree-expand,
+.wy-menu-vertical li.current > a .btn span.toctree-expand,
+.wy-menu-vertical li.current > a .nav span.toctree-expand,
+.wy-menu-vertical li .nav span.toctree-expand,
+.wy-menu-vertical li.on a .btn span.toctree-expand,
+.wy-menu-vertical li.on a .nav span.toctree-expand {
+  display: inline;
+}
+.btn .fa-large.icon,
+.btn .fa.fa-large,
+.btn .rst-content .code-block-caption .fa-large.headerlink,
+.btn .rst-content .fa-large.admonition-title,
+.btn .rst-content code.download span.fa-large:first-child,
+.btn .rst-content dl dt .fa-large.headerlink,
+.btn .rst-content h1 .fa-large.headerlink,
+.btn .rst-content h2 .fa-large.headerlink,
+.btn .rst-content h3 .fa-large.headerlink,
+.btn .rst-content h4 .fa-large.headerlink,
+.btn .rst-content h5 .fa-large.headerlink,
+.btn .rst-content h6 .fa-large.headerlink,
+.btn .rst-content p.caption .fa-large.headerlink,
+.btn .rst-content table > caption .fa-large.headerlink,
+.btn .rst-content tt.download span.fa-large:first-child,
+.btn .wy-menu-vertical li span.fa-large.toctree-expand,
+.nav .fa-large.icon,
+.nav .fa.fa-large,
+.nav .rst-content .code-block-caption .fa-large.headerlink,
+.nav .rst-content .fa-large.admonition-title,
+.nav .rst-content code.download span.fa-large:first-child,
+.nav .rst-content dl dt .fa-large.headerlink,
+.nav .rst-content h1 .fa-large.headerlink,
+.nav .rst-content h2 .fa-large.headerlink,
+.nav .rst-content h3 .fa-large.headerlink,
+.nav .rst-content h4 .fa-large.headerlink,
+.nav .rst-content h5 .fa-large.headerlink,
+.nav .rst-content h6 .fa-large.headerlink,
+.nav .rst-content p.caption .fa-large.headerlink,
+.nav .rst-content table > caption .fa-large.headerlink,
+.nav .rst-content tt.download span.fa-large:first-child,
+.nav .wy-menu-vertical li span.fa-large.toctree-expand,
+.rst-content .btn .fa-large.admonition-title,
+.rst-content .code-block-caption .btn .fa-large.headerlink,
+.rst-content .code-block-caption .nav .fa-large.headerlink,
+.rst-content .nav .fa-large.admonition-title,
+.rst-content code.download .btn span.fa-large:first-child,
+.rst-content code.download .nav span.fa-large:first-child,
+.rst-content dl dt .btn .fa-large.headerlink,
+.rst-content dl dt .nav .fa-large.headerlink,
+.rst-content h1 .btn .fa-large.headerlink,
+.rst-content h1 .nav .fa-large.headerlink,
+.rst-content h2 .btn .fa-large.headerlink,
+.rst-content h2 .nav .fa-large.headerlink,
+.rst-content h3 .btn .fa-large.headerlink,
+.rst-content h3 .nav .fa-large.headerlink,
+.rst-content h4 .btn .fa-large.headerlink,
+.rst-content h4 .nav .fa-large.headerlink,
+.rst-content h5 .btn .fa-large.headerlink,
+.rst-content h5 .nav .fa-large.headerlink,
+.rst-content h6 .btn .fa-large.headerlink,
+.rst-content h6 .nav .fa-large.headerlink,
+.rst-content p.caption .btn .fa-large.headerlink,
+.rst-content p.caption .nav .fa-large.headerlink,
+.rst-content table > caption .btn .fa-large.headerlink,
+.rst-content table > caption .nav .fa-large.headerlink,
+.rst-content tt.download .btn span.fa-large:first-child,
+.rst-content tt.download .nav span.fa-large:first-child,
+.wy-menu-vertical li .btn span.fa-large.toctree-expand,
+.wy-menu-vertical li .nav span.fa-large.toctree-expand {
+  line-height: 0.9em;
+}
+.btn .fa-spin.icon,
+.btn .fa.fa-spin,
+.btn .rst-content .code-block-caption .fa-spin.headerlink,
+.btn .rst-content .fa-spin.admonition-title,
+.btn .rst-content code.download span.fa-spin:first-child,
+.btn .rst-content dl dt .fa-spin.headerlink,
+.btn .rst-content h1 .fa-spin.headerlink,
+.btn .rst-content h2 .fa-spin.headerlink,
+.btn .rst-content h3 .fa-spin.headerlink,
+.btn .rst-content h4 .fa-spin.headerlink,
+.btn .rst-content h5 .fa-spin.headerlink,
+.btn .rst-content h6 .fa-spin.headerlink,
+.btn .rst-content p.caption .fa-spin.headerlink,
+.btn .rst-content table > caption .fa-spin.headerlink,
+.btn .rst-content tt.download span.fa-spin:first-child,
+.btn .wy-menu-vertical li span.fa-spin.toctree-expand,
+.nav .fa-spin.icon,
+.nav .fa.fa-spin,
+.nav .rst-content .code-block-caption .fa-spin.headerlink,
+.nav .rst-content .fa-spin.admonition-title,
+.nav .rst-content code.download span.fa-spin:first-child,
+.nav .rst-content dl dt .fa-spin.headerlink,
+.nav .rst-content h1 .fa-spin.headerlink,
+.nav .rst-content h2 .fa-spin.headerlink,
+.nav .rst-content h3 .fa-spin.headerlink,
+.nav .rst-content h4 .fa-spin.headerlink,
+.nav .rst-content h5 .fa-spin.headerlink,
+.nav .rst-content h6 .fa-spin.headerlink,
+.nav .rst-content p.caption .fa-spin.headerlink,
+.nav .rst-content table > caption .fa-spin.headerlink,
+.nav .rst-content tt.download span.fa-spin:first-child,
+.nav .wy-menu-vertical li span.fa-spin.toctree-expand,
+.rst-content .btn .fa-spin.admonition-title,
+.rst-content .code-block-caption .btn .fa-spin.headerlink,
+.rst-content .code-block-caption .nav .fa-spin.headerlink,
+.rst-content .nav .fa-spin.admonition-title,
+.rst-content code.download .btn span.fa-spin:first-child,
+.rst-content code.download .nav span.fa-spin:first-child,
+.rst-content dl dt .btn .fa-spin.headerlink,
+.rst-content dl dt .nav .fa-spin.headerlink,
+.rst-content h1 .btn .fa-spin.headerlink,
+.rst-content h1 .nav .fa-spin.headerlink,
+.rst-content h2 .btn .fa-spin.headerlink,
+.rst-content h2 .nav .fa-spin.headerlink,
+.rst-content h3 .btn .fa-spin.headerlink,
+.rst-content h3 .nav .fa-spin.headerlink,
+.rst-content h4 .btn .fa-spin.headerlink,
+.rst-content h4 .nav .fa-spin.headerlink,
+.rst-content h5 .btn .fa-spin.headerlink,
+.rst-content h5 .nav .fa-spin.headerlink,
+.rst-content h6 .btn .fa-spin.headerlink,
+.rst-content h6 .nav .fa-spin.headerlink,
+.rst-content p.caption .btn .fa-spin.headerlink,
+.rst-content p.caption .nav .fa-spin.headerlink,
+.rst-content table > caption .btn .fa-spin.headerlink,
+.rst-content table > caption .nav .fa-spin.headerlink,
+.rst-content tt.download .btn span.fa-spin:first-child,
+.rst-content tt.download .nav span.fa-spin:first-child,
+.wy-menu-vertical li .btn span.fa-spin.toctree-expand,
+.wy-menu-vertical li .nav span.fa-spin.toctree-expand {
+  display: inline-block;
+}
+.btn.fa:before,
+.btn.icon:before,
+.rst-content .btn.admonition-title:before,
+.rst-content .code-block-caption .btn.headerlink:before,
+.rst-content code.download span.btn:first-child:before,
+.rst-content dl dt .btn.headerlink:before,
+.rst-content h1 .btn.headerlink:before,
+.rst-content h2 .btn.headerlink:before,
+.rst-content h3 .btn.headerlink:before,
+.rst-content h4 .btn.headerlink:before,
+.rst-content h5 .btn.headerlink:before,
+.rst-content h6 .btn.headerlink:before,
+.rst-content p.caption .btn.headerlink:before,
+.rst-content table > caption .btn.headerlink:before,
+.rst-content tt.download span.btn:first-child:before,
+.wy-menu-vertical li span.btn.toctree-expand:before {
+  opacity: 0.5;
+  -webkit-transition: opacity 0.05s ease-in;
+  -moz-transition: opacity 0.05s ease-in;
+  transition: opacity 0.05s ease-in;
+}
+.btn.fa:hover:before,
+.btn.icon:hover:before,
+.rst-content .btn.admonition-title:hover:before,
+.rst-content .code-block-caption .btn.headerlink:hover:before,
+.rst-content code.download span.btn:first-child:hover:before,
+.rst-content dl dt .btn.headerlink:hover:before,
+.rst-content h1 .btn.headerlink:hover:before,
+.rst-content h2 .btn.headerlink:hover:before,
+.rst-content h3 .btn.headerlink:hover:before,
+.rst-content h4 .btn.headerlink:hover:before,
+.rst-content h5 .btn.headerlink:hover:before,
+.rst-content h6 .btn.headerlink:hover:before,
+.rst-content p.caption .btn.headerlink:hover:before,
+.rst-content table > caption .btn.headerlink:hover:before,
+.rst-content tt.download span.btn:first-child:hover:before,
+.wy-menu-vertical li span.btn.toctree-expand:hover:before {
+  opacity: 1;
+}
+.btn-mini .fa:before,
+.btn-mini .icon:before,
+.btn-mini .rst-content .admonition-title:before,
+.btn-mini .rst-content .code-block-caption .headerlink:before,
+.btn-mini .rst-content code.download span:first-child:before,
+.btn-mini .rst-content dl dt .headerlink:before,
+.btn-mini .rst-content h1 .headerlink:before,
+.btn-mini .rst-content h2 .headerlink:before,
+.btn-mini .rst-content h3 .headerlink:before,
+.btn-mini .rst-content h4 .headerlink:before,
+.btn-mini .rst-content h5 .headerlink:before,
+.btn-mini .rst-content h6 .headerlink:before,
+.btn-mini .rst-content p.caption .headerlink:before,
+.btn-mini .rst-content table > caption .headerlink:before,
+.btn-mini .rst-content tt.download span:first-child:before,
+.btn-mini .wy-menu-vertical li span.toctree-expand:before,
+.rst-content .btn-mini .admonition-title:before,
+.rst-content .code-block-caption .btn-mini .headerlink:before,
+.rst-content code.download .btn-mini span:first-child:before,
+.rst-content dl dt .btn-mini .headerlink:before,
+.rst-content h1 .btn-mini .headerlink:before,
+.rst-content h2 .btn-mini .headerlink:before,
+.rst-content h3 .btn-mini .headerlink:before,
+.rst-content h4 .btn-mini .headerlink:before,
+.rst-content h5 .btn-mini .headerlink:before,
+.rst-content h6 .btn-mini .headerlink:before,
+.rst-content p.caption .btn-mini .headerlink:before,
+.rst-content table > caption .btn-mini .headerlink:before,
+.rst-content tt.download .btn-mini span:first-child:before,
+.wy-menu-vertical li .btn-mini span.toctree-expand:before {
+  font-size: 14px;
+  vertical-align: -15%;
+}
+.rst-content .admonition,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning,
+.wy-alert {
+  padding: 12px;
+  line-height: 24px;
+  margin-bottom: 24px;
+  background: #F2F2F2;
+}
+.rst-content .admonition-title,
+.wy-alert-title {
+  font-weight: 700;
+  display: block;
+  color: #fff;
+  background: #1D4F9C;
+  padding: 6px 12px;
+  margin: -12px -12px 12px;
+}
+.rst-content .danger,
+.rst-content .error,
+.rst-content .wy-alert-danger.admonition,
+.rst-content .wy-alert-danger.admonition-todo,
+.rst-content .wy-alert-danger.attention,
+.rst-content .wy-alert-danger.caution,
+.rst-content .wy-alert-danger.hint,
+.rst-content .wy-alert-danger.important,
+.rst-content .wy-alert-danger.note,
+.rst-content .wy-alert-danger.seealso,
+.rst-content .wy-alert-danger.tip,
+.rst-content .wy-alert-danger.warning,
+.wy-alert.wy-alert-danger {
+  background: #fdf3f2;
+}
+.rst-content .danger .admonition-title,
+.rst-content .danger .wy-alert-title,
+.rst-content .error .admonition-title,
+.rst-content .error .wy-alert-title,
+.rst-content .wy-alert-danger.admonition-todo .admonition-title,
+.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-danger.admonition .admonition-title,
+.rst-content .wy-alert-danger.admonition .wy-alert-title,
+.rst-content .wy-alert-danger.attention .admonition-title,
+.rst-content .wy-alert-danger.attention .wy-alert-title,
+.rst-content .wy-alert-danger.caution .admonition-title,
+.rst-content .wy-alert-danger.caution .wy-alert-title,
+.rst-content .wy-alert-danger.hint .admonition-title,
+.rst-content .wy-alert-danger.hint .wy-alert-title,
+.rst-content .wy-alert-danger.important .admonition-title,
+.rst-content .wy-alert-danger.important .wy-alert-title,
+.rst-content .wy-alert-danger.note .admonition-title,
+.rst-content .wy-alert-danger.note .wy-alert-title,
+.rst-content .wy-alert-danger.seealso .admonition-title,
+.rst-content .wy-alert-danger.seealso .wy-alert-title,
+.rst-content .wy-alert-danger.tip .admonition-title,
+.rst-content .wy-alert-danger.tip .wy-alert-title,
+.rst-content .wy-alert-danger.warning .admonition-title,
+.rst-content .wy-alert-danger.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-danger .admonition-title,
+.wy-alert.wy-alert-danger .rst-content .admonition-title,
+.wy-alert.wy-alert-danger .wy-alert-title {
+  background: #f29f97;
+}
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .warning,
+.rst-content .wy-alert-warning.admonition,
+.rst-content .wy-alert-warning.danger,
+.rst-content .wy-alert-warning.error,
+.rst-content .wy-alert-warning.hint,
+.rst-content .wy-alert-warning.important,
+.rst-content .wy-alert-warning.note,
+.rst-content .wy-alert-warning.seealso,
+.rst-content .wy-alert-warning.tip,
+.wy-alert.wy-alert-warning {
+  background: #ffedcc;
+}
+.rst-content .admonition-todo .admonition-title,
+.rst-content .admonition-todo .wy-alert-title,
+.rst-content .attention .admonition-title,
+.rst-content .attention .wy-alert-title,
+.rst-content .caution .admonition-title,
+.rst-content .caution .wy-alert-title,
+.rst-content .warning .admonition-title,
+.rst-content .warning .wy-alert-title,
+.rst-content .wy-alert-warning.admonition .admonition-title,
+.rst-content .wy-alert-warning.admonition .wy-alert-title,
+.rst-content .wy-alert-warning.danger .admonition-title,
+.rst-content .wy-alert-warning.danger .wy-alert-title,
+.rst-content .wy-alert-warning.error .admonition-title,
+.rst-content .wy-alert-warning.error .wy-alert-title,
+.rst-content .wy-alert-warning.hint .admonition-title,
+.rst-content .wy-alert-warning.hint .wy-alert-title,
+.rst-content .wy-alert-waseealsorning.important .admonition-title,
+.rst-content .wy-alert-warning.important .wy-alert-title,
+.rst-content .wy-alert-warning.note .admonition-title,
+.rst-content .wy-alert-warning.note .wy-alert-title,
+.rst-content .wy-alert-warning.seealso .admonition-title,
+.rst-content .wy-alert-warning.seealso .wy-alert-title,
+.rst-content .wy-alert-warning.tip .admonition-title,
+.rst-content .wy-alert-warning.tip .wy-alert-title,
+.rst-content .wy-alert.wy-alert-warning .admonition-title,
+.wy-alert.wy-alert-warning .rst-content .admonition-title,
+.wy-alert.wy-alert-warning .wy-alert-title {
+  background: #f0b37e;
+}
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .wy-alert-info.admonition,
+.rst-content .wy-alert-info.admonition-todo,
+.rst-content .wy-alert-info.attention,
+.rst-content .wy-alert-info.caution,
+.rst-content .wy-alert-info.danger,
+.rst-content .wy-alert-info.error,
+.rst-content .wy-alert-info.hint,
+.rst-content .wy-alert-info.important,
+.rst-content .wy-alert-info.tip,
+.rst-content .wy-alert-info.warning,
+.wy-alert.wy-alert-info {
+  background: #F2F2F2;
+}
+.rst-content .note .wy-alert-title,
+.rst-content .note .admonition-title {
+  background: #1D4F9C;
+}
+.rst-content .seealso .admonition-title,
+.rst-content .seealso .wy-alert-title,
+.rst-content .wy-alert-info.admonition-todo .admonition-title,
+.rst-content .wy-alert-info.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-info.admonition .admonition-title,
+.rst-content .wy-alert-info.admonition .wy-alert-title,
+.rst-content .wy-alert-info.attention .admonition-title,
+.rst-content .wy-alert-info.attention .wy-alert-title,
+.rst-content .wy-alert-info.caution .admonition-title,
+.rst-content .wy-alert-info.caution .wy-alert-title,
+.rst-content .wy-alert-info.danger .admonition-title,
+.rst-content .wy-alert-info.danger .wy-alert-title,
+.rst-content .wy-alert-info.error .admonition-title,
+.rst-content .wy-alert-info.error .wy-alert-title,
+.rst-content .wy-alert-info.hint .admonition-title,
+.rst-content .wy-alert-info.hint .wy-alert-title,
+.rst-content .wy-alert-info.important .admonition-title,
+.rst-content .wy-alert-info.important .wy-alert-title,
+.rst-content .wy-alert-info.tip .admonition-title,
+.rst-content .wy-alert-info.tip .wy-alert-title,
+.rst-content .wy-alert-info.warning .admonition-title,
+.rst-content .wy-alert-info.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-info .admonition-title,
+.wy-alert.wy-alert-info .rst-content .admonition-title,
+.wy-alert.wy-alert-info .wy-alert-title {
+  background: #999999;
+}
+.rst-content .hint,
+.rst-content .important,
+.rst-content .tip,
+.rst-content .wy-alert-success.admonition,
+.rst-content .wy-alert-success.admonition-todo,
+.rst-content .wy-alert-success.attention,
+.rst-content .wy-alert-success.caution,
+.rst-content .wy-alert-success.danger,
+.rst-content .wy-alert-success.error,
+.rst-content .wy-alert-success.note,
+.rst-content .wy-alert-success.seealso,
+.rst-content .wy-alert-success.warning,
+.wy-alert.wy-alert-success {
+  background: #F2F2F2;
+}
+.rst-content .hint .admonition-title,
+.rst-content .hint .wy-alert-title,
+.rst-content .important .admonition-title,
+.rst-content .important .wy-alert-title,
+.rst-content .tip .admonition-title,
+.rst-content .tip .wy-alert-title,
+.rst-content .wy-alert-success.admonition-todo .admonition-title,
+.rst-content .wy-alert-success.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-success.admonition .admonition-title,
+.rst-content .wy-alert-success.admonition .wy-alert-title,
+.rst-content .wy-alert-success.attention .admonition-title,
+.rst-content .wy-alert-success.attention .wy-alert-title,
+.rst-content .wy-alert-success.caution .admonition-title,
+.rst-content .wy-alert-success.caution .wy-alert-title,
+.rst-content .wy-alert-success.danger .admonition-title,
+.rst-content .wy-alert-success.danger .wy-alert-title,
+.rst-content .wy-alert-success.error .admonition-title,
+.rst-content .wy-alert-success.error .wy-alert-title,
+.rst-content .wy-alert-success.note .admonition-title,
+.rst-content .wy-alert-success.note .wy-alert-title,
+.rst-content .wy-alert-success.seealso .admonition-title,
+.rst-content .wy-alert-success.seealso .wy-alert-title,
+.rst-content .wy-alert-success.warning .admonition-title,
+.rst-content .wy-alert-success.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-success .admonition-title,
+.wy-alert.wy-alert-success .rst-content .admonition-title,
+.wy-alert.wy-alert-success .wy-alert-title {
+  background: #7F8DC4;
+}
+.rst-content .wy-alert-neutral.admonition,
+.rst-content .wy-alert-neutral.admonition-todo,
+.rst-content .wy-alert-neutral.attention,
+.rst-content .wy-alert-neutral.caution,
+.rst-content .wy-alert-neutral.danger,
+.rst-content .wy-alert-neutral.error,
+.rst-content .wy-alert-neutral.hint,
+.rst-content .wy-alert-neutral.important,
+.rst-content .wy-alert-neutral.note,
+.rst-content .wy-alert-neutral.seealso,
+.rst-content .wy-alert-neutral.tip,
+.rst-content .wy-alert-neutral.warning,
+.wy-alert.wy-alert-neutral {
+  background: #f3f6f6;
+}
+.rst-content .wy-alert-neutral.admonition-todo .admonition-title,
+.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-neutral.admonition .admonition-title,
+.rst-content .wy-alert-neutral.admonition .wy-alert-title,
+.rst-content .wy-alert-neutral.attention .admonition-title,
+.rst-content .wy-alert-neutral.attention .wy-alert-title,
+.rst-content .wy-alert-neutral.caution .admonition-title,
+.rst-content .wy-alert-neutral.caution .wy-alert-title,
+.rst-content .wy-alert-neutral.danger .admonition-title,
+.rst-content .wy-alert-neutral.danger .wy-alert-title,
+.rst-content .wy-alert-neutral.error .admonition-title,
+.rst-content .wy-alert-neutral.error .wy-alert-title,
+.rst-content .wy-alert-neutral.hint .admonition-title,
+.rst-content .wy-alert-neutral.hint .wy-alert-title,
+.rst-content .wy-alert-neutral.important .admonition-title,
+.rst-content .wy-alert-neutral.important .wy-alert-title,
+.rst-content .wy-alert-neutral.note .admonition-title,
+.rst-content .wy-alert-neutral.note .wy-alert-title,
+.rst-content .wy-alert-neutral.seealso .admonition-title,
+.rst-content .wy-alert-neutral.seealso .wy-alert-title,
+.rst-content .wy-alert-neutral.tip .admonition-title,
+.rst-content .wy-alert-neutral.tip .wy-alert-title,
+.rst-content .wy-alert-neutral.warning .admonition-title,
+.rst-content .wy-alert-neutral.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-neutral .admonition-title,
+.wy-alert.wy-alert-neutral .rst-content .admonition-title,
+.wy-alert.wy-alert-neutral .wy-alert-title {
+  color: #404040;
+  background: #e1e4e5;
+}
+.rst-content .wy-alert-neutral.admonition-todo a,
+.rst-content .wy-alert-neutral.admonition a,
+.rst-content .wy-alert-neutral.attention a,
+.rst-content .wy-alert-neutral.caution a,
+.rst-content .wy-alert-neutral.danger a,
+.rst-content .wy-alert-neutral.error a,
+.rst-content .wy-alert-neutral.hint a,
+.rst-content .wy-alert-neutral.important a,
+.rst-content .wy-alert-neutral.note a,
+.rst-content .wy-alert-neutral.seealso a,
+.rst-content .wy-alert-neutral.tip a,
+.rst-content .wy-alert-neutral.warning a,
+.wy-alert.wy-alert-neutral a {
+  color: #2980b9;
+}
+.rst-content .admonition-todo p:last-child,
+.rst-content .admonition p:last-child,
+.rst-content .attention p:last-child,
+.rst-content .caution p:last-child,
+.rst-content .danger p:last-child,
+.rst-content .error p:last-child,
+.rst-content .hint p:last-child,
+.rst-content .important p:last-child,
+.rst-content .note p:last-child,
+.rst-content .seealso p:last-child,
+.rst-content .tip p:last-child,
+.rst-content .warning p:last-child,
+.wy-alert p:last-child {
+  margin-bottom: 0;
+}
+.wy-tray-container {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 600;
+}
+.wy-tray-container li {
+  display: block;
+  width: 300px;
+  background: transparent;
+  color: #fff;
+  text-align: center;
+  box-shadow: 0 5px 5px 0 rgba(0, 0, 0, 0.1);
+  padding: 0 24px;
+  min-width: 20%;
+  opacity: 0;
+  height: 0;
+  line-height: 56px;
+  overflow: hidden;
+  -webkit-transition: all 0.3s ease-in;
+  -moz-transition: all 0.3s ease-in;
+  transition: all 0.3s ease-in;
+}
+.wy-tray-container li.wy-tray-item-success {
+  background: #27ae60;
+}
+.wy-tray-container li.wy-tray-item-info {
+  background: #2980b9;
+}
+.wy-tray-container li.wy-tray-item-warning {
+  background: #e67e22;
+}
+.wy-tray-container li.wy-tray-item-danger {
+  background: #e74c3c;
+}
+.wy-tray-container li.on {
+  opacity: 1;
+  height: 56px;
+}
+@media screen and (max-width: 768px) {
+  .wy-tray-container {
+    bottom: auto;
+    top: 0;
+    width: 100%;
+  }
+  .wy-tray-container li {
+    width: 100%;
+  }
+}
+button {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+  cursor: pointer;
+  line-height: normal;
+  -webkit-appearance: button;
+  *overflow: visible;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+button[disabled] {
+  cursor: default;
+}
+.btn {
+  display: inline-block;
+  border-radius: 2px;
+  line-height: normal;
+  white-space: nowrap;
+  text-align: center;
+  cursor: pointer;
+  font-size: 100%;
+  padding: 6px 12px 8px;
+  color: #fff;
+  border: 1px solid rgba(0, 0, 0, 0.1);
+  background-color: #27ae60;
+  text-decoration: none;
+  font-weight: 400;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  box-shadow: inset 0 1px 2px -1px hsla(0, 0%, 100%, 0.5),
+    inset 0 -2px 0 0 rgba(0, 0, 0, 0.1);
+  outline-none: false;
+  vertical-align: middle;
+  *display: inline;
+  zoom: 1;
+  -webkit-user-drag: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  -webkit-transition: all 0.1s linear;
+  -moz-transition: all 0.1s linear;
+  transition: all 0.1s linear;
+}
+.btn-hover {
+  background: #2e8ece;
+  color: #fff;
+}
+.btn:hover {
+  background: #2cc36b;
+  color: #fff;
+}
+.btn:focus {
+  background: #2cc36b;
+  outline: 0;
+}
+.btn:active {
+  box-shadow: inset 0 -1px 0 0 rgba(0, 0, 0, 0.05),
+    inset 0 2px 0 0 rgba(0, 0, 0, 0.1);
+  padding: 8px 12px 6px;
+}
+.btn:visited {
+  color: #fff;
+}
+.btn-disabled,
+.btn-disabled:active,
+.btn-disabled:focus,
+.btn-disabled:hover,
+.btn:disabled {
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  filter: alpha(opacity=40);
+  opacity: 0.4;
+  cursor: not-allowed;
+  box-shadow: none;
+}
+.btn::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+.btn-small {
+  font-size: 80%;
+}
+.btn-info {
+  background-color: #2980b9 !important;
+}
+.btn-info:hover {
+  background-color: #2e8ece !important;
+}
+.btn-neutral {
+  background-color: #f3f6f6 !important;
+  color: #404040 !important;
+}
+.btn-neutral:hover {
+  background-color: #e5ebeb !important;
+  color: #404040;
+}
+.btn-neutral:visited {
+  color: #404040 !important;
+}
+.btn-success {
+  background-color: #27ae60 !important;
+}
+.btn-success:hover {
+  background-color: #295 !important;
+}
+.btn-danger {
+  background-color: #e74c3c !important;
+}
+.btn-danger:hover {
+  background-color: #ea6153 !important;
+}
+.btn-warning {
+  background-color: #e67e22 !important;
+}
+.btn-warning:hover {
+  background-color: #e98b39 !important;
+}
+.btn-invert {
+  background-color: #222;
+}
+.btn-invert:hover {
+  background-color: #2f2f2f !important;
+}
+.btn-link {
+  background-color: transparent !important;
+  color: #2980b9;
+  box-shadow: none;
+  border-color: transparent !important;
+}
+.btn-link:active,
+.btn-link:hover {
+  background-color: transparent !important;
+  color: #409ad5 !important;
+  box-shadow: none;
+}
+.btn-link:visited {
+  color: #2980b9;
+}
+.wy-btn-group .btn,
+.wy-control .btn {
+  vertical-align: middle;
+}
+.wy-btn-group {
+  margin-bottom: 24px;
+  *zoom: 1;
+}
+.wy-btn-group:after,
+.wy-btn-group:before {
+  display: table;
+  content: "";
+}
+.wy-btn-group:after {
+  clear: both;
+}
+.wy-dropdown {
+  position: relative;
+  display: inline-block;
+}
+.wy-dropdown-active .wy-dropdown-menu {
+  display: block;
+}
+.wy-dropdown-menu {
+  position: absolute;
+  left: 0;
+  display: none;
+  float: left;
+  top: 100%;
+  min-width: 100%;
+  background: #fcfcfc;
+  z-index: 100;
+  border: 1px solid #cfd7dd;
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
+  padding: 12px;
+}
+.wy-dropdown-menu > dd > a {
+  display: block;
+  clear: both;
+  color: #404040;
+  white-space: nowrap;
+  font-size: 90%;
+  padding: 0 12px;
+  cursor: pointer;
+}
+.wy-dropdown-menu > dd > a:hover {
+  background: #000000;
+  color: #fff;
+}
+.wy-dropdown-menu > dd.divider {
+  border-top: 1px solid #cfd7dd;
+  margin: 6px 0;
+}
+.wy-dropdown-menu > dd.search {
+  padding-bottom: 12px;
+}
+.wy-dropdown-menu > dd.search input[type="search"] {
+  width: 100%;
+}
+.wy-dropdown-menu > dd.call-to-action {
+  background: #e3e3e3;
+  text-transform: uppercase;
+  font-weight: 500;
+  font-size: 80%;
+}
+.wy-dropdown-menu > dd.call-to-action:hover {
+  background: #e3e3e3;
+}
+.wy-dropdown-menu > dd.call-to-action .btn {
+  color: #fff;
+}
+.wy-dropdown.wy-dropdown-up .wy-dropdown-menu {
+  bottom: 100%;
+  top: auto;
+  left: auto;
+  right: 0;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu {
+  background: #fcfcfc;
+  margin-top: 2px;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a {
+  padding: 6px 12px;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover {
+  background: #000000;
+  color: #fff;
+}
+.wy-dropdown.wy-dropdown-left .wy-dropdown-menu {
+  right: 0;
+  left: auto;
+  text-align: right;
+}
+.wy-dropdown-arrow:before {
+  content: " ";
+  border-bottom: 5px solid #f5f5f5;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
+  position: absolute;
+  display: block;
+  top: -4px;
+  left: 50%;
+  margin-left: -3px;
+}
+.wy-dropdown-arrow.wy-dropdown-arrow-left:before {
+  left: 11px;
+}
+.wy-form-stacked select {
+  display: block;
+}
+.wy-form-aligned .wy-help-inline,
+.wy-form-aligned input,
+.wy-form-aligned label,
+.wy-form-aligned select,
+.wy-form-aligned textarea {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+  vertical-align: middle;
+}
+.wy-form-aligned .wy-control-group > label {
+  display: inline-block;
+  vertical-align: middle;
+  width: 10em;
+  margin: 6px 12px 0 0;
+  float: left;
+}
+.wy-form-aligned .wy-control {
+  float: left;
+}
+.wy-form-aligned .wy-control label {
+  display: block;
+}
+.wy-form-aligned .wy-control select {
+  margin-top: 6px;
+}
+fieldset {
+  margin: 0;
+}
+fieldset,
+legend {
+  border: 0;
+  padding: 0;
+}
+legend {
+  width: 100%;
+  white-space: normal;
+  margin-bottom: 24px;
+  font-size: 150%;
+  *margin-left: -7px;
+}
+label,
+legend {
+  display: block;
+}
+label {
+  margin: 0 0 0.3125em;
+  color: #333;
+  font-size: 90%;
+}
+input,
+select,
+textarea {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+}
+.wy-control-group {
+  margin-bottom: 24px;
+  max-width: 1200px;
+  margin-left: auto;
+  margin-right: auto;
+  *zoom: 1;
+}
+.wy-control-group:after,
+.wy-control-group:before {
+  display: table;
+  content: "";
+}
+.wy-control-group:after {
+  clear: both;
+}
+.wy-control-group.wy-control-group-required > label:after {
+  content: " *";
+  color: #e74c3c;
+}
+.wy-control-group .wy-form-full,
+.wy-control-group .wy-form-halves,
+.wy-control-group .wy-form-thirds {
+  padding-bottom: 12px;
+}
+.wy-control-group .wy-form-full input[type="color"],
+.wy-control-group .wy-form-full input[type="date"],
+.wy-control-group .wy-form-full input[type="datetime-local"],
+.wy-control-group .wy-form-full input[type="datetime"],
+.wy-control-group .wy-form-full input[type="email"],
+.wy-control-group .wy-form-full input[type="month"],
+.wy-control-group .wy-form-full input[type="number"],
+.wy-control-group .wy-form-full input[type="password"],
+.wy-control-group .wy-form-full input[type="search"],
+.wy-control-group .wy-form-full input[type="tel"],
+.wy-control-group .wy-form-full input[type="text"],
+.wy-control-group .wy-form-full input[type="time"],
+.wy-control-group .wy-form-full input[type="url"],
+.wy-control-group .wy-form-full input[type="week"],
+.wy-control-group .wy-form-full select,
+.wy-control-group .wy-form-halves input[type="color"],
+.wy-control-group .wy-form-halves input[type="date"],
+.wy-control-group .wy-form-halves input[type="datetime-local"],
+.wy-control-group .wy-form-halves input[type="datetime"],
+.wy-control-group .wy-form-halves input[type="email"],
+.wy-control-group .wy-form-halves input[type="month"],
+.wy-control-group .wy-form-halves input[type="number"],
+.wy-control-group .wy-form-halves input[type="password"],
+.wy-control-group .wy-form-halves input[type="search"],
+.wy-control-group .wy-form-halves input[type="tel"],
+.wy-control-group .wy-form-halves input[type="text"],
+.wy-control-group .wy-form-halves input[type="time"],
+.wy-control-group .wy-form-halves input[type="url"],
+.wy-control-group .wy-form-halves input[type="week"],
+.wy-control-group .wy-form-halves select,
+.wy-control-group .wy-form-thirds input[type="color"],
+.wy-control-group .wy-form-thirds input[type="date"],
+.wy-control-group .wy-form-thirds input[type="datetime-local"],
+.wy-control-group .wy-form-thirds input[type="datetime"],
+.wy-control-group .wy-form-thirds input[type="email"],
+.wy-control-group .wy-form-thirds input[type="month"],
+.wy-control-group .wy-form-thirds input[type="number"],
+.wy-control-group .wy-form-thirds input[type="password"],
+.wy-control-group .wy-form-thirds input[type="search"],
+.wy-control-group .wy-form-thirds input[type="tel"],
+.wy-control-group .wy-form-thirds input[type="text"],
+.wy-control-group .wy-form-thirds input[type="time"],
+.wy-control-group .wy-form-thirds input[type="url"],
+.wy-control-group .wy-form-thirds input[type="week"],
+.wy-control-group .wy-form-thirds select {
+  width: 100%;
+}
+.wy-control-group .wy-form-full {
+  float: left;
+  display: block;
+  width: 100%;
+  margin-right: 0;
+}
+.wy-control-group .wy-form-full:last-child {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-halves {
+  float: left;
+  display: block;
+  margin-right: 2.35765%;
+  width: 48.82117%;
+}
+.wy-control-group .wy-form-halves:last-child,
+.wy-control-group .wy-form-halves:nth-of-type(2n) {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-halves:nth-of-type(odd) {
+  clear: left;
+}
+.wy-control-group .wy-form-thirds {
+  float: left;
+  display: block;
+  margin-right: 2.35765%;
+  width: 31.76157%;
+}
+.wy-control-group .wy-form-thirds:last-child,
+.wy-control-group .wy-form-thirds:nth-of-type(3n) {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-thirds:nth-of-type(3n + 1) {
+  clear: left;
+}
+.wy-control-group.wy-control-group-no-input .wy-control,
+.wy-control-no-input {
+  margin: 6px 0 0;
+  font-size: 90%;
+}
+.wy-control-no-input {
+  display: inline-block;
+}
+.wy-control-group.fluid-input input[type="color"],
+.wy-control-group.fluid-input input[type="date"],
+.wy-control-group.fluid-input input[type="datetime-local"],
+.wy-control-group.fluid-input input[type="datetime"],
+.wy-control-group.fluid-input input[type="email"],
+.wy-control-group.fluid-input input[type="month"],
+.wy-control-group.fluid-input input[type="number"],
+.wy-control-group.fluid-input input[type="password"],
+.wy-control-group.fluid-input input[type="search"],
+.wy-control-group.fluid-input input[type="tel"],
+.wy-control-group.fluid-input input[type="text"],
+.wy-control-group.fluid-input input[type="time"],
+.wy-control-group.fluid-input input[type="url"],
+.wy-control-group.fluid-input input[type="week"] {
+  width: 100%;
+}
+.wy-form-message-inline {
+  padding-left: 0.3em;
+  color: #666;
+  font-size: 90%;
+}
+.wy-form-message {
+  display: block;
+  color: #999;
+  font-size: 70%;
+  margin-top: 0.3125em;
+  font-style: italic;
+}
+.wy-form-message p {
+  font-size: inherit;
+  font-style: italic;
+  margin-bottom: 6px;
+}
+.wy-form-message p:last-child {
+  margin-bottom: 0;
+}
+input {
+  line-height: normal;
+}
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button;
+  cursor: pointer;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  *overflow: visible;
+}
+input[type="color"],
+input[type="date"],
+input[type="datetime-local"],
+input[type="datetime"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"] {
+  -webkit-appearance: none;
+  padding: 6px;
+  display: inline-block;
+  border: 1px solid #ccc;
+  font-size: 80%;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  box-shadow: inset 0 1px 3px #ddd;
+  border-radius: 0;
+  -webkit-transition: border 0.3s linear;
+  -moz-transition: border 0.3s linear;
+  transition: border 0.3s linear;
+}
+input[type="datetime-local"] {
+  padding: 0.34375em 0.625em;
+}
+input[disabled] {
+  cursor: default;
+}
+input[type="checkbox"],
+input[type="radio"] {
+  padding: 0;
+  margin-right: 0.3125em;
+  *height: 13px;
+  *width: 13px;
+}
+input[type="checkbox"],
+input[type="radio"],
+input[type="search"] {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+input[type="color"]:focus,
+input[type="date"]:focus,
+input[type="datetime-local"]:focus,
+input[type="datetime"]:focus,
+input[type="email"]:focus,
+input[type="month"]:focus,
+input[type="number"]:focus,
+input[type="password"]:focus,
+input[type="search"]:focus,
+input[type="tel"]:focus,
+input[type="text"]:focus,
+input[type="time"]:focus,
+input[type="url"]:focus,
+input[type="week"]:focus {
+  outline: 0;
+  outline: thin dotted\9;
+  border-color: #333;
+}
+input.no-focus:focus {
+  border-color: #ccc !important;
+}
+input[type="checkbox"]:focus,
+input[type="file"]:focus,
+input[type="radio"]:focus {
+  outline: thin dotted #333;
+  outline: 1px auto #129fea;
+}
+input[type="color"][disabled],
+input[type="date"][disabled],
+input[type="datetime-local"][disabled],
+input[type="datetime"][disabled],
+input[type="email"][disabled],
+input[type="month"][disabled],
+input[type="number"][disabled],
+input[type="password"][disabled],
+input[type="search"][disabled],
+input[type="tel"][disabled],
+input[type="text"][disabled],
+input[type="time"][disabled],
+input[type="url"][disabled],
+input[type="week"][disabled] {
+  cursor: not-allowed;
+  background-color: #fafafa;
+}
+input:focus:invalid,
+select:focus:invalid,
+textarea:focus:invalid {
+  color: #e74c3c;
+  border: 1px solid #e74c3c;
+}
+input:focus:invalid:focus,
+select:focus:invalid:focus,
+textarea:focus:invalid:focus {
+  border-color: #e74c3c;
+}
+input[type="checkbox"]:focus:invalid:focus,
+input[type="file"]:focus:invalid:focus,
+input[type="radio"]:focus:invalid:focus {
+  outline-color: #e74c3c;
+}
+input.wy-input-large {
+  padding: 12px;
+  font-size: 100%;
+}
+textarea {
+  overflow: auto;
+  vertical-align: top;
+  width: 100%;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+}
+select,
+textarea {
+  padding: 0.5em 0.625em;
+  display: inline-block;
+  border: 1px solid #ccc;
+  font-size: 80%;
+  box-shadow: inset 0 1px 3px #ddd;
+  -webkit-transition: border 0.3s linear;
+  -moz-transition: border 0.3s linear;
+  transition: border 0.3s linear;
+}
+select {
+  border: 1px solid #ccc;
+  background-color: #fff;
+}
+select[multiple] {
+  height: auto;
+}
+select:focus,
+textarea:focus {
+  outline: 0;
+}
+input[readonly],
+select[disabled],
+select[readonly],
+textarea[disabled],
+textarea[readonly] {
+  cursor: not-allowed;
+  background-color: #fafafa;
+}
+input[type="checkbox"][disabled],
+input[type="radio"][disabled] {
+  cursor: not-allowed;
+}
+.wy-checkbox,
+.wy-radio {
+  margin: 6px 0;
+  color: #404040;
+  display: block;
+}
+.wy-checkbox input,
+.wy-radio input {
+  vertical-align: baseline;
+}
+.wy-form-message-inline {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+  vertical-align: middle;
+}
+.wy-input-prefix,
+.wy-input-suffix {
+  white-space: nowrap;
+  padding: 6px;
+}
+.wy-input-prefix .wy-input-context,
+.wy-input-suffix .wy-input-context {
+  line-height: 27px;
+  padding: 0 8px;
+  display: inline-block;
+  font-size: 80%;
+  background-color: #f3f6f6;
+  border: 1px solid #ccc;
+  color: #999;
+}
+.wy-input-suffix .wy-input-context {
+  border-left: 0;
+}
+.wy-input-prefix .wy-input-context {
+  border-right: 0;
+}
+.wy-switch {
+  position: relative;
+  display: block;
+  height: 24px;
+  margin-top: 12px;
+  cursor: pointer;
+}
+.wy-switch:before {
+  left: 0;
+  top: 0;
+  width: 36px;
+  height: 12px;
+  background: #ccc;
+}
+.wy-switch:after,
+.wy-switch:before {
+  position: absolute;
+  content: "";
+  display: block;
+  border-radius: 4px;
+  -webkit-transition: all 0.2s ease-in-out;
+  -moz-transition: all 0.2s ease-in-out;
+  transition: all 0.2s ease-in-out;
+}
+.wy-switch:after {
+  width: 18px;
+  height: 18px;
+  background: #999;
+  left: -3px;
+  top: -3px;
+}
+.wy-switch span {
+  position: absolute;
+  left: 48px;
+  display: block;
+  font-size: 12px;
+  color: #ccc;
+  line-height: 1;
+}
+.wy-switch.active:before {
+  background: #1e8449;
+}
+.wy-switch.active:after {
+  left: 24px;
+  background: #27ae60;
+}
+.wy-switch.disabled {
+  cursor: not-allowed;
+  opacity: 0.8;
+}
+.wy-control-group.wy-control-group-error .wy-form-message,
+.wy-control-group.wy-control-group-error > label {
+  color: #e74c3c;
+}
+.wy-control-group.wy-control-group-error input[type="color"],
+.wy-control-group.wy-control-group-error input[type="date"],
+.wy-control-group.wy-control-group-error input[type="datetime-local"],
+.wy-control-group.wy-control-group-error input[type="datetime"],
+.wy-control-group.wy-control-group-error input[type="email"],
+.wy-control-group.wy-control-group-error input[type="month"],
+.wy-control-group.wy-control-group-error input[type="number"],
+.wy-control-group.wy-control-group-error input[type="password"],
+.wy-control-group.wy-control-group-error input[type="search"],
+.wy-control-group.wy-control-group-error input[type="tel"],
+.wy-control-group.wy-control-group-error input[type="text"],
+.wy-control-group.wy-control-group-error input[type="time"],
+.wy-control-group.wy-control-group-error input[type="url"],
+.wy-control-group.wy-control-group-error input[type="week"],
+.wy-control-group.wy-control-group-error textarea {
+  border: 1px solid #e74c3c;
+}
+.wy-inline-validate {
+  white-space: nowrap;
+}
+.wy-inline-validate .wy-input-context {
+  padding: 0.5em 0.625em;
+  display: inline-block;
+  font-size: 80%;
+}
+.wy-inline-validate.wy-inline-validate-success .wy-input-context {
+  color: #27ae60;
+}
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context {
+  color: #e74c3c;
+}
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context {
+  color: #e67e22;
+}
+.wy-inline-validate.wy-inline-validate-info .wy-input-context {
+  color: #2980b9;
+}
+.rotate-90 {
+  -webkit-transform: rotate(90deg);
+  -moz-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  -o-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.rotate-180 {
+  -webkit-transform: rotate(180deg);
+  -moz-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  -o-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.rotate-270 {
+  -webkit-transform: rotate(270deg);
+  -moz-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  -o-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.mirror {
+  -webkit-transform: scaleX(-1);
+  -moz-transform: scaleX(-1);
+  -ms-transform: scaleX(-1);
+  -o-transform: scaleX(-1);
+  transform: scaleX(-1);
+}
+.mirror.rotate-90 {
+  -webkit-transform: scaleX(-1) rotate(90deg);
+  -moz-transform: scaleX(-1) rotate(90deg);
+  -ms-transform: scaleX(-1) rotate(90deg);
+  -o-transform: scaleX(-1) rotate(90deg);
+  transform: scaleX(-1) rotate(90deg);
+}
+.mirror.rotate-180 {
+  -webkit-transform: scaleX(-1) rotate(180deg);
+  -moz-transform: scaleX(-1) rotate(180deg);
+  -ms-transform: scaleX(-1) rotate(180deg);
+  -o-transform: scaleX(-1) rotate(180deg);
+  transform: scaleX(-1) rotate(180deg);
+}
+.mirror.rotate-270 {
+  -webkit-transform: scaleX(-1) rotate(270deg);
+  -moz-transform: scaleX(-1) rotate(270deg);
+  -ms-transform: scaleX(-1) rotate(270deg);
+  -o-transform: scaleX(-1) rotate(270deg);
+  transform: scaleX(-1) rotate(270deg);
+}
+@media only screen and (max-width: 480px) {
+  .wy-form button[type="submit"] {
+    margin: 0.7em 0 0;
+  }
+  .wy-form input[type="color"],
+  .wy-form input[type="date"],
+  .wy-form input[type="datetime-local"],
+  .wy-form input[type="datetime"],
+  .wy-form input[type="email"],
+  .wy-form input[type="month"],
+  .wy-form input[type="number"],
+  .wy-form input[type="password"],
+  .wy-form input[type="search"],
+  .wy-form input[type="tel"],
+  .wy-form input[type="text"],
+  .wy-form input[type="time"],
+  .wy-form input[type="url"],
+  .wy-form input[type="week"],
+  .wy-form label {
+    margin-bottom: 0.3em;
+    display: block;
+  }
+  .wy-form input[type="color"],
+  .wy-form input[type="date"],
+  .wy-form input[type="datetime-local"],
+  .wy-form input[type="datetime"],
+  .wy-form input[type="email"],
+  .wy-form input[type="month"],
+  .wy-form input[type="number"],
+  .wy-form input[type="password"],
+  .wy-form input[type="search"],
+  .wy-form input[type="tel"],
+  .wy-form input[type="time"],
+  .wy-form input[type="url"],
+  .wy-form input[type="week"] {
+    margin-bottom: 0;
+  }
+  .wy-form-aligned .wy-control-group label {
+    margin-bottom: 0.3em;
+    text-align: left;
+    display: block;
+    width: 100%;
+  }
+  .wy-form-aligned .wy-control {
+    margin: 1.5em 0 0;
+  }
+  .wy-form-message,
+  .wy-form-message-inline,
+  .wy-form .wy-help-inline {
+    display: block;
+    font-size: 80%;
+    padding: 6px 0;
+  }
+}
+@media screen and (max-width: 768px) {
+  .tablet-hide {
+    display: none;
+  }
+}
+@media screen and (max-width: 480px) {
+  .mobile-hide {
+    display: none;
+  }
+}
+.float-left {
+  float: left;
+}
+.float-right {
+  float: right;
+}
+.full-width {
+  width: 100%;
+}
+.rst-content table.docutils,
+.rst-content table.field-list,
+.wy-table {
+  border-collapse: collapse;
+  border-spacing: 0;
+  empty-cells: show;
+  margin-bottom: 24px;
+}
+.rst-content table.docutils caption,
+.rst-content table.field-list caption,
+.wy-table caption {
+  color: #000;
+  font-style: italic;
+  font-size: 85%;
+  padding: 1em 0;
+  text-align: center;
+}
+.rst-content table.docutils td,
+.rst-content table.docutils th,
+.rst-content table.field-list td,
+.rst-content table.field-list th,
+.wy-table td,
+.wy-table th {
+  font-size: 90%;
+  margin: 0;
+  overflow: visible;
+  padding: 8px 16px;
+}
+.rst-content table.docutils td:first-child,
+.rst-content table.docutils th:first-child,
+.rst-content table.field-list td:first-child,
+.rst-content table.field-list th:first-child,
+.wy-table td:first-child,
+.wy-table th:first-child {
+  border-left-width: 0;
+}
+.rst-content table.docutils thead,
+.rst-content table.field-list thead,
+.wy-table thead {
+  color: #000;
+  text-align: left;
+  vertical-align: bottom;
+  white-space: nowrap;
+}
+.rst-content table.docutils thead th,
+.rst-content table.field-list thead th,
+.wy-table thead th {
+  font-weight: 700;
+  border-bottom: 2px solid #e1e4e5;
+}
+.rst-content table.docutils td,
+.rst-content table.field-list td,
+.wy-table td {
+  background-color: transparent;
+  vertical-align: middle;
+}
+.rst-content table.docutils td p,
+.rst-content table.field-list td p,
+.wy-table td p {
+  line-height: 18px;
+}
+.rst-content table.docutils td p:last-child,
+.rst-content table.field-list td p:last-child,
+.wy-table td p:last-child {
+  margin-bottom: 0;
+}
+.rst-content table.docutils .wy-table-cell-min,
+.rst-content table.field-list .wy-table-cell-min,
+.wy-table .wy-table-cell-min {
+  width: 1%;
+  padding-right: 0;
+}
+.rst-content table.docutils .wy-table-cell-min input[type="checkbox"],
+.rst-content table.field-list .wy-table-cell-min input[type="checkbox"],
+.wy-table .wy-table-cell-min input[type="checkbox"] {
+  margin: 0;
+}
+.wy-table-secondary {
+  color: grey;
+  font-size: 90%;
+}
+.wy-table-tertiary {
+  color: grey;
+  font-size: 80%;
+}
+.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,
+.wy-table-backed,
+.wy-table-odd td,
+.wy-table-striped tr:nth-child(2n-1) td {
+  background-color: #f3f6f6;
+}
+.rst-content table.docutils,
+.wy-table-bordered-all {
+  border: 1px solid #e1e4e5;
+}
+.rst-content table.docutils td,
+.wy-table-bordered-all td {
+  border-bottom: 1px solid #e1e4e5;
+  border-left: 1px solid #e1e4e5;
+}
+.rst-content table.docutils tbody > tr:last-child td,
+.wy-table-bordered-all tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-bordered {
+  border: 1px solid #e1e4e5;
+}
+.wy-table-bordered-rows td {
+  border-bottom: 1px solid #e1e4e5;
+}
+.wy-table-bordered-rows tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-horizontal td,
+.wy-table-horizontal th {
+  border-width: 0 0 1px;
+  border-bottom: 1px solid #e1e4e5;
+}
+.wy-table-horizontal tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-responsive {
+  margin-bottom: 24px;
+  max-width: 100%;
+  overflow: auto;
+}
+.wy-table-responsive table {
+  margin-bottom: 0 !important;
+}
+.wy-table-responsive table td,
+.wy-table-responsive table th {
+  white-space: nowrap;
+}
+a {
+  color: #2980b9;
+  text-decoration: none;
+  cursor: pointer;
+}
+a:hover {
+  color: #3091d1;
+}
+a:visited {
+  color: #2980b9;
+}
+html {
+  height: 100%;
+}
+body,
+html {
+  overflow-x: hidden;
+}
+body {
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  font-weight: 400;
+  color: #404040;
+  min-height: 100%;
+  background: #edf0f2;
+}
+.wy-text-left {
+  text-align: left;
+}
+.wy-text-center {
+  text-align: center;
+}
+.wy-text-right {
+  text-align: right;
+}
+.wy-text-large {
+  font-size: 120%;
+}
+.wy-text-normal {
+  font-size: 100%;
+}
+.wy-text-small,
+small {
+  font-size: 80%;
+}
+.wy-text-strike {
+  text-decoration: line-through;
+}
+.wy-text-warning {
+  color: #e67e22 !important;
+}
+a.wy-text-warning:hover {
+  color: #eb9950 !important;
+}
+.wy-text-info {
+  color: #2980b9 !important;
+}
+a.wy-text-info:hover {
+  color: #409ad5 !important;
+}
+.wy-text-success {
+  color: #27ae60 !important;
+}
+a.wy-text-success:hover {
+  color: #36d278 !important;
+}
+.wy-text-danger {
+  color: #e74c3c !important;
+}
+a.wy-text-danger:hover {
+  color: #ed7669 !important;
+}
+.wy-text-neutral {
+  color: #404040 !important;
+}
+a.wy-text-neutral:hover {
+  color: #595959 !important;
+}
+.rst-content .toctree-wrapper > p.caption,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+legend {
+  margin-top: 0;
+  font-weight: 700;
+  font-family: Helvetica, Arial, sans-serif, ff-tisa-web-pro, Georgia;
+}
+p {
+  line-height: 24px;
+  font-size: 16px;
+  margin: 0 0 24px;
+}
+h1 {
+  font-size: 175%;
+}
+.rst-content .toctree-wrapper > p.caption,
+h2 {
+  font-size: 150%;
+}
+h3 {
+  font-size: 125%;
+}
+h4 {
+  font-size: 115%;
+}
+h5 {
+  font-size: 110%;
+}
+h6 {
+  font-size: 100%;
+}
+hr {
+  display: block;
+  height: 1px;
+  border: 0;
+  border-top: 1px solid #e1e4e5;
+  margin: 24px 0;
+  padding: 0;
+}
+.rst-content code,
+.rst-content tt,
+code {
+  white-space: nowrap;
+  max-width: 100%;
+  background: #fff;
+  border: 1px solid #e1e4e5;
+  font-size: 75%;
+  padding: 0 5px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  color: #E60000;
+  overflow-x: auto;
+}
+.rst-content tt.code-large,
+code.code-large {
+  font-size: 90%;
+}
+.rst-content .section ul,
+.rst-content .toctree-wrapper ul,
+.wy-plain-list-disc,
+article ul {
+  list-style: disc;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content .section ul li,
+.rst-content .toctree-wrapper ul li,
+.wy-plain-list-disc li,
+article ul li {
+  list-style: disc;
+  margin-left: 24px;
+}
+.rst-content .section ul li p:last-child,
+.rst-content .section ul li ul,
+.rst-content .toctree-wrapper ul li p:last-child,
+.rst-content .toctree-wrapper ul li ul,
+.wy-plain-list-disc li p:last-child,
+.wy-plain-list-disc li ul,
+article ul li p:last-child,
+article ul li ul {
+  margin-bottom: 0;
+}
+.rst-content .section ul li li,
+.rst-content .toctree-wrapper ul li li,
+.wy-plain-list-disc li li,
+article ul li li {
+  list-style: circle;
+}
+.rst-content .section ul li li li,
+.rst-content .toctree-wrapper ul li li li,
+.wy-plain-list-disc li li li,
+article ul li li li {
+  list-style: square;
+}
+.rst-content .section ul li ol li,
+.rst-content .toctree-wrapper ul li ol li,
+.wy-plain-list-disc li ol li,
+article ul li ol li {
+  list-style: decimal;
+}
+.rst-content .section ol,
+.rst-content ol.arabic,
+.wy-plain-list-decimal,
+article ol {
+  list-style: decimal;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content .section ol li,
+.rst-content ol.arabic li,
+.wy-plain-list-decimal li,
+article ol li {
+  list-style: decimal;
+  margin-left: 24px;
+}
+.rst-content .section ol li p:last-child,
+.rst-content .section ol li ul,
+.rst-content ol.arabic li p:last-child,
+.rst-content ol.arabic li ul,
+.wy-plain-list-decimal li p:last-child,
+.wy-plain-list-decimal li ul,
+article ol li p:last-child,
+article ol li ul {
+  margin-bottom: 0;
+}
+.rst-content .section ol li ul li,
+.rst-content ol.arabic li ul li,
+.wy-plain-list-decimal li ul li,
+article ol li ul li {
+  list-style: disc;
+}
+.wy-breadcrumbs {
+  *zoom: 1;
+}
+.wy-breadcrumbs:after,
+.wy-breadcrumbs:before {
+  display: table;
+  content: "";
+}
+.wy-breadcrumbs:after {
+  clear: both;
+}
+.wy-breadcrumbs li {
+  display: inline-block;
+}
+.wy-breadcrumbs li.wy-breadcrumbs-aside {
+  float: right;
+}
+.wy-breadcrumbs li a {
+  display: inline-block;
+  padding: 5px;
+}
+
+.wy-breadcrumbs li a:before {
+  font-weight: bold;
+  color: #000000;
+  content: "//";
+}
+.wy-breadcrumbs li a:first-child {
+  padding-left: 0;
+}
+
+.rst-content .wy-breadcrumbs li tt,
+.wy-breadcrumbs li .rst-content tt,
+.wy-breadcrumbs li code {
+  padding: 5px;
+  border: none;
+  background: none;
+}
+.rst-content .wy-breadcrumbs li tt.literal,
+.wy-breadcrumbs li .rst-content tt.literal,
+.wy-breadcrumbs li code.literal {
+  color: #E60000;
+}
+.wy-breadcrumbs-extra {
+  margin-bottom: 0;
+  color: #b3b3b3;
+  font-size: 80%;
+  display: inline-block;
+}
+@media screen and (max-width: 480px) {
+  .wy-breadcrumbs-extra,
+  .wy-breadcrumbs li.wy-breadcrumbs-aside {
+    display: none;
+  }
+}
+@media print {
+  .wy-breadcrumbs li.wy-breadcrumbs-aside {
+    display: none;
+  }
+}
+html {
+  font-size: 16px;
+}
+.wy-affix {
+  position: fixed;
+  top: 1.618em;
+}
+.wy-menu a:hover {
+  text-decoration: none;
+}
+.wy-menu-horiz {
+  *zoom: 1;
+}
+.wy-menu-horiz:after,
+.wy-menu-horiz:before {
+  display: table;
+  content: "";
+}
+.wy-menu-horiz:after {
+  clear: both;
+}
+.wy-menu-horiz li,
+.wy-menu-horiz ul {
+  display: inline-block;
+}
+.wy-menu-horiz li:hover {
+  background: hsla(0, 0%, 100%, 0.1);
+}
+.wy-menu-horiz li.divide-left {
+  border-left: 1px solid #404040;
+}
+.wy-menu-horiz li.divide-right {
+  border-right: 1px solid #404040;
+}
+.wy-menu-horiz a {
+  height: 32px;
+  display: inline-block;
+  line-height: 32px;
+  padding: 0 16px;
+}
+.wy-menu-vertical {
+  width: 300px;
+}
+.wy-menu-vertical header,
+.wy-menu-vertical p.caption::before {
+    font-weight: normal;
+    letter-spacing: .1rem;
+    color: #E60000;
+    font-size: 120%;
+    content: "// ";
+  }
+.wy-menu-vertical p.caption {
+  color: #ffffff;
+  height: 32px;
+  line-height: 32px;
+  padding: 0 1.618em;
+  margin: 12px 0 0;
+  display: block;
+  font-weight: 400;
+  text-transform: uppercase;
+  font-size: 85%;
+  white-space: nowrap;
+}
+.wy-menu-vertical ul {
+  margin-bottom: 0;
+}
+.wy-menu-vertical li.divide-top {
+  border-top: 1px solid #404040;
+}
+.wy-menu-vertical li.divide-bottom {
+  border-bottom: 1px solid #404040;
+}
+.wy-menu-vertical li.current {
+  background: #e3e3e3;
+}
+.wy-menu-vertical li.current a {
+  color: grey;
+  border-right: 1px solid #c9c9c9;
+  padding: 0.4045em 2.427em;
+}
+.wy-menu-vertical li.current a:hover {
+  background: #d6d6d6;
+}
+.rst-content .wy-menu-vertical li tt,
+.wy-menu-vertical li .rst-content tt,
+.wy-menu-vertical li code {
+  border: none;
+  background: inherit;
+  color: inherit;
+  padding-left: 0;
+  padding-right: 0;
+}
+.wy-menu-vertical li span.toctree-expand {
+  display: block;
+  float: left;
+  margin-left: -1.2em;
+  font-size: 0.8em;
+  line-height: 1.6em;
+  color: #4d4d4d;
+}
+.wy-menu-vertical li.current > a,
+.wy-menu-vertical li.on a {
+  color: #404040;
+  font-weight: 700;
+  position: relative;
+  background: #fcfcfc;
+  border: none;
+  padding: 0.4045em 1.618em;
+}
+.wy-menu-vertical li.current > a:hover,
+.wy-menu-vertical li.on a:hover {
+  background: #fcfcfc;
+}
+.wy-menu-vertical li.current > a:hover span.toctree-expand,
+.wy-menu-vertical li.on a:hover span.toctree-expand {
+  color: grey;
+}
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand {
+  display: block;
+  font-size: 0.8em;
+  line-height: 1.6em;
+  color: #333;
+}
+.wy-menu-vertical li.toctree-l1.current > a {
+  border-bottom: 1px solid #c9c9c9;
+  border-top: 1px solid #c9c9c9;
+}
+.wy-menu-vertical .toctree-l1.current .toctree-l2 > ul,
+.wy-menu-vertical .toctree-l2.current .toctree-l3 > ul,
+.wy-menu-vertical .toctree-l3.current .toctree-l4 > ul,
+.wy-menu-vertical .toctree-l4.current .toctree-l5 > ul,
+.wy-menu-vertical .toctree-l5.current .toctree-l6 > ul,
+.wy-menu-vertical .toctree-l6.current .toctree-l7 > ul,
+.wy-menu-vertical .toctree-l7.current .toctree-l8 > ul,
+.wy-menu-vertical .toctree-l8.current .toctree-l9 > ul,
+.wy-menu-vertical .toctree-l9.current .toctree-l10 > ul,
+.wy-menu-vertical .toctree-l10.current .toctree-l11 > ul {
+  display: none;
+}
+.wy-menu-vertical .toctree-l1.current .current.toctree-l2 > ul,
+.wy-menu-vertical .toctree-l2.current .current.toctree-l3 > ul,
+.wy-menu-vertical .toctree-l3.current .current.toctree-l4 > ul,
+.wy-menu-vertical .toctree-l4.current .current.toctree-l5 > ul,
+.wy-menu-vertical .toctree-l5.current .current.toctree-l6 > ul,
+.wy-menu-vertical .toctree-l6.current .current.toctree-l7 > ul,
+.wy-menu-vertical .toctree-l7.current .current.toctree-l8 > ul,
+.wy-menu-vertical .toctree-l8.current .current.toctree-l9 > ul,
+.wy-menu-vertical .toctree-l9.current .current.toctree-l10 > ul,
+.wy-menu-vertical .toctree-l10.current .current.toctree-l11 > ul {
+  display: block;
+}
+.wy-menu-vertical li.toctree-l3,
+.wy-menu-vertical li.toctree-l4 {
+  font-size: 0.9em;
+}
+.wy-menu-vertical li.toctree-l2 a,
+.wy-menu-vertical li.toctree-l3 a,
+.wy-menu-vertical li.toctree-l4 a,
+.wy-menu-vertical li.toctree-l5 a,
+.wy-menu-vertical li.toctree-l6 a,
+.wy-menu-vertical li.toctree-l7 a,
+.wy-menu-vertical li.toctree-l8 a,
+.wy-menu-vertical li.toctree-l9 a,
+.wy-menu-vertical li.toctree-l10 a {
+  color: #404040;
+}
+.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand {
+  color: grey;
+}
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a,
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a,
+.wy-menu-vertical li.toctree-l4.current li.toctree-l5 > a,
+.wy-menu-vertical li.toctree-l5.current li.toctree-l6 > a,
+.wy-menu-vertical li.toctree-l6.current li.toctree-l7 > a,
+.wy-menu-vertical li.toctree-l7.current li.toctree-l8 > a,
+.wy-menu-vertical li.toctree-l8.current li.toctree-l9 > a,
+.wy-menu-vertical li.toctree-l9.current li.toctree-l10 > a,
+.wy-menu-vertical li.toctree-l10.current li.toctree-l11 > a {
+  display: block;
+}
+.wy-menu-vertical li.toctree-l2.current > a {
+  padding: 0.4045em 2.427em;
+}
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a,
+.wy-menu-vertical li.toctree-l3.current > a {
+  padding: 0.4045em 4.045em;
+}
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a,
+.wy-menu-vertical li.toctree-l4.current > a {
+  padding: 0.4045em 5.663em;
+}
+.wy-menu-vertical li.toctree-l4.current li.toctree-l5 > a,
+.wy-menu-vertical li.toctree-l5.current > a {
+  padding: 0.4045em 7.281em;
+}
+.wy-menu-vertical li.toctree-l5.current li.toctree-l6 > a,
+.wy-menu-vertical li.toctree-l6.current > a {
+  padding: 0.4045em 8.899em;
+}
+.wy-menu-vertical li.toctree-l6.current li.toctree-l7 > a,
+.wy-menu-vertical li.toctree-l7.current > a {
+  padding: 0.4045em 10.517em;
+}
+.wy-menu-vertical li.toctree-l7.current li.toctree-l8 > a,
+.wy-menu-vertical li.toctree-l8.current > a {
+  padding: 0.4045em 12.135em;
+}
+.wy-menu-vertical li.toctree-l8.current li.toctree-l9 > a,
+.wy-menu-vertical li.toctree-l9.current > a {
+  padding: 0.4045em 13.753em;
+}
+.wy-menu-vertical li.toctree-l9.current li.toctree-l10 > a,
+.wy-menu-vertical li.toctree-l10.current > a {
+  padding: 0.4045em 15.371em;
+}
+.wy-menu-vertical li.toctree-l10.current li.toctree-l11 > a {
+  padding: 0.4045em 16.989em;
+}
+.wy-menu-vertical li.toctree-l2.current > a,
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a {
+  background: #c9c9c9;
+}
+.wy-menu-vertical li.toctree-l2 span.toctree-expand {
+  color: #a3a3a3;
+}
+.wy-menu-vertical li.toctree-l3.current > a,
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a {
+  background: #bdbdbd;
+}
+.wy-menu-vertical li.toctree-l3 span.toctree-expand {
+  color: #969696;
+}
+.wy-menu-vertical li.current ul {
+  display: block;
+}
+.wy-menu-vertical li ul {
+  margin-bottom: 0;
+  display: none;
+}
+.wy-menu-vertical li ul li a {
+  margin-bottom: 0;
+  color: #d9d9d9;
+  font-weight: 400;
+}
+.wy-menu-vertical a {
+  line-height: 18px;
+  padding: 0.4045em 1.618em;
+  display: block;
+  position: relative;
+  font-size: 90%;
+  color: #d9d9d9;
+}
+.wy-menu-vertical a:hover {
+  background-color: #4e4a4a;
+  cursor: pointer;
+}
+.wy-menu-vertical a:hover span.toctree-expand {
+  color: #d9d9d9;
+}
+.wy-menu-vertical a:active {
+  background-color: #000000;
+  cursor: pointer;
+  color: #fff;
+}
+.wy-menu-vertical a:active span.toctree-expand {
+  color: #fff;
+}
+.wy-side-nav-search {
+  display: block;
+  width: 300px;
+  padding: 0.809em;
+  margin-bottom: 0.809em;
+  z-index: 200;
+  background-color: #262626;
+  text-align: center;
+  color: #fcfcfc;
+}
+.wy-side-nav-search input[type="text"] {
+  width: 100%;
+  border-radius: 50px;
+  padding: 6px 12px;
+  border-color: #000000;
+}
+.wy-side-nav-search img {
+  display: block;
+  margin: auto auto 0.809em;
+  height: 45px;
+  width: 45px;
+  background-color: #666666;
+  padding: 5px;
+  border-radius: 100%;
+}
+.wy-side-nav-search .wy-dropdown > a,
+.wy-side-nav-search > a {
+  color: #fcfcfc;
+  font-size: 100%;
+  font-weight: 700;
+  display: inline-block;
+  padding: 4px 6px;
+  margin-bottom: 0.809em;
+}
+.wy-side-nav-search .wy-dropdown > a:hover,
+.wy-side-nav-search > a:hover {
+  background: hsla(0, 0%, 100%, 0.1);
+}
+.wy-side-nav-search .wy-dropdown > a img.logo,
+.wy-side-nav-search > a img.logo {
+  display: block;
+  margin: 0 auto;
+  height: auto;
+  width: auto;
+  border-radius: 0;
+  max-width: 100%;
+  background: transparent;
+}
+.wy-side-nav-search .wy-dropdown > a.icon img.logo,
+.wy-side-nav-search > a.icon img.logo {
+  margin-top: 0.85em;
+}
+.wy-side-nav-search > div.version {
+  margin-top: -0.4045em;
+  margin-bottom: 0.809em;
+  font-weight: 400;
+  color: #ffffff;
+}
+.wy-nav .wy-menu-vertical header {
+  color: #666666;
+}
+.wy-nav .wy-menu-vertical a {
+  color: #b3b3b3;
+}
+.wy-nav .wy-menu-vertical a:hover {
+  background-color: #000000;
+  color: #fff;
+}
+[data-menu-wrap] {
+  -webkit-transition: all 0.2s ease-in;
+  -moz-transition: all 0.2s ease-in;
+  transition: all 0.2s ease-in;
+  position: absolute;
+  opacity: 1;
+  width: 100%;
+  opacity: 0;
+}
+[data-menu-wrap].move-center {
+  left: 0;
+  right: auto;
+  opacity: 1;
+}
+[data-menu-wrap].move-left {
+  right: auto;
+  left: -100%;
+  opacity: 0;
+}
+[data-menu-wrap].move-right {
+  right: -100%;
+  left: auto;
+  opacity: 0;
+}
+.wy-body-for-nav {
+  background: #fcfcfc;
+}
+.wy-grid-for-nav {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+}
+.wy-nav-side {
+  position: fixed;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  padding-bottom: 2em;
+  width: 300px;
+  overflow-x: hidden;
+  overflow-y: hidden;
+  min-height: 100%;
+  color: #9b9b9b;
+  background: #000000;
+  z-index: 200;
+}
+.wy-side-scroll {
+  width: 320px;
+  position: relative;
+  overflow-x: hidden;
+  overflow-y: scroll;
+  height: 100%;
+}
+.wy-nav-top {
+  display: none;
+  background: #262626;
+  color: #fff;
+  padding: 0.4045em 0.809em;
+  position: relative;
+  line-height: 50px;
+  text-align: center;
+  font-size: 100%;
+  *zoom: 1;
+}
+.wy-nav-top:after,
+.wy-nav-top:before {
+  display: table;
+  content: "";
+}
+.wy-nav-top:after {
+  clear: both;
+}
+.wy-nav-top a {
+  color: #fff;
+  font-weight: 700;
+}
+.wy-nav-top img {
+  margin-right: 12px;
+  height: 45px;
+  width: 45px;
+  background-color: #666666;
+  padding: 5px;
+  border-radius: 100%;
+}
+.wy-nav-top i {
+  font-size: 30px;
+  float: left;
+  cursor: pointer;
+  padding-top: inherit;
+}
+.wy-nav-content-wrap {
+  margin-left: 300px;
+  background: #fcfcfc;
+  min-height: 100%;
+}
+.wy-nav-content {
+  padding: 1.618em 3.236em;
+  height: 100%;
+  max-width: 800px;
+  margin: auto;
+}
+.wy-body-mask {
+  position: fixed;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.2);
+  display: none;
+  z-index: 499;
+}
+.wy-body-mask.on {
+  display: block;
+}
+footer {
+  color: grey;
+}
+footer p {
+  margin-bottom: 12px;
+}
+.rst-content footer span.commit tt,
+footer span.commit .rst-content tt,
+footer span.commit code {
+  padding: 0;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  font-size: 1em;
+  background: none;
+  border: none;
+  color: grey;
+}
+.rst-footer-buttons {
+  *zoom: 1;
+}
+.rst-footer-buttons:after,
+.rst-footer-buttons:before {
+  width: 100%;
+  display: table;
+  content: "";
+}
+.rst-footer-buttons:after {
+  clear: both;
+}
+.rst-breadcrumbs-buttons {
+  margin-top: 12px;
+  *zoom: 1;
+}
+.rst-breadcrumbs-buttons:after,
+.rst-breadcrumbs-buttons:before {
+  display: table;
+  content: "";
+}
+.rst-breadcrumbs-buttons:after {
+  clear: both;
+}
+#search-results .search li {
+  margin-bottom: 24px;
+  border-bottom: 1px solid #e1e4e5;
+  padding-bottom: 24px;
+}
+#search-results .search li:first-child {
+  border-top: 1px solid #e1e4e5;
+  padding-top: 24px;
+}
+#search-results .search li a {
+  font-size: 120%;
+  margin-bottom: 12px;
+  display: inline-block;
+}
+#search-results .context {
+  color: grey;
+  font-size: 90%;
+}
+.genindextable li > ul {
+  margin-left: 24px;
+}
+@media screen and (max-width: 768px) {
+  .wy-body-for-nav {
+    background: #ffffff;
+  }
+  .wy-nav-top {
+    display: block;
+  }
+  .wy-nav-side {
+    left: -300px;
+  }
+  .wy-nav-side.shift {
+    width: 85%;
+    left: 0;
+  }
+  .wy-menu.wy-menu-vertical,
+  .wy-side-nav-search,
+  .wy-side-scroll {
+    width: auto;
+  }
+  .wy-nav-content-wrap {
+    margin-left: 0;
+  }
+  .wy-nav-content-wrap .wy-nav-content {
+    padding: 1.618em;
+  }
+  .wy-nav-content-wrap.shift {
+    position: fixed;
+    min-width: 100%;
+    left: 85%;
+    top: 0;
+    height: 100%;
+    overflow: hidden;
+  }
+}
+@media screen and (min-width: 1100px) {
+  .wy-nav-content-wrap {
+    background: #ffffff;
+  }
+  .wy-nav-content {
+    margin: 0;
+    background: #ffffff;
+  }
+}
+@media print {
+  .rst-versions,
+  .wy-nav-side,
+  footer {
+    display: none;
+  }
+  .wy-nav-content-wrap {
+    margin-left: 0;
+  }
+}
+.rst-versions {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 300px;
+  color: #fcfcfc;
+  background: #1f1d1d;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  z-index: 400;
+}
+.rst-versions a {
+  color: #2980b9;
+  text-decoration: none;
+}
+.rst-versions .rst-badge-small {
+  display: none;
+}
+.rst-versions .rst-current-version {
+  padding: 12px;
+  background-color: #272525;
+  display: block;
+  text-align: right;
+  font-size: 90%;
+  cursor: pointer;
+  color: #27ae60;
+  *zoom: 1;
+}
+.rst-versions .rst-current-version:after,
+.rst-versions .rst-current-version:before {
+  display: table;
+  content: "";
+}
+.rst-versions .rst-current-version:after {
+  clear: both;
+}
+.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,
+.rst-content .rst-versions .rst-current-version .admonition-title,
+.rst-content code.download .rst-versions .rst-current-version span:first-child,
+.rst-content dl dt .rst-versions .rst-current-version .headerlink,
+.rst-content h1 .rst-versions .rst-current-version .headerlink,
+.rst-content h2 .rst-versions .rst-current-version .headerlink,
+.rst-content h3 .rst-versions .rst-current-version .headerlink,
+.rst-content h4 .rst-versions .rst-current-version .headerlink,
+.rst-content h5 .rst-versions .rst-current-version .headerlink,
+.rst-content h6 .rst-versions .rst-current-version .headerlink,
+.rst-content p.caption .rst-versions .rst-current-version .headerlink,
+.rst-content table > caption .rst-versions .rst-current-version .headerlink,
+.rst-content tt.download .rst-versions .rst-current-version span:first-child,
+.rst-versions .rst-current-version .fa,
+.rst-versions .rst-current-version .icon,
+.rst-versions .rst-current-version .rst-content .admonition-title,
+.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,
+.rst-versions .rst-current-version .rst-content code.download span:first-child,
+.rst-versions .rst-current-version .rst-content dl dt .headerlink,
+.rst-versions .rst-current-version .rst-content h1 .headerlink,
+.rst-versions .rst-current-version .rst-content h2 .headerlink,
+.rst-versions .rst-current-version .rst-content h3 .headerlink,
+.rst-versions .rst-current-version .rst-content h4 .headerlink,
+.rst-versions .rst-current-version .rst-content h5 .headerlink,
+.rst-versions .rst-current-version .rst-content h6 .headerlink,
+.rst-versions .rst-current-version .rst-content p.caption .headerlink,
+.rst-versions .rst-current-version .rst-content table > caption .headerlink,
+.rst-versions .rst-current-version .rst-content tt.download span:first-child,
+.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,
+.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand {
+  color: #fcfcfc;
+}
+.rst-versions .rst-current-version .fa-book,
+.rst-versions .rst-current-version .icon-book {
+  float: left;
+}
+.rst-versions .rst-current-version.rst-out-of-date {
+  background-color: #e74c3c;
+  color: #fff;
+}
+.rst-versions .rst-current-version.rst-active-old-version {
+  background-color: #f1c40f;
+  color: #000;
+}
+.rst-versions.shift-up {
+  height: auto;
+  max-height: 100%;
+  overflow-y: scroll;
+}
+.rst-versions.shift-up .rst-other-versions {
+  display: block;
+}
+.rst-versions .rst-other-versions {
+  font-size: 90%;
+  padding: 12px;
+  color: grey;
+  display: none;
+}
+.rst-versions .rst-other-versions hr {
+  display: block;
+  height: 1px;
+  border: 0;
+  margin: 20px 0;
+  padding: 0;
+  border-top: 1px solid #413d3d;
+}
+.rst-versions .rst-other-versions dd {
+  display: inline-block;
+  margin: 0;
+}
+.rst-versions .rst-other-versions dd a {
+  display: inline-block;
+  padding: 6px;
+  color: #fcfcfc;
+}
+.rst-versions.rst-badge {
+  width: auto;
+  bottom: 20px;
+  right: 20px;
+  left: auto;
+  border: none;
+  max-width: 300px;
+  max-height: 90%;
+}
+.rst-versions.rst-badge .fa-book,
+.rst-versions.rst-badge .icon-book {
+  float: none;
+  line-height: 30px;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version {
+  text-align: right;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,
+.rst-versions.rst-badge.shift-up .rst-current-version .icon-book {
+  float: left;
+}
+.rst-versions.rst-badge > .rst-current-version {
+  width: auto;
+  height: 30px;
+  line-height: 30px;
+  padding: 0 6px;
+  display: block;
+  text-align: center;
+}
+@media screen and (max-width: 768px) {
+  .rst-versions {
+    width: 85%;
+    display: none;
+  }
+  .rst-versions.shift {
+    display: block;
+  }
+}
+.rst-content img {
+  max-width: 100%;
+  height: auto;
+}
+.rst-content div.figure {
+  margin-bottom: 24px;
+}
+.rst-content div.figure p.caption {
+  font-style: italic;
+}
+.rst-content div.figure p:last-child.caption {
+  margin-bottom: 0;
+}
+.rst-content div.figure.align-center {
+  text-align: center;
+}
+.rst-content .section > a > img,
+.rst-content .section > img {
+  margin-bottom: 24px;
+}
+.rst-content abbr[title] {
+  text-decoration: none;
+}
+.rst-content.style-external-links a.reference.external:after {
+  font-family: FontAwesome;
+  content: "\f08e";
+  color: #b3b3b3;
+  vertical-align: super;
+  font-size: 60%;
+  margin: 0 0.2em;
+}
+.rst-content blockquote {
+  margin-left: 24px;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content pre.literal-block {
+  white-space: pre;
+  margin: 0;
+  padding: 12px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  display: block;
+  overflow: auto;
+}
+.rst-content div[class^="highlight"],
+.rst-content pre.literal-block {
+  border: 1px solid #e1e4e5;
+  overflow-x: auto;
+  margin: 1px 0 24px;
+}
+.rst-content div[class^="highlight"] div[class^="highlight"],
+.rst-content pre.literal-block div[class^="highlight"] {
+  padding: 0;
+  border: none;
+  margin: 0;
+}
+.rst-content div[class^="highlight"] td.code {
+  width: 100%;
+}
+.rst-content .linenodiv pre {
+  border-right: 1px solid #e6e9ea;
+  margin: 0;
+  padding: 12px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  user-select: none;
+  pointer-events: none;
+}
+.rst-content div[class^="highlight"] pre {
+  white-space: pre;
+  margin: 0;
+  padding: 12px;
+  display: block;
+  overflow: auto;
+}
+.rst-content div[class^="highlight"] pre .hll {
+  display: block;
+  margin: 0 -12px;
+  padding: 0 12px;
+}
+.rst-content .linenodiv pre,
+.rst-content div[class^="highlight"] pre,
+.rst-content pre.literal-block {
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  font-size: 12px;
+  line-height: 1.4;
+}
+.rst-content div.highlight .gp {
+  user-select: none;
+  pointer-events: none;
+}
+.rst-content .code-block-caption {
+  font-style: italic;
+  font-size: 100%;
+  line-height: 1;
+  padding: 1em 0;
+  text-align: center;
+}
+@media print {
+  .rst-content .codeblock,
+  .rst-content div[class^="highlight"],
+  .rst-content div[class^="highlight"] pre {
+    white-space: pre-wrap;
+  }
+}
+.rst-content .admonition,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning {
+  clear: both;
+}
+.rst-content .admonition-todo .last,
+.rst-content .admonition-todo > :last-child,
+.rst-content .admonition .last,
+.rst-content .admonition > :last-child,
+.rst-content .attention .last,
+.rst-content .attention > :last-child,
+.rst-content .caution .last,
+.rst-content .caution > :last-child,
+.rst-content .danger .last,
+.rst-content .danger > :last-child,
+.rst-content .error .last,
+.rst-content .error > :last-child,
+.rst-content .hint .last,
+.rst-content .hint > :last-child,
+.rst-content .important .last,
+.rst-content .important > :last-child,
+.rst-content .note .last,
+.rst-content .note > :last-child,
+.rst-content .seealso .last,
+.rst-content .seealso > :last-child,
+.rst-content .tip .last,
+.rst-content .tip > :last-child,
+.rst-content .warning .last,
+.rst-content .warning > :last-child {
+  margin-bottom: 0;
+}
+.rst-content .admonition-title:before {
+  margin-right: 4px;
+}
+.rst-content .admonition table {
+  border-color: rgba(0, 0, 0, 0.1);
+}
+.rst-content .admonition table td,
+.rst-content .admonition table th {
+  background: transparent !important;
+  border-color: rgba(0, 0, 0, 0.1) !important;
+}
+.rst-content .section ol.loweralpha,
+.rst-content .section ol.loweralpha > li {
+  list-style: lower-alpha;
+}
+.rst-content .section ol.upperalpha,
+.rst-content .section ol.upperalpha > li {
+  list-style: upper-alpha;
+}
+.rst-content .section ol li > *,
+.rst-content .section ul li > * {
+  margin-top: 12px;
+  margin-bottom: 12px;
+}
+.rst-content .section ol li > :first-child,
+.rst-content .section ul li > :first-child {
+  margin-top: 0;
+}
+.rst-content .section ol li > p,
+.rst-content .section ol li > p:last-child,
+.rst-content .section ul li > p,
+.rst-content .section ul li > p:last-child {
+  margin-bottom: 12px;
+}
+.rst-content .section ol li > p:only-child,
+.rst-content .section ol li > p:only-child:last-child,
+.rst-content .section ul li > p:only-child,
+.rst-content .section ul li > p:only-child:last-child {
+  margin-bottom: 0;
+}
+.rst-content .section ol li > ol,
+.rst-content .section ol li > ul,
+.rst-content .section ul li > ol,
+.rst-content .section ul li > ul {
+  margin-bottom: 12px;
+}
+.rst-content .section ol.simple li > *,
+.rst-content .section ol.simple li ol,
+.rst-content .section ol.simple li ul,
+.rst-content .section ul.simple li > *,
+.rst-content .section ul.simple li ol,
+.rst-content .section ul.simple li ul {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.rst-content .line-block {
+  margin-left: 0;
+  margin-bottom: 24px;
+  line-height: 24px;
+}
+.rst-content .line-block .line-block {
+  margin-left: 24px;
+  margin-bottom: 0;
+}
+.rst-content .topic-title {
+  font-weight: 700;
+  margin-bottom: 12px;
+}
+.rst-content .toc-backref {
+  color: #404040;
+}
+.rst-content .align-right {
+  float: right;
+  margin: 0 0 24px 24px;
+}
+.rst-content .align-left {
+  float: left;
+  margin: 0 24px 24px 0;
+}
+.rst-content .align-center {
+  margin: auto;
+}
+.rst-content .align-center:not(table) {
+  display: block;
+}
+.rst-content .code-block-caption .headerlink,
+.rst-content .toctree-wrapper > p.caption .headerlink,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink {
+  visibility: hidden;
+  font-size: 14px;
+}
+.rst-content .code-block-caption .headerlink:after,
+.rst-content .toctree-wrapper > p.caption .headerlink:after,
+.rst-content dl dt .headerlink:after,
+.rst-content h1 .headerlink:after,
+.rst-content h2 .headerlink:after,
+.rst-content h3 .headerlink:after,
+.rst-content h4 .headerlink:after,
+.rst-content h5 .headerlink:after,
+.rst-content h6 .headerlink:after,
+.rst-content p.caption .headerlink:after,
+.rst-content table > caption .headerlink:after {
+  content: "\f0c1";
+  font-family: FontAwesome;
+}
+.rst-content .code-block-caption:hover .headerlink:after,
+.rst-content .toctree-wrapper > p.caption:hover .headerlink:after,
+.rst-content dl dt:hover .headerlink:after,
+.rst-content h1:hover .headerlink:after,
+.rst-content h2:hover .headerlink:after,
+.rst-content h3:hover .headerlink:after,
+.rst-content h4:hover .headerlink:after,
+.rst-content h5:hover .headerlink:after,
+.rst-content h6:hover .headerlink:after,
+.rst-content p.caption:hover .headerlink:after,
+.rst-content table > caption:hover .headerlink:after {
+  visibility: visible;
+}
+.rst-content table > caption .headerlink:after {
+  font-size: 12px;
+}
+.rst-content .centered {
+  text-align: center;
+}
+.rst-content .sidebar {
+  float: right;
+  width: 40%;
+  display: block;
+  margin: 0 0 24px 24px;
+  padding: 24px;
+  background: #f3f6f6;
+  border: 1px solid #e1e4e5;
+}
+.rst-content .sidebar dl,
+.rst-content .sidebar p,
+.rst-content .sidebar ul {
+  font-size: 90%;
+}
+.rst-content .sidebar .last,
+.rst-content .sidebar > :last-child {
+  margin-bottom: 0;
+}
+.rst-content .sidebar .sidebar-title {
+  display: block;
+  font-family: Roboto Slab, ff-tisa-web-pro, Georgia, Arial, sans-serif;
+  font-weight: 700;
+  background: #e1e4e5;
+  padding: 6px 12px;
+  margin: -24px -24px 24px;
+  font-size: 100%;
+}
+.rst-content .highlighted {
+  background: #f1c40f;
+  box-shadow: 0 0 0 2px #f1c40f;
+  display: inline;
+  font-weight: 700;
+}
+.rst-content .citation-reference,
+.rst-content .footnote-reference {
+  vertical-align: baseline;
+  position: relative;
+  top: -0.4em;
+  line-height: 0;
+  font-size: 90%;
+}
+.rst-content .hlist {
+  width: 100%;
+}
+html.writer-html4 .rst-content table.docutils.citation,
+html.writer-html4 .rst-content table.docutils.footnote {
+  background: none;
+  border: none;
+}
+html.writer-html4 .rst-content table.docutils.citation td,
+html.writer-html4 .rst-content table.docutils.citation tr,
+html.writer-html4 .rst-content table.docutils.footnote td,
+html.writer-html4 .rst-content table.docutils.footnote tr {
+  border: none;
+  background-color: transparent !important;
+  white-space: normal;
+}
+html.writer-html4 .rst-content table.docutils.citation td.label,
+html.writer-html4 .rst-content table.docutils.footnote td.label {
+  padding-left: 0;
+  padding-right: 0;
+  vertical-align: top;
+}
+html.writer-html5 .rst-content dl dt span.classifier:before {
+  content: " : ";
+}
+html.writer-html5 .rst-content dl.field-list,
+html.writer-html5 .rst-content dl.footnote {
+  display: grid;
+  grid-template-columns: max-content auto;
+}
+html.writer-html5 .rst-content dl.field-list > dt,
+html.writer-html5 .rst-content dl.footnote > dt {
+  padding-left: 1rem;
+}
+html.writer-html5 .rst-content dl.field-list > dt:after,
+html.writer-html5 .rst-content dl.footnote > dt:after {
+  content: ":";
+}
+html.writer-html5 .rst-content dl.field-list > dd,
+html.writer-html5 .rst-content dl.field-list > dt,
+html.writer-html5 .rst-content dl.footnote > dd,
+html.writer-html5 .rst-content dl.footnote > dt {
+  margin-bottom: 0;
+}
+html.writer-html5 .rst-content dl.footnote {
+  font-size: 0.9rem;
+}
+html.writer-html5 .rst-content dl.footnote > dt {
+  margin: 0 0.5rem 0.5rem 0;
+  line-height: 1.2rem;
+  word-break: break-all;
+  font-weight: 400;
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets {
+  margin-right: 0.5rem;
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets:before {
+  content: "[";
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets:after {
+  content: "]";
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.fn-backref {
+  font-style: italic;
+}
+html.writer-html5 .rst-content dl.footnote > dd {
+  margin: 0 0 0.5rem;
+  line-height: 1.2rem;
+}
+html.writer-html5 .rst-content dl.footnote > dd p,
+html.writer-html5 .rst-content dl.option-list kbd {
+  font-size: 0.9rem;
+}
+.rst-content table.docutils.footnote,
+html.writer-html4 .rst-content table.docutils.citation,
+html.writer-html5 .rst-content dl.footnote {
+  color: grey;
+}
+.rst-content table.docutils.footnote code,
+.rst-content table.docutils.footnote tt,
+html.writer-html4 .rst-content table.docutils.citation code,
+html.writer-html4 .rst-content table.docutils.citation tt,
+html.writer-html5 .rst-content dl.footnote code,
+html.writer-html5 .rst-content dl.footnote tt {
+  color: #555;
+}
+.rst-content .wy-table-responsive.citation,
+.rst-content .wy-table-responsive.footnote {
+  margin-bottom: 0;
+}
+.rst-content .wy-table-responsive.citation + :not(.citation),
+.rst-content .wy-table-responsive.footnote + :not(.footnote) {
+  margin-top: 24px;
+}
+.rst-content .wy-table-responsive.citation:last-child,
+.rst-content .wy-table-responsive.footnote:last-child {
+  margin-bottom: 24px;
+}
+.rst-content table.docutils th {
+  border-color: #e1e4e5;
+}
+html.writer-html5 .rst-content table.docutils th {
+  border: 1px solid #e1e4e5;
+}
+html.writer-html5 .rst-content table.docutils td > p,
+html.writer-html5 .rst-content table.docutils th > p {
+  line-height: 1rem;
+  margin-bottom: 0;
+  font-size: 0.9rem;
+}
+.rst-content table.docutils td .last,
+.rst-content table.docutils td .last > :last-child {
+  margin-bottom: 0;
+}
+.rst-content table.field-list,
+.rst-content table.field-list td {
+  border: none;
+}
+.rst-content table.field-list td p {
+  font-size: inherit;
+  line-height: inherit;
+}
+.rst-content table.field-list td > strong {
+  display: inline-block;
+}
+.rst-content table.field-list .field-name {
+  padding-right: 10px;
+  text-align: left;
+  white-space: nowrap;
+}
+.rst-content table.field-list .field-body {
+  text-align: left;
+}
+.rst-content code,
+.rst-content tt {
+  color: #000;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  padding: 2px 5px;
+}
+.rst-content code big,
+.rst-content code em,
+.rst-content tt big,
+.rst-content tt em {
+  font-size: 100% !important;
+  line-height: normal;
+}
+.rst-content code.literal,
+.rst-content tt.literal {
+  color: #E60000;
+}
+.rst-content code.xref,
+.rst-content tt.xref,
+a .rst-content code,
+a .rst-content tt {
+  font-weight: 700;
+  color: #404040;
+}
+.rst-content kbd,
+.rst-content pre,
+.rst-content samp {
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+}
+.rst-content a code,
+.rst-content a tt {
+  color: #558040;
+}
+.rst-content dl {
+  margin-bottom: 24px;
+}
+.rst-content dl dt {
+  font-weight: 700;
+  margin-bottom: 12px;
+}
+.rst-content dl ol,
+.rst-content dl p,
+.rst-content dl table,
+.rst-content dl ul {
+  margin-bottom: 12px;
+}
+.rst-content dl dd {
+  margin: 0 0 12px 24px;
+  line-height: 24px;
+}
+html.writer-html4 .rst-content dl:not(.docutils),
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) {
+  margin-bottom: 24px;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt {
+  display: table;
+  margin: 6px 0;
+  font-size: 90%;
+  line-height: normal;
+  background: ##F2F2F2;
+  color: #666666;
+  border-top: 3px solid #6ab0de;
+  padding: 6px;
+  position: relative;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt:before,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt:before {
+  color: #6ab0de;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt .headerlink,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt
+  .headerlink {
+  color: #404040;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  dl:not(.field-list)
+  > dt {
+  margin-bottom: 6px;
+  border: none;
+  border-left: 3px solid #ccc;
+  background: #f0f0f0;
+  color: #555;
+}
+html.writer-html4
+  .rst-content
+  dl:not(.docutils)
+  dl:not(.field-list)
+  > dt
+  .headerlink,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  dl:not(.field-list)
+  > dt
+  .headerlink {
+  color: #404040;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt:first-child,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt:first-child {
+  margin-top: 0;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code,
+html.writer-html4 .rst-content dl:not(.docutils) tt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt {
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,
+html.writer-html4 .rst-content dl:not(.docutils) code.descname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descclassname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descclassname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descname {
+  background-color: transparent;
+  border: none;
+  padding: 0;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code.descname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descname {
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) .optional,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  .optional {
+  display: inline-block;
+  padding: 0 4px;
+  color: #000;
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) .property,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  .property {
+  display: inline-block;
+  padding-right: 8px;
+}
+.rst-content .viewcode-back,
+.rst-content .viewcode-link {
+  display: inline-block;
+  color: #27ae60;
+  font-size: 80%;
+  padding-left: 24px;
+}
+.rst-content .viewcode-back {
+  display: block;
+  float: right;
+}
+.rst-content p.rubric {
+  margin-bottom: 12px;
+  font-weight: 700;
+}
+.rst-content code.download,
+.rst-content tt.download {
+  background: inherit;
+  padding: inherit;
+  font-weight: 400;
+  font-family: inherit;
+  font-size: inherit;
+  color: inherit;
+  border: inherit;
+  white-space: inherit;
+}
+.rst-content code.download span:first-child,
+.rst-content tt.download span:first-child {
+  -webkit-font-smoothing: subpixel-antialiased;
+}
+.rst-content code.download span:first-child:before,
+.rst-content tt.download span:first-child:before {
+  margin-right: 4px;
+}
+.rst-content .guilabel {
+  border: 1px solid #7fbbe3;
+  background: #e7f2fa;
+  font-size: 80%;
+  font-weight: 700;
+  border-radius: 4px;
+  padding: 2.4px 6px;
+  margin: auto 2px;
+}
+.rst-content .versionmodified {
+  font-style: italic;
+}
+@media screen and (max-width: 480px) {
+  .rst-content .sidebar {
+    width: 100%;
+  }
+}
+span[id*="MathJax-Span"] {
+  color: #666666;
+}
+.math {
+  text-align: center;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942)
+      format("woff2"),
+    url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");
+  font-weight: 400;
+  font-style: normal;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2)
+      format("woff2"),
+    url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");
+  font-weight: 700;
+  font-style: normal;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d)
+      format("woff2"),
+    url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c)
+      format("woff");
+  font-weight: 700;
+  font-style: italic;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d)
+      format("woff2"),
+    url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892)
+      format("woff");
+  font-weight: 400;
+  font-style: italic;
+  font-display: block;
+}
+@font-face {
+  font-family: Roboto Slab;
+  font-style: normal;
+  font-weight: 400;
+  src: url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958)
+      format("woff2"),
+    url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c)
+      format("woff");
+  font-display: block;
+}
+@font-face {
+  font-family: Roboto Slab;
+  font-style: normal;
+  font-weight: 700;
+  src: url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe)
+      format("woff2"),
+    url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a)
+      format("woff");
+  font-display: block;
+}
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/doctools.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/doctools.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1bfd708b7f424846261e634ec53b0be89a4f604
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/doctools.js
@@ -0,0 +1,358 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+if (!window.console || !console.firebug) {
+  var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
+    "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
+    "profile", "profileEnd"];
+  window.console = {};
+  for (var i = 0; i < names.length; ++i)
+    window.console[names[i]] = function() {};
+}
+ */
+
+/**
+ * small helper function to urldecode strings
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
+ */
+jQuery.urldecode = function(x) {
+  if (!x) {
+    return x
+  }
+  return decodeURIComponent(x.replace(/\+/g, ' '));
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+  if (typeof s === 'undefined')
+    s = document.location.search;
+  var parts = s.substr(s.indexOf('?') + 1).split('&');
+  var result = {};
+  for (var i = 0; i < parts.length; i++) {
+    var tmp = parts[i].split('=', 2);
+    var key = jQuery.urldecode(tmp[0]);
+    var value = jQuery.urldecode(tmp[1]);
+    if (key in result)
+      result[key].push(value);
+    else
+      result[key] = [value];
+  }
+  return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+  function highlight(node, addItems) {
+    if (node.nodeType === 3) {
+      var val = node.nodeValue;
+      var pos = val.toLowerCase().indexOf(text);
+      if (pos >= 0 &&
+          !jQuery(node.parentNode).hasClass(className) &&
+          !jQuery(node.parentNode).hasClass("nohighlight")) {
+        var span;
+        var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
+        if (isInSVG) {
+          span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+        } else {
+          span = document.createElement("span");
+          span.className = className;
+        }
+        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling));
+        node.nodeValue = val.substr(0, pos);
+        if (isInSVG) {
+          var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+          var bbox = node.parentElement.getBBox();
+          rect.x.baseVal.value = bbox.x;
+          rect.y.baseVal.value = bbox.y;
+          rect.width.baseVal.value = bbox.width;
+          rect.height.baseVal.value = bbox.height;
+          rect.setAttribute('class', className);
+          addItems.push({
+              "parent": node.parentNode,
+              "target": rect});
+        }
+      }
+    }
+    else if (!jQuery(node).is("button, select, textarea")) {
+      jQuery.each(node.childNodes, function() {
+        highlight(this, addItems);
+      });
+    }
+  }
+  var addItems = [];
+  var result = this.each(function() {
+    highlight(this, addItems);
+  });
+  for (var i = 0; i < addItems.length; ++i) {
+    jQuery(addItems[i].parent).before(addItems[i].target);
+  }
+  return result;
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+  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"
+    };
+  };
+  jQuery.browser = {};
+  jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+  init : function() {
+    this.fixFirefoxAnchorBug();
+    this.highlightSearchWords();
+    this.initIndexTable();
+    this.initOnKeyListeners();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS : {},
+  PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
+  LOCALE : 'unknown',
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext : function(string) {
+    var translated = Documentation.TRANSLATIONS[string];
+    if (typeof translated === 'undefined')
+      return string;
+    return (typeof translated === 'string') ? translated : translated[0];
+  },
+
+  ngettext : function(singular, plural, n) {
+    var translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated === 'undefined')
+      return (n == 1) ? singular : plural;
+    return translated[Documentation.PLURALEXPR(n)];
+  },
+
+  addTranslations : function(catalog) {
+    for (var key in catalog.messages)
+      this.TRANSLATIONS[key] = catalog.messages[key];
+    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+    this.LOCALE = catalog.locale;
+  },
+
+  /**
+   * add context elements like header anchor links
+   */
+  addContextElements : function() {
+    $('div[id] > :header:first').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this headline')).
+      appendTo(this);
+    });
+    $('dt[id]').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this definition')).
+      appendTo(this);
+    });
+  },
+
+  /**
+   * workaround a firefox stupidity
+   * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
+   */
+  fixFirefoxAnchorBug : function() {
+    if (document.location.hash && $.browser.mozilla)
+      window.setTimeout(function() {
+        document.location.href += '';
+      }, 10);
+  },
+
+  /**
+   * highlight the search words provided in the url in the text
+   */
+  highlightSearchWords : function() {
+    var params = $.getQueryParameters();
+    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+    if (terms.length) {
+      var body = $('div.body');
+      if (!body.length) {
+        body = $('body');
+      }
+      window.setTimeout(function() {
+        $.each(terms, function() {
+          body.highlightText(this.toLowerCase(), 'highlighted');
+        });
+      }, 10);
+      $('<p class="highlight-link"><a href="javascript:Documentation.' +
+        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
+          .appendTo($('#searchbox'));
+    }
+  },
+
+  /**
+   * init the domain index toggle buttons
+   */
+  initIndexTable : function() {
+    var togglers = $('img.toggler').click(function() {
+      var src = $(this).attr('src');
+      var idnum = $(this).attr('id').substr(7);
+      $('tr.cg-' + idnum).toggle();
+      if (src.substr(-9) === 'minus.png')
+        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
+      else
+        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
+    }).css('display', '');
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
+        togglers.click();
+    }
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords : function() {
+    $('#searchbox .highlight-link').fadeOut(300);
+    $('span.highlighted').removeClass('highlighted');
+    var url = new URL(window.location);
+    url.searchParams.delete('highlight');
+    window.history.replaceState({}, '', url);
+  },
+
+   /**
+   * helper function to focus on search bar
+   */
+  focusSearchBar : function() {
+    $('input[name=q]').first().focus();
+  },
+
+  /**
+   * make the url absolute
+   */
+  makeURL : function(relativeURL) {
+    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
+  },
+
+  /**
+   * get the current relative url
+   */
+  getCurrentURL : function() {
+    var path = document.location.pathname;
+    var parts = path.split(/\//);
+    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
+      if (this === '..')
+        parts.pop();
+    });
+    var url = parts.join('/');
+    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+  },
+
+  initOnKeyListeners: function() {
+    // only install a listener if it is really needed
+    if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
+        !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+        return;
+
+    $(document).keydown(function(event) {
+      var activeElementType = document.activeElement.tagName;
+      // don't navigate when in search box, textarea, dropdown or button
+      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
+          && activeElementType !== 'BUTTON') {
+        if (event.altKey || event.ctrlKey || event.metaKey)
+          return;
+
+          if (!event.shiftKey) {
+            switch (event.key) {
+              case 'ArrowLeft':
+                if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
+                  break;
+                var prevHref = $('link[rel="prev"]').prop('href');
+                if (prevHref) {
+                  window.location.href = prevHref;
+                  return false;
+                }
+                break;
+              case 'ArrowRight':
+                if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
+                  break;
+                var nextHref = $('link[rel="next"]').prop('href');
+                if (nextHref) {
+                  window.location.href = nextHref;
+                  return false;
+                }
+                break;
+              case 'Escape':
+                if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+                  break;
+                Documentation.hideSearchWords();
+                return false;
+          }
+        }
+
+        // some keyboard layouts may need Shift to get /
+        switch (event.key) {
+          case '/':
+            if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+              break;
+            Documentation.focusSearchBar();
+            return false;
+        }
+      }
+    });
+  }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+  Documentation.init();
+});
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/documentation_options.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/documentation_options.js
new file mode 100644
index 0000000000000000000000000000000000000000..5144ac036eeebced3499a349b3a5485b000c4b0d
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/documentation_options.js
@@ -0,0 +1,14 @@
+var DOCUMENTATION_OPTIONS = {
+    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
+    VERSION: '2023-1',
+    LANGUAGE: 'None',
+    COLLAPSE_INDEX: false,
+    BUILDER: 'html',
+    FILE_SUFFIX: '.html',
+    LINK_SUFFIX: '.html',
+    HAS_SOURCE: false,
+    SOURCELINK_SUFFIX: '.txt',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/file.png b/VimbaX/doc/VimbaX_ReleaseNotes/_static/file.png
new file mode 100644
index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/file.png differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/jquery-3.5.1.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/jquery-3.5.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..50937333b99a5e168ac9e8292b22edd7e96c3e6a
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/jquery-3.5.1.js
@@ -0,0 +1,10872 @@
+/*!
+ * jQuery JavaScript Library v3.5.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2020-05-04T22:49Z
+ */
+( function( global, factory ) {
+
+	"use strict";
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var flat = arr.flat ? function( array ) {
+	return arr.flat.call( array );
+} : function( array ) {
+	return arr.concat.apply( [], array );
+};
+
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+      // Support: Chrome <=57, Firefox <=52
+      // In some browsers, typeof returns "function" for HTML <object> elements
+      // (i.e., `typeof document.createElement( "object" ) === "function"`).
+      // We don't want to classify *any* DOM node as a function.
+      return typeof obj === "function" && typeof obj.nodeType !== "number";
+  };
+
+
+var isWindow = function isWindow( obj ) {
+		return obj != null && obj === obj.window;
+	};
+
+
+var document = window.document;
+
+
+
+	var preservedScriptAttributes = {
+		type: true,
+		src: true,
+		nonce: true,
+		noModule: true
+	};
+
+	function DOMEval( code, node, doc ) {
+		doc = doc || document;
+
+		var i, val,
+			script = doc.createElement( "script" );
+
+		script.text = code;
+		if ( node ) {
+			for ( i in preservedScriptAttributes ) {
+
+				// Support: Firefox 64+, Edge 18+
+				// Some browsers don't support the "nonce" property on scripts.
+				// On the other hand, just using `getAttribute` is not enough as
+				// the `nonce` attribute is reset to an empty string whenever it
+				// becomes browsing-context connected.
+				// See https://github.com/whatwg/html/issues/2369
+				// See https://html.spec.whatwg.org/#nonce-attributes
+				// The `node.getAttribute` check was added for the sake of
+				// `jQuery.globalEval` so that it can fake a nonce-containing node
+				// via an object.
+				val = node[ i ] || node.getAttribute && node.getAttribute( i );
+				if ( val ) {
+					script.setAttribute( i, val );
+				}
+			}
+		}
+		doc.head.appendChild( script ).parentNode.removeChild( script );
+	}
+
+
+function toType( obj ) {
+	if ( obj == null ) {
+		return obj + "";
+	}
+
+	// Support: Android <=2.3 only (functionish RegExp)
+	return typeof obj === "object" || typeof obj === "function" ?
+		class2type[ toString.call( obj ) ] || "object" :
+		typeof obj;
+}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+	version = "3.5.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+
+		// Return all the elements in a clean array
+		if ( num == null ) {
+			return slice.call( this );
+		}
+
+		// Return just the one element from the set
+		return num < 0 ? this[ num + this.length ] : this[ num ];
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	even: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return ( i + 1 ) % 2;
+		} ) );
+	},
+
+	odd: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return i % 2;
+		} ) );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				copy = options[ name ];
+
+				// Prevent Object.prototype pollution
+				// Prevent never-ending loop
+				if ( name === "__proto__" || target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = Array.isArray( copy ) ) ) ) {
+					src = target[ name ];
+
+					// Ensure proper type for the source value
+					if ( copyIsArray && !Array.isArray( src ) ) {
+						clone = [];
+					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
+						clone = {};
+					} else {
+						clone = src;
+					}
+					copyIsArray = false;
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isPlainObject: function( obj ) {
+		var proto, Ctor;
+
+		// Detect obvious negatives
+		// Use toString instead of jQuery.type to catch host objects
+		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+			return false;
+		}
+
+		proto = getProto( obj );
+
+		// Objects with no prototype (e.g., `Object.create( null )`) are plain
+		if ( !proto ) {
+			return true;
+		}
+
+		// Objects with prototype are plain iff they were constructed by a global Object function
+		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	// Evaluates a script in a provided context; falls back to the global one
+	// if not specified.
+	globalEval: function( code, options, doc ) {
+		DOMEval( code, { nonce: options && options.nonce }, doc );
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	// Support: Android <=4.0 only, PhantomJS 1 only
+	// push.apply(_, arraylike) throws on ancient WebKit
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return flat( ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( _i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: real iOS 8.2 only (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = toType( obj );
+
+	if ( isFunction( obj ) || isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.5
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://js.foundation/
+ *
+ * Date: 2020-03-14
+ */
+( function( window ) {
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	nonnativeSelectorCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// Instance methods
+	hasOwn = ( {} ).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	pushNative = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+
+	// Use a stripped-down indexOf as it's faster than native
+	// https://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[ i ] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
+		"ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
+	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
+		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+
+		// "Attribute values must be CSS identifiers [capture 5]
+		// or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
+		whitespace + "*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
+		whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
+		"*" ),
+	rdescend = new RegExp( whitespace + "|>" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
+			whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
+			whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace +
+			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rhtml = /HTML$/i,
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+
+	// CSS escapes
+	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
+	funescape = function( escape, nonHex ) {
+		var high = "0x" + escape.slice( 1 ) - 0x10000;
+
+		return nonHex ?
+
+			// Strip the backslash prefix from a non-hex escape sequence
+			nonHex :
+
+			// Replace a hexadecimal escape sequence with the encoded Unicode code point
+			// Support: IE <=11+
+			// For values outside the Basic Multilingual Plane (BMP), manually construct a
+			// surrogate pair
+			high < 0 ?
+				String.fromCharCode( high + 0x10000 ) :
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// CSS string/identifier serialization
+	// https://drafts.csswg.org/cssom/#common-serializing-idioms
+	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+	fcssescape = function( ch, asCodePoint ) {
+		if ( asCodePoint ) {
+
+			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+			if ( ch === "\0" ) {
+				return "\uFFFD";
+			}
+
+			// Control characters and (dependent upon position) numbers get escaped as code points
+			return ch.slice( 0, -1 ) + "\\" +
+				ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+		}
+
+		// Other potentially-special ASCII characters get backslash-escaped
+		return "\\" + ch;
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	},
+
+	inDisabledFieldset = addCombinator(
+		function( elem ) {
+			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
+		},
+		{ dir: "parentNode", next: "legend" }
+	);
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		( arr = slice.call( preferredDoc.childNodes ) ),
+		preferredDoc.childNodes
+	);
+
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	// eslint-disable-next-line no-unused-expressions
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			pushNative.apply( target, slice.call( els ) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+
+			// Can't trust NodeList.length
+			while ( ( target[ j++ ] = els[ i++ ] ) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+		setDocument( context );
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
+
+				// ID selector
+				if ( ( m = match[ 1 ] ) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( ( elem = context.getElementById( m ) ) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[ 2 ] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!nonnativeSelectorCache[ selector + " " ] &&
+				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
+
+				// Support: IE 8 only
+				// Exclude object elements
+				( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
+
+				newSelector = selector;
+				newContext = context;
+
+				// qSA considers elements outside a scoping root when evaluating child or
+				// descendant combinators, which is not what we want.
+				// In such cases, we work around the behavior by prefixing every selector in the
+				// list with an ID selector referencing the scope context.
+				// The technique has to be used as well when a leading combinator is used
+				// as such selectors are not recognized by querySelectorAll.
+				// Thanks to Andrew Dupont for this technique.
+				if ( nodeType === 1 &&
+					( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+
+					// We can use :scope instead of the ID hack if the browser
+					// supports it & if we're not changing the context.
+					if ( newContext !== context || !support.scope ) {
+
+						// Capture the context ID, setting it first if necessary
+						if ( ( nid = context.getAttribute( "id" ) ) ) {
+							nid = nid.replace( rcssescape, fcssescape );
+						} else {
+							context.setAttribute( "id", ( nid = expando ) );
+						}
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					while ( i-- ) {
+						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
+							toSelector( groups[ i ] );
+					}
+					newSelector = groups.join( "," );
+				}
+
+				try {
+					push.apply( results,
+						newContext.querySelectorAll( newSelector )
+					);
+					return results;
+				} catch ( qsaError ) {
+					nonnativeSelectorCache( selector, true );
+				} finally {
+					if ( nid === expando ) {
+						context.removeAttribute( "id" );
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return ( cache[ key + " " ] = value );
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+	var el = document.createElement( "fieldset" );
+
+	try {
+		return !!fn( el );
+	} catch ( e ) {
+		return false;
+	} finally {
+
+		// Remove from its parent by default
+		if ( el.parentNode ) {
+			el.parentNode.removeChild( el );
+		}
+
+		// release memory in IE
+		el = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split( "|" ),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[ i ] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			a.sourceIndex - b.sourceIndex;
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( ( cur = cur.nextSibling ) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return ( name === "input" || name === "button" ) && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+	return function( elem ) {
+
+		// Only certain elements can match :enabled or :disabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+		if ( "form" in elem ) {
+
+			// Check for inherited disabledness on relevant non-disabled elements:
+			// * listed form-associated elements in a disabled fieldset
+			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+			// * option elements in a disabled optgroup
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+			// All such elements have a "form" property.
+			if ( elem.parentNode && elem.disabled === false ) {
+
+				// Option elements defer to a parent optgroup if present
+				if ( "label" in elem ) {
+					if ( "label" in elem.parentNode ) {
+						return elem.parentNode.disabled === disabled;
+					} else {
+						return elem.disabled === disabled;
+					}
+				}
+
+				// Support: IE 6 - 11
+				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
+				return elem.isDisabled === disabled ||
+
+					// Where there is no isDisabled, check manually
+					/* jshint -W018 */
+					elem.isDisabled !== !disabled &&
+					inDisabledFieldset( elem ) === disabled;
+			}
+
+			return elem.disabled === disabled;
+
+		// Try to winnow out elements that can't be disabled before trusting the disabled property.
+		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+		// even exist on them, let alone have a boolean value.
+		} else if ( "label" in elem ) {
+			return elem.disabled === disabled;
+		}
+
+		// Remaining elements are neither :enabled nor :disabled
+		return false;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction( function( argument ) {
+		argument = +argument;
+		return markFunction( function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
+					seed[ j ] = !( matches[ j ] = seed[ j ] );
+				}
+			}
+		} );
+	} );
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	var namespace = elem.namespaceURI,
+		docElem = ( elem.ownerDocument || elem ).documentElement;
+
+	// Support: IE <=8
+	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
+	// https://bugs.jquery.com/ticket/4833
+	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, subWindow,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9 - 11+, Edge 12 - 18+
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( preferredDoc != document &&
+		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
+
+		// Support: IE 11, Edge
+		if ( subWindow.addEventListener ) {
+			subWindow.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( subWindow.attachEvent ) {
+			subWindow.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
+	// Safari 4 - 5 only, Opera <=11.6 - 12.x only
+	// IE/Edge & older browsers don't support the :scope pseudo-class.
+	// Support: Safari 6.0 only
+	// Safari 6.0 supports :scope but it's an alias of :root there.
+	support.scope = assert( function( el ) {
+		docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
+		return typeof el.querySelectorAll !== "undefined" &&
+			!el.querySelectorAll( ":scope fieldset div" ).length;
+	} );
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert( function( el ) {
+		el.className = "i";
+		return !el.getAttribute( "className" );
+	} );
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert( function( el ) {
+		el.appendChild( document.createComment( "" ) );
+		return !el.getElementsByTagName( "*" ).length;
+	} );
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programmatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert( function( el ) {
+		docElem.appendChild( el ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	} );
+
+	// ID filter and find
+	if ( support.getById ) {
+		Expr.filter[ "ID" ] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute( "id" ) === attrId;
+			};
+		};
+		Expr.find[ "ID" ] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var elem = context.getElementById( id );
+				return elem ? [ elem ] : [];
+			}
+		};
+	} else {
+		Expr.filter[ "ID" ] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode( "id" );
+				return node && node.value === attrId;
+			};
+		};
+
+		// Support: IE 6 - 7 only
+		// getElementById is not reliable as a find shortcut
+		Expr.find[ "ID" ] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var node, i, elems,
+					elem = context.getElementById( id );
+
+				if ( elem ) {
+
+					// Verify the id attribute
+					node = elem.getAttributeNode( "id" );
+					if ( node && node.value === id ) {
+						return [ elem ];
+					}
+
+					// Fall back on getElementsByName
+					elems = context.getElementsByName( id );
+					i = 0;
+					while ( ( elem = elems[ i++ ] ) ) {
+						node = elem.getAttributeNode( "id" );
+						if ( node && node.value === id ) {
+							return [ elem ];
+						}
+					}
+				}
+
+				return [];
+			}
+		};
+	}
+
+	// Tag
+	Expr.find[ "TAG" ] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( ( elem = results[ i++ ] ) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See https://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
+
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert( function( el ) {
+
+			var input;
+
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// https://bugs.jquery.com/ticket/12359
+			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !el.querySelectorAll( "[selected]" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push( "~=" );
+			}
+
+			// Support: IE 11+, Edge 15 - 18+
+			// IE 11/Edge don't find elements on a `[name='']` query in some cases.
+			// Adding a temporary attribute to the document before the selection works
+			// around the issue.
+			// Interestingly, IE 10 & older don't seem to have the issue.
+			input = document.createElement( "input" );
+			input.setAttribute( "name", "" );
+			el.appendChild( input );
+			if ( !el.querySelectorAll( "[name='']" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
+					whitespace + "*(?:''|\"\")" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !el.querySelectorAll( ":checked" ).length ) {
+				rbuggyQSA.push( ":checked" );
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibling-combinator selector` fails
+			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push( ".#.+[+~]" );
+			}
+
+			// Support: Firefox <=3.6 - 5 only
+			// Old Firefox doesn't throw on a badly-escaped identifier.
+			el.querySelectorAll( "\\\f" );
+			rbuggyQSA.push( "[\\r\\n\\f]" );
+		} );
+
+		assert( function( el ) {
+			el.innerHTML = "<a href='' disabled='disabled'></a>" +
+				"<select disabled='disabled'><option/></select>";
+
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement( "input" );
+			input.setAttribute( "type", "hidden" );
+			el.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( el.querySelectorAll( "[name=d]" ).length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: IE9-11+
+			// IE's :disabled selector does not pick up the children of disabled fieldsets
+			docElem.appendChild( el ).disabled = true;
+			if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: Opera 10 - 11 only
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			el.querySelectorAll( "*,:x" );
+			rbuggyQSA.push( ",.*:" );
+		} );
+	}
+
+	if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector ) ) ) ) {
+
+		assert( function( el ) {
+
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( el, "*" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( el, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		} );
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			) );
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( ( b = b.parentNode ) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		// Support: IE 11+, Edge 17 - 18+
+		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+		// two documents; shallow comparisons work.
+		// eslint-disable-next-line eqeqeq
+		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
+
+			// Choose the first element that is related to our preferred document
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( a == document || a.ownerDocument == preferredDoc &&
+				contains( preferredDoc, a ) ) {
+				return -1;
+			}
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( b == document || b.ownerDocument == preferredDoc &&
+				contains( preferredDoc, b ) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			return a == document ? -1 :
+				b == document ? 1 :
+				/* eslint-enable eqeqeq */
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( ( cur = cur.parentNode ) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( ( cur = cur.parentNode ) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[ i ] === bp[ i ] ) {
+			i++;
+		}
+
+		return i ?
+
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[ i ], bp[ i ] ) :
+
+			// Otherwise nodes in our document sort first
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			ap[ i ] == preferredDoc ? -1 :
+			bp[ i ] == preferredDoc ? 1 :
+			/* eslint-enable eqeqeq */
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	setDocument( elem );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!nonnativeSelectorCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+
+				// As well, disconnected nodes are said to be in a document
+				// fragment in IE 9
+				elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch ( e ) {
+			nonnativeSelectorCache( expr, true );
+		}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+
+	// Set document vars if needed
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( context.ownerDocument || context ) != document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+
+	// Set document vars if needed
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( elem.ownerDocument || elem ) != document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			( val = elem.getAttributeNode( name ) ) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.escape = function( sel ) {
+	return ( sel + "" ).replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( ( elem = results[ i++ ] ) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+
+		// If no nodeType, this is expected to be an array
+		while ( ( node = elem[ i++ ] ) ) {
+
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
+				match[ 5 ] || "" ).replace( runescape, funescape );
+
+			if ( match[ 2 ] === "~=" ) {
+				match[ 3 ] = " " + match[ 3 ] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[ 1 ] = match[ 1 ].toLowerCase();
+
+			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
+
+				// nth-* requires argument
+				if ( !match[ 3 ] ) {
+					Sizzle.error( match[ 0 ] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[ 4 ] = +( match[ 4 ] ?
+					match[ 5 ] + ( match[ 6 ] || 1 ) :
+					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
+				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
+
+				// other types prohibit arguments
+			} else if ( match[ 3 ] ) {
+				Sizzle.error( match[ 0 ] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[ 6 ] && match[ 2 ];
+
+			if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[ 3 ] ) {
+				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+
+				// Get excess from tokenize (recursively)
+				( excess = tokenize( unquoted, true ) ) &&
+
+				// advance to the next closing parenthesis
+				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
+
+				// excess is a negative index
+				match[ 0 ] = match[ 0 ].slice( 0, excess );
+				match[ 2 ] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() {
+					return true;
+				} :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				( pattern = new RegExp( "(^|" + whitespace +
+					")" + className + "(" + whitespace + "|$)" ) ) && classCache(
+						className, function( elem ) {
+							return pattern.test(
+								typeof elem.className === "string" && elem.className ||
+								typeof elem.getAttribute !== "undefined" &&
+									elem.getAttribute( "class" ) ||
+								""
+							);
+				} );
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				/* eslint-disable max-len */
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+				/* eslint-enable max-len */
+
+			};
+		},
+
+		"CHILD": function( type, what, _argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, _context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( ( node = node[ dir ] ) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								( outerCache[ node.uniqueID ] = {} );
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( ( node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+
+							// Use previously-cached element index if available
+							if ( useCache ) {
+
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									( outerCache[ node.uniqueID ] = {} );
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+
+								// Use the same loop as above to seek `elem` from the start
+								while ( ( node = ++nodeIndex && node && node[ dir ] ||
+									( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] ||
+												( node[ expando ] = {} );
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												( outerCache[ node.uniqueID ] = {} );
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction( function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[ i ] );
+							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
+						}
+					} ) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+
+		// Potentially complex pseudos
+		"not": markFunction( function( selector ) {
+
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction( function( seed, matches, _context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( ( elem = unmatched[ i ] ) ) {
+							seed[ i ] = !( matches[ i ] = elem );
+						}
+					}
+				} ) :
+				function( elem, _context, xml ) {
+					input[ 0 ] = elem;
+					matcher( input, null, xml, results );
+
+					// Don't keep the element (issue #299)
+					input[ 0 ] = null;
+					return !results.pop();
+				};
+		} ),
+
+		"has": markFunction( function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		} ),
+
+		"contains": markFunction( function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
+			};
+		} ),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+
+			// lang value must be a valid identifier
+			if ( !ridentifier.test( lang || "" ) ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( ( elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
+				return false;
+			};
+		} ),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement &&
+				( !document.hasFocus || document.hasFocus() ) &&
+				!!( elem.type || elem.href || ~elem.tabIndex );
+		},
+
+		// Boolean properties
+		"enabled": createDisabledPseudo( false ),
+		"disabled": createDisabledPseudo( true ),
+
+		"checked": function( elem ) {
+
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return ( nodeName === "input" && !!elem.checked ) ||
+				( nodeName === "option" && !!elem.selected );
+		},
+
+		"selected": function( elem ) {
+
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				// eslint-disable-next-line no-unused-expressions
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos[ "empty" ]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( ( attr = elem.getAttribute( "type" ) ) == null ||
+					attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo( function() {
+			return [ 0 ];
+		} ),
+
+		"last": createPositionalPseudo( function( _matchIndexes, length ) {
+			return [ length - 1 ];
+		} ),
+
+		"eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		} ),
+
+		"even": createPositionalPseudo( function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"odd": createPositionalPseudo( function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+			var i = argument < 0 ?
+				argument + length :
+				argument > length ?
+					length :
+					argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} )
+	}
+};
+
+Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
+			if ( match ) {
+
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[ 0 ].length ) || soFar;
+			}
+			groups.push( ( tokens = [] ) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( ( match = rcombinators.exec( soFar ) ) ) {
+			matched = match.shift();
+			tokens.push( {
+				value: matched,
+
+				// Cast descendant combinators to space
+				type: match[ 0 ].replace( rtrim, " " )
+			} );
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
+				( match = preFilters[ type ]( match ) ) ) ) {
+				matched = match.shift();
+				tokens.push( {
+					value: matched,
+					type: type,
+					matches: match
+				} );
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[ i ].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		skip = combinator.next,
+		key = skip || dir,
+		checkNonElements = base && key === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( ( elem = elem[ dir ] ) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+			return false;
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( ( elem = elem[ dir ] ) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( ( elem = elem[ dir ] ) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] ||
+							( outerCache[ elem.uniqueID ] = {} );
+
+						if ( skip && skip === elem.nodeName.toLowerCase() ) {
+							elem = elem[ dir ] || elem;
+						} else if ( ( oldCache = uniqueCache[ key ] ) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return ( newCache[ 2 ] = oldCache[ 2 ] );
+						} else {
+
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ key ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+			return false;
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[ i ]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[ 0 ];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[ i ], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( ( elem = unmatched[ i ] ) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction( function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts(
+				selector || "*",
+				context.nodeType ? [ context ] : context,
+				[]
+			),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( ( elem = temp[ i ] ) ) {
+					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( ( elem = matcherOut[ i ] ) ) {
+
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( ( matcherIn[ i ] = elem ) );
+						}
+					}
+					postFinder( null, ( matcherOut = [] ), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( ( elem = matcherOut[ i ] ) &&
+						( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
+
+						seed[ temp ] = !( results[ temp ] = elem );
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	} );
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
+		implicitRelative = leadingRelative || Expr.relative[ " " ],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				( checkContext = context ).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
+			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
+		} else {
+			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[ j ].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+
+					// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+					tokens
+						.slice( 0, i - 1 )
+						.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
+
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
+				len = elems.length;
+
+			if ( outermost ) {
+
+				// Support: IE 11+, Edge 17 - 18+
+				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+				// two documents; shallow comparisons work.
+				// eslint-disable-next-line eqeqeq
+				outermostContext = context == document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+
+					// Support: IE 11+, Edge 17 - 18+
+					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+					// two documents; shallow comparisons work.
+					// eslint-disable-next-line eqeqeq
+					if ( !context && elem.ownerDocument != document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( ( matcher = elementMatchers[ j++ ] ) ) {
+						if ( matcher( elem, context || document, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+
+					// They will have gone through all possible matchers
+					if ( ( elem = !matcher && elem ) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( ( matcher = setMatchers[ j++ ] ) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
+								setMatched[ i ] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[ i ] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache(
+			selector,
+			matcherFromGroupMatchers( elementMatchers, setMatchers )
+		);
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
+		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
+			context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
+
+			context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
+				.replace( runescape, funescape ), context ) || [] )[ 0 ];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[ i ];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ ( type = token.type ) ] ) {
+				break;
+			}
+			if ( ( find = Expr.find[ type ] ) ) {
+
+				// Search, expanding context for leading sibling combinators
+				if ( ( seed = find(
+					token.matches[ 0 ].replace( runescape, funescape ),
+					rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
+						context
+				) ) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert( function( el ) {
+
+	// Should return 1, but returns 4 (following)
+	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
+} );
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert( function( el ) {
+	el.innerHTML = "<a href='#'></a>";
+	return el.firstChild.getAttribute( "href" ) === "#";
+} ) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	} );
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert( function( el ) {
+	el.innerHTML = "<input/>";
+	el.firstChild.setAttribute( "value", "" );
+	return el.firstChild.getAttribute( "value" ) === "";
+} ) ) {
+	addHandle( "value", function( elem, _name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	} );
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert( function( el ) {
+	return el.getAttribute( "disabled" ) == null;
+} ) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+				( val = elem.getAttributeNode( name ) ) && val.specified ?
+					val.value :
+					null;
+		}
+	} );
+}
+
+return Sizzle;
+
+} )( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+	}
+
+	// Single element
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+	}
+
+	// Arraylike of elements (jQuery, arguments, Array)
+	if ( typeof qualifier !== "string" ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+		} );
+	}
+
+	// Filtered directly for both simple and complex selectors
+	return jQuery.filter( qualifier, elements, not );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	if ( elems.length === 1 && elem.nodeType === 1 ) {
+		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+	}
+
+	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+		return elem.nodeType === 1;
+	} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i, ret,
+			len = this.length,
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		ret = this.pushStack( [] );
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	// Shortcut simple #id case for speed
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Method init() accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[ 0 ] === "<" &&
+				selector[ selector.length - 1 ] === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					if ( elem ) {
+
+						// Inject the element directly into the jQuery object
+						this[ 0 ] = elem;
+						this.length = 1;
+					}
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( isFunction( selector ) ) {
+			return root.ready !== undefined ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter( function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			targets = typeof selectors !== "string" && jQuery( selectors );
+
+		// Positional selectors never match, since there's no _selection_ context
+		if ( !rneedsContext.test( selectors ) ) {
+			for ( ; i < l; i++ ) {
+				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+					// Always skip document fragments
+					if ( cur.nodeType < 11 && ( targets ?
+						targets.index( cur ) > -1 :
+
+						// Don't pass non-elements to Sizzle
+						cur.nodeType === 1 &&
+							jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+						matched.push( cur );
+						break;
+					}
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, _i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, _i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, _i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+		if ( elem.contentDocument != null &&
+
+			// Support: IE 11+
+			// <object> elements with no `data` attribute has an object
+			// `contentDocument` with a `null` prototype.
+			getProto( elem.contentDocument ) ) {
+
+			return elem.contentDocument;
+		}
+
+		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+		// Treat the template element as a regular one in browsers that
+		// don't support it.
+		if ( nodeName( elem, "template" ) ) {
+			elem = elem.content || elem;
+		}
+
+		return jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.uniqueSort( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = locked || options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = queue = [];
+				if ( !memory && !firing ) {
+					list = memory = "";
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+function Identity( v ) {
+	return v;
+}
+function Thrower( ex ) {
+	throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+	var method;
+
+	try {
+
+		// Check for promise aspect first to privilege synchronous behavior
+		if ( value && isFunction( ( method = value.promise ) ) ) {
+			method.call( value ).done( resolve ).fail( reject );
+
+		// Other thenables
+		} else if ( value && isFunction( ( method = value.then ) ) ) {
+			method.call( value, resolve, reject );
+
+		// Other non-thenables
+		} else {
+
+			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+			// * false: [ value ].slice( 0 ) => resolve( value )
+			// * true: [ value ].slice( 1 ) => resolve()
+			resolve.apply( undefined, [ value ].slice( noValue ) );
+		}
+
+	// For Promises/A+, convert exceptions into rejections
+	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+	// Deferred#then to conditionally suppress rejection.
+	} catch ( value ) {
+
+		// Support: Android 4.0 only
+		// Strict mode functions invoked without .call/.apply get global-object context
+		reject.apply( undefined, [ value ] );
+	}
+}
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, callbacks,
+				// ... .then handlers, argument index, [final state]
+				[ "notify", "progress", jQuery.Callbacks( "memory" ),
+					jQuery.Callbacks( "memory" ), 2 ],
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				"catch": function( fn ) {
+					return promise.then( null, fn );
+				},
+
+				// Keep pipe for back-compat
+				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( _i, tuple ) {
+
+							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
+							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+							// deferred.progress(function() { bind to newDefer or newDefer.notify })
+							// deferred.done(function() { bind to newDefer or newDefer.resolve })
+							// deferred.fail(function() { bind to newDefer or newDefer.reject })
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+				then: function( onFulfilled, onRejected, onProgress ) {
+					var maxDepth = 0;
+					function resolve( depth, deferred, handler, special ) {
+						return function() {
+							var that = this,
+								args = arguments,
+								mightThrow = function() {
+									var returned, then;
+
+									// Support: Promises/A+ section 2.3.3.3.3
+									// https://promisesaplus.com/#point-59
+									// Ignore double-resolution attempts
+									if ( depth < maxDepth ) {
+										return;
+									}
+
+									returned = handler.apply( that, args );
+
+									// Support: Promises/A+ section 2.3.1
+									// https://promisesaplus.com/#point-48
+									if ( returned === deferred.promise() ) {
+										throw new TypeError( "Thenable self-resolution" );
+									}
+
+									// Support: Promises/A+ sections 2.3.3.1, 3.5
+									// https://promisesaplus.com/#point-54
+									// https://promisesaplus.com/#point-75
+									// Retrieve `then` only once
+									then = returned &&
+
+										// Support: Promises/A+ section 2.3.4
+										// https://promisesaplus.com/#point-64
+										// Only check objects and functions for thenability
+										( typeof returned === "object" ||
+											typeof returned === "function" ) &&
+										returned.then;
+
+									// Handle a returned thenable
+									if ( isFunction( then ) ) {
+
+										// Special processors (notify) just wait for resolution
+										if ( special ) {
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special )
+											);
+
+										// Normal processors (resolve) also hook into progress
+										} else {
+
+											// ...and disregard older resolution values
+											maxDepth++;
+
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special ),
+												resolve( maxDepth, deferred, Identity,
+													deferred.notifyWith )
+											);
+										}
+
+									// Handle all other returned values
+									} else {
+
+										// Only substitute handlers pass on context
+										// and multiple values (non-spec behavior)
+										if ( handler !== Identity ) {
+											that = undefined;
+											args = [ returned ];
+										}
+
+										// Process the value(s)
+										// Default process is resolve
+										( special || deferred.resolveWith )( that, args );
+									}
+								},
+
+								// Only normal processors (resolve) catch and reject exceptions
+								process = special ?
+									mightThrow :
+									function() {
+										try {
+											mightThrow();
+										} catch ( e ) {
+
+											if ( jQuery.Deferred.exceptionHook ) {
+												jQuery.Deferred.exceptionHook( e,
+													process.stackTrace );
+											}
+
+											// Support: Promises/A+ section 2.3.3.3.4.1
+											// https://promisesaplus.com/#point-61
+											// Ignore post-resolution exceptions
+											if ( depth + 1 >= maxDepth ) {
+
+												// Only substitute handlers pass on context
+												// and multiple values (non-spec behavior)
+												if ( handler !== Thrower ) {
+													that = undefined;
+													args = [ e ];
+												}
+
+												deferred.rejectWith( that, args );
+											}
+										}
+									};
+
+							// Support: Promises/A+ section 2.3.3.3.1
+							// https://promisesaplus.com/#point-57
+							// Re-resolve promises immediately to dodge false rejection from
+							// subsequent errors
+							if ( depth ) {
+								process();
+							} else {
+
+								// Call an optional hook to record the stack, in case of exception
+								// since it's otherwise lost when execution goes async
+								if ( jQuery.Deferred.getStackHook ) {
+									process.stackTrace = jQuery.Deferred.getStackHook();
+								}
+								window.setTimeout( process );
+							}
+						};
+					}
+
+					return jQuery.Deferred( function( newDefer ) {
+
+						// progress_handlers.add( ... )
+						tuples[ 0 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onProgress ) ?
+									onProgress :
+									Identity,
+								newDefer.notifyWith
+							)
+						);
+
+						// fulfilled_handlers.add( ... )
+						tuples[ 1 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onFulfilled ) ?
+									onFulfilled :
+									Identity
+							)
+						);
+
+						// rejected_handlers.add( ... )
+						tuples[ 2 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onRejected ) ?
+									onRejected :
+									Thrower
+							)
+						);
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 5 ];
+
+			// promise.progress = list.add
+			// promise.done = list.add
+			// promise.fail = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(
+					function() {
+
+						// state = "resolved" (i.e., fulfilled)
+						// state = "rejected"
+						state = stateString;
+					},
+
+					// rejected_callbacks.disable
+					// fulfilled_callbacks.disable
+					tuples[ 3 - i ][ 2 ].disable,
+
+					// rejected_handlers.disable
+					// fulfilled_handlers.disable
+					tuples[ 3 - i ][ 3 ].disable,
+
+					// progress_callbacks.lock
+					tuples[ 0 ][ 2 ].lock,
+
+					// progress_handlers.lock
+					tuples[ 0 ][ 3 ].lock
+				);
+			}
+
+			// progress_handlers.fire
+			// fulfilled_handlers.fire
+			// rejected_handlers.fire
+			list.add( tuple[ 3 ].fire );
+
+			// deferred.notify = function() { deferred.notifyWith(...) }
+			// deferred.resolve = function() { deferred.resolveWith(...) }
+			// deferred.reject = function() { deferred.rejectWith(...) }
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+				return this;
+			};
+
+			// deferred.notifyWith = list.fireWith
+			// deferred.resolveWith = list.fireWith
+			// deferred.rejectWith = list.fireWith
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( singleValue ) {
+		var
+
+			// count of uncompleted subordinates
+			remaining = arguments.length,
+
+			// count of unprocessed arguments
+			i = remaining,
+
+			// subordinate fulfillment data
+			resolveContexts = Array( i ),
+			resolveValues = slice.call( arguments ),
+
+			// the master Deferred
+			master = jQuery.Deferred(),
+
+			// subordinate callback factory
+			updateFunc = function( i ) {
+				return function( value ) {
+					resolveContexts[ i ] = this;
+					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( !( --remaining ) ) {
+						master.resolveWith( resolveContexts, resolveValues );
+					}
+				};
+			};
+
+		// Single- and empty arguments are adopted like Promise.resolve
+		if ( remaining <= 1 ) {
+			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+				!remaining );
+
+			// Use .then() to unwrap secondary thenables (cf. gh-3000)
+			if ( master.state() === "pending" ||
+				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+				return master.then();
+			}
+		}
+
+		// Multiple arguments are aggregated like Promise.all array elements
+		while ( i-- ) {
+			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+		}
+
+		return master.promise();
+	}
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+	// Support: IE 8 - 9 only
+	// Console exists when dev tools are open, which can happen at any time
+	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+	}
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+	window.setTimeout( function() {
+		throw error;
+	} );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+	readyList
+		.then( fn )
+
+		// Wrap jQuery.readyException in a function so that the lookup
+		// happens at the time of error handling instead of callback
+		// registration.
+		.catch( function( error ) {
+			jQuery.readyException( error );
+		} );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+	}
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed );
+	window.removeEventListener( "load", completed );
+	jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+	// Handle it asynchronously to allow scripts the opportunity to delay ready
+	window.setTimeout( jQuery.ready );
+
+} else {
+
+	// Use the handy event callback
+	document.addEventListener( "DOMContentLoaded", completed );
+
+	// A fallback to window.onload, that will always work
+	window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( toType( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, _key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn(
+					elems[ i ], key, raw ?
+					value :
+					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	if ( chainable ) {
+		return elems;
+	}
+
+	// Gets
+	if ( bulk ) {
+		return fn.call( elems );
+	}
+
+	return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+
+
+// Matches dashed string for camelizing
+var rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([a-z])/g;
+
+// Used by camelCase as callback to replace()
+function fcamelCase( _all, letter ) {
+	return letter.toUpperCase();
+}
+
+// Convert dashed to camelCase; used by the css and data modules
+// Support: IE <=9 - 11, Edge 12 - 15
+// Microsoft forgot to hump their vendor prefix (#9572)
+function camelCase( string ) {
+	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+}
+var acceptData = function( owner ) {
+
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+	cache: function( owner ) {
+
+		// Check if the owner object already has a cache
+		var value = owner[ this.expando ];
+
+		// If not, create one
+		if ( !value ) {
+			value = {};
+
+			// We can accept data for non-element nodes in modern browsers,
+			// but we should not, see #8335.
+			// Always return an empty object.
+			if ( acceptData( owner ) ) {
+
+				// If it is a node unlikely to be stringify-ed or looped over
+				// use plain assignment
+				if ( owner.nodeType ) {
+					owner[ this.expando ] = value;
+
+				// Otherwise secure it in a non-enumerable property
+				// configurable must be true to allow the property to be
+				// deleted when data is removed
+				} else {
+					Object.defineProperty( owner, this.expando, {
+						value: value,
+						configurable: true
+					} );
+				}
+			}
+		}
+
+		return value;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			cache = this.cache( owner );
+
+		// Handle: [ owner, key, value ] args
+		// Always use camelCase key (gh-2257)
+		if ( typeof data === "string" ) {
+			cache[ camelCase( data ) ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ camelCase( prop ) ] = data[ prop ];
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		return key === undefined ?
+			this.cache( owner ) :
+
+			// Always use camelCase key (gh-2257)
+			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
+	},
+	access: function( owner, key, value ) {
+
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+			return this.get( owner, key );
+		}
+
+		// When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i,
+			cache = owner[ this.expando ];
+
+		if ( cache === undefined ) {
+			return;
+		}
+
+		if ( key !== undefined ) {
+
+			// Support array or space separated string of keys
+			if ( Array.isArray( key ) ) {
+
+				// If key is an array of keys...
+				// We always set camelCase keys, so remove that.
+				key = key.map( camelCase );
+			} else {
+				key = camelCase( key );
+
+				// If a key with the spaces exists, use it.
+				// Otherwise, create an array by matching non-whitespace
+				key = key in cache ?
+					[ key ] :
+					( key.match( rnothtmlwhite ) || [] );
+			}
+
+			i = key.length;
+
+			while ( i-- ) {
+				delete cache[ key[ i ] ];
+			}
+		}
+
+		// Remove the expando if there's no more data
+		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+			// Support: Chrome <=35 - 45
+			// Webkit & Blink performance suffers when deleting properties
+			// from DOM nodes, so set to undefined instead
+			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+			if ( owner.nodeType ) {
+				owner[ this.expando ] = undefined;
+			} else {
+				delete owner[ this.expando ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		var cache = owner[ this.expando ];
+		return cache !== undefined && !jQuery.isEmptyObject( cache );
+	}
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+	if ( data === "true" ) {
+		return true;
+	}
+
+	if ( data === "false" ) {
+		return false;
+	}
+
+	if ( data === "null" ) {
+		return null;
+	}
+
+	// Only convert to a number if it doesn't change the string
+	if ( data === +data + "" ) {
+		return +data;
+	}
+
+	if ( rbrace.test( data ) ) {
+		return JSON.parse( data );
+	}
+
+	return data;
+}
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = getData( data );
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			dataUser.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend( {
+	hasData: function( elem ) {
+		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return dataUser.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		dataUser.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to dataPriv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return dataPriv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		dataPriv.remove( elem, name );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = dataUser.get( elem );
+
+				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE 11 only
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					dataPriv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				dataUser.set( this, key );
+			} );
+		}
+
+		return access( this, function( value ) {
+			var data;
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+
+				// Attempt to get data from the cache
+				// The key will always be camelCased in Data
+				data = dataUser.get( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			this.each( function() {
+
+				// We always store the camelCased key
+				dataUser.set( this, key, value );
+			} );
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			dataUser.remove( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = dataPriv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || Array.isArray( data ) ) {
+					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				dataPriv.remove( elem, [ type + "queue", key ] );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var documentElement = document.documentElement;
+
+
+
+	var isAttached = function( elem ) {
+			return jQuery.contains( elem.ownerDocument, elem );
+		},
+		composed = { composed: true };
+
+	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
+	// Check attachment across shadow DOM boundaries when possible (gh-3504)
+	// Support: iOS 10.0-10.2 only
+	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
+	// leading to errors. We need to check for `getRootNode`.
+	if ( documentElement.getRootNode ) {
+		isAttached = function( elem ) {
+			return jQuery.contains( elem.ownerDocument, elem ) ||
+				elem.getRootNode( composed ) === elem.ownerDocument;
+		};
+	}
+var isHiddenWithinTree = function( elem, el ) {
+
+		// isHiddenWithinTree might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+
+		// Inline style trumps all
+		return elem.style.display === "none" ||
+			elem.style.display === "" &&
+
+			// Otherwise, check computed style
+			// Support: Firefox <=43 - 45
+			// Disconnected elements can have computed display: none, so first confirm that elem is
+			// in the document.
+			isAttached( elem ) &&
+
+			jQuery.css( elem, "display" ) === "none";
+	};
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted, scale,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() {
+				return tween.cur();
+			} :
+			function() {
+				return jQuery.css( elem, prop, "" );
+			},
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = elem.nodeType &&
+			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Support: Firefox <=54
+		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
+		initial = initial / 2;
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		while ( maxIterations-- ) {
+
+			// Evaluate and update our best guess (doubling guesses that zero out).
+			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
+			jQuery.style( elem, prop, initialInUnit + unit );
+			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
+				maxIterations = 0;
+			}
+			initialInUnit = initialInUnit / scale;
+
+		}
+
+		initialInUnit = initialInUnit * 2;
+		jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+	var temp,
+		doc = elem.ownerDocument,
+		nodeName = elem.nodeName,
+		display = defaultDisplayMap[ nodeName ];
+
+	if ( display ) {
+		return display;
+	}
+
+	temp = doc.body.appendChild( doc.createElement( nodeName ) );
+	display = jQuery.css( temp, "display" );
+
+	temp.parentNode.removeChild( temp );
+
+	if ( display === "none" ) {
+		display = "block";
+	}
+	defaultDisplayMap[ nodeName ] = display;
+
+	return display;
+}
+
+function showHide( elements, show ) {
+	var display, elem,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	// Determine new display value for elements that need to change
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		display = elem.style.display;
+		if ( show ) {
+
+			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+			// check is required in this first loop unless we have a nonempty display value (either
+			// inline or about-to-be-restored)
+			if ( display === "none" ) {
+				values[ index ] = dataPriv.get( elem, "display" ) || null;
+				if ( !values[ index ] ) {
+					elem.style.display = "";
+				}
+			}
+			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+				values[ index ] = getDefaultDisplay( elem );
+			}
+		} else {
+			if ( display !== "none" ) {
+				values[ index ] = "none";
+
+				// Remember what we're overwriting
+				dataPriv.set( elem, "display", display );
+			}
+		}
+	}
+
+	// Set the display of the elements in a second loop to avoid constant reflow
+	for ( index = 0; index < length; index++ ) {
+		if ( values[ index ] != null ) {
+			elements[ index ].style.display = values[ index ];
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend( {
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHiddenWithinTree( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
+
+var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
+
+
+
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0 - 4.3 only
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Android <=4.1 only
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE <=11 only
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+	// Support: IE <=9 only
+	// IE <=9 replaces <option> tags with their contents when inserted outside of
+	// the select element.
+	div.innerHTML = "<option></option>";
+	support.option = !!div.lastChild;
+} )();
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+	// XHTML parsers do not magically insert elements in the
+	// same way that tag soup parsers do. So we cannot shorten
+	// this by omitting <tbody> or other required elements.
+	thead: [ 1, "<table>", "</table>" ],
+	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+	_default: [ 0, "", "" ]
+};
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: IE <=9 only
+if ( !support.option ) {
+	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
+}
+
+
+function getAll( context, tag ) {
+
+	// Support: IE <=9 - 11 only
+	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
+	var ret;
+
+	if ( typeof context.getElementsByTagName !== "undefined" ) {
+		ret = context.getElementsByTagName( tag || "*" );
+
+	} else if ( typeof context.querySelectorAll !== "undefined" ) {
+		ret = context.querySelectorAll( tag || "*" );
+
+	} else {
+		ret = [];
+	}
+
+	if ( tag === undefined || tag && nodeName( context, tag ) ) {
+		return jQuery.merge( [ context ], ret );
+	}
+
+	return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		dataPriv.set(
+			elems[ i ],
+			"globalEval",
+			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var elem, tmp, tag, wrap, attached, j,
+		fragment = context.createDocumentFragment(),
+		nodes = [],
+		i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( toType( elem ) === "object" ) {
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Remember the top-level container
+				tmp = fragment.firstChild;
+
+				// Ensure the created nodes are orphaned (#12392)
+				tmp.textContent = "";
+			}
+		}
+	}
+
+	// Remove wrapper from fragment
+	fragment.textContent = "";
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+			continue;
+		}
+
+		attached = isAttached( elem );
+
+		// Append to fragment
+		tmp = getAll( fragment.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( attached ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	return fragment;
+}
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE <=9 - 11+
+// focus() and blur() are asynchronous, except when they are no-op.
+// So expect focus to be synchronous when the element is already active,
+// and blur to be synchronous when the element is not already active.
+// (focus and blur are always synchronous in other supported browsers,
+// this just defines when we can count on it).
+function expectSync( elem, type ) {
+	return ( elem === safeActiveElement() ) === ( type === "focus" );
+}
+
+// Support: IE <=9 only
+// Accessing document.activeElement can throw unexpectedly
+// https://bugs.jquery.com/ticket/13393
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.get( elem );
+
+		// Only attach events to objects that accept data
+		if ( !acceptData( elem ) ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Ensure that invalid selectors throw exceptions at attach time
+		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
+		if ( selector ) {
+			jQuery.find.matchesSelector( documentElement, selector );
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = Object.create( null );
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove data and the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			dataPriv.remove( elem, "handle events" );
+		}
+	},
+
+	dispatch: function( nativeEvent ) {
+
+		var i, j, ret, matched, handleObj, handlerQueue,
+			args = new Array( arguments.length ),
+
+			// Make a writable jQuery.Event from the native event object
+			event = jQuery.event.fix( nativeEvent ),
+
+			handlers = (
+					dataPriv.get( this, "events" ) || Object.create( null )
+				)[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+
+		for ( i = 1; i < arguments.length; i++ ) {
+			args[ i ] = arguments[ i ];
+		}
+
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// If the event is namespaced, then each handler is only invoked if it is
+				// specially universal or its namespaces are a superset of the event's.
+				if ( !event.rnamespace || handleObj.namespace === false ||
+					event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, handleObj, sel, matchedHandlers, matchedSelectors,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		if ( delegateCount &&
+
+			// Support: IE <=9
+			// Black-hole SVG <use> instance trees (trac-13180)
+			cur.nodeType &&
+
+			// Support: Firefox <=42
+			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+			// Support: IE 11 only
+			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+			!( event.type === "click" && event.button >= 1 ) ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+					matchedHandlers = [];
+					matchedSelectors = {};
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matchedSelectors[ sel ] === undefined ) {
+							matchedSelectors[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matchedSelectors[ sel ] ) {
+							matchedHandlers.push( handleObj );
+						}
+					}
+					if ( matchedHandlers.length ) {
+						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		cur = this;
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	addProp: function( name, hook ) {
+		Object.defineProperty( jQuery.Event.prototype, name, {
+			enumerable: true,
+			configurable: true,
+
+			get: isFunction( hook ) ?
+				function() {
+					if ( this.originalEvent ) {
+							return hook( this.originalEvent );
+					}
+				} :
+				function() {
+					if ( this.originalEvent ) {
+							return this.originalEvent[ name ];
+					}
+				},
+
+			set: function( value ) {
+				Object.defineProperty( this, name, {
+					enumerable: true,
+					configurable: true,
+					writable: true,
+					value: value
+				} );
+			}
+		} );
+	},
+
+	fix: function( originalEvent ) {
+		return originalEvent[ jQuery.expando ] ?
+			originalEvent :
+			new jQuery.Event( originalEvent );
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		click: {
+
+			// Utilize native event to ensure correct state for checkable inputs
+			setup: function( data ) {
+
+				// For mutual compressibility with _default, replace `this` access with a local var.
+				// `|| data` is dead code meant only to preserve the variable through minification.
+				var el = this || data;
+
+				// Claim the first handler
+				if ( rcheckableType.test( el.type ) &&
+					el.click && nodeName( el, "input" ) ) {
+
+					// dataPriv.set( el, "click", ... )
+					leverageNative( el, "click", returnTrue );
+				}
+
+				// Return false to allow normal processing in the caller
+				return false;
+			},
+			trigger: function( data ) {
+
+				// For mutual compressibility with _default, replace `this` access with a local var.
+				// `|| data` is dead code meant only to preserve the variable through minification.
+				var el = this || data;
+
+				// Force setup before triggering a click
+				if ( rcheckableType.test( el.type ) &&
+					el.click && nodeName( el, "input" ) ) {
+
+					leverageNative( el, "click" );
+				}
+
+				// Return non-false to allow normal event-path propagation
+				return true;
+			},
+
+			// For cross-browser consistency, suppress native .click() on links
+			// Also prevent it if we're currently inside a leveraged native-event stack
+			_default: function( event ) {
+				var target = event.target;
+				return rcheckableType.test( target.type ) &&
+					target.click && nodeName( target, "input" ) &&
+					dataPriv.get( target, "click" ) ||
+					nodeName( target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	}
+};
+
+// Ensure the presence of an event listener that handles manually-triggered
+// synthetic events by interrupting progress until reinvoked in response to
+// *native* events that it fires directly, ensuring that state changes have
+// already occurred before other listeners are invoked.
+function leverageNative( el, type, expectSync ) {
+
+	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
+	if ( !expectSync ) {
+		if ( dataPriv.get( el, type ) === undefined ) {
+			jQuery.event.add( el, type, returnTrue );
+		}
+		return;
+	}
+
+	// Register the controller as a special universal handler for all event namespaces
+	dataPriv.set( el, type, false );
+	jQuery.event.add( el, type, {
+		namespace: false,
+		handler: function( event ) {
+			var notAsync, result,
+				saved = dataPriv.get( this, type );
+
+			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
+
+				// Interrupt processing of the outer synthetic .trigger()ed event
+				// Saved data should be false in such cases, but might be a leftover capture object
+				// from an async native handler (gh-4350)
+				if ( !saved.length ) {
+
+					// Store arguments for use when handling the inner native event
+					// There will always be at least one argument (an event object), so this array
+					// will not be confused with a leftover capture object.
+					saved = slice.call( arguments );
+					dataPriv.set( this, type, saved );
+
+					// Trigger the native event and capture its result
+					// Support: IE <=9 - 11+
+					// focus() and blur() are asynchronous
+					notAsync = expectSync( this, type );
+					this[ type ]();
+					result = dataPriv.get( this, type );
+					if ( saved !== result || notAsync ) {
+						dataPriv.set( this, type, false );
+					} else {
+						result = {};
+					}
+					if ( saved !== result ) {
+
+						// Cancel the outer synthetic event
+						event.stopImmediatePropagation();
+						event.preventDefault();
+						return result.value;
+					}
+
+				// If this is an inner synthetic event for an event with a bubbling surrogate
+				// (focus or blur), assume that the surrogate already propagated from triggering the
+				// native event and prevent that from happening again here.
+				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
+				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
+				// less bad than duplication.
+				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
+					event.stopPropagation();
+				}
+
+			// If this is a native event triggered above, everything is now in order
+			// Fire an inner synthetic event with the original arguments
+			} else if ( saved.length ) {
+
+				// ...and capture the result
+				dataPriv.set( this, type, {
+					value: jQuery.event.trigger(
+
+						// Support: IE <=9 - 11+
+						// Extend with the prototype to reset the above stopImmediatePropagation()
+						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
+						saved.slice( 1 ),
+						this
+					)
+				} );
+
+				// Abort handling of the native event
+				event.stopImmediatePropagation();
+			}
+		}
+	} );
+}
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+	// This "if" is needed for plain objects
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: Android <=2.3 only
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+		// Create target properties
+		// Support: Safari <=6 - 7 only
+		// Target should not be a text node (#504, #13143)
+		this.target = ( src.target && src.target.nodeType === 3 ) ?
+			src.target.parentNode :
+			src.target;
+
+		this.currentTarget = src.currentTarget;
+		this.relatedTarget = src.relatedTarget;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || Date.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+	isSimulated: false,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+	altKey: true,
+	bubbles: true,
+	cancelable: true,
+	changedTouches: true,
+	ctrlKey: true,
+	detail: true,
+	eventPhase: true,
+	metaKey: true,
+	pageX: true,
+	pageY: true,
+	shiftKey: true,
+	view: true,
+	"char": true,
+	code: true,
+	charCode: true,
+	key: true,
+	keyCode: true,
+	button: true,
+	buttons: true,
+	clientX: true,
+	clientY: true,
+	offsetX: true,
+	offsetY: true,
+	pointerId: true,
+	pointerType: true,
+	screenX: true,
+	screenY: true,
+	targetTouches: true,
+	toElement: true,
+	touches: true,
+
+	which: function( event ) {
+		var button = event.button;
+
+		// Add which for key events
+		if ( event.which == null && rkeyEvent.test( event.type ) ) {
+			return event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+			if ( button & 1 ) {
+				return 1;
+			}
+
+			if ( button & 2 ) {
+				return 3;
+			}
+
+			if ( button & 4 ) {
+				return 2;
+			}
+
+			return 0;
+		}
+
+		return event.which;
+	}
+}, jQuery.event.addProp );
+
+jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
+	jQuery.event.special[ type ] = {
+
+		// Utilize native event if possible so blur/focus sequence is correct
+		setup: function() {
+
+			// Claim the first handler
+			// dataPriv.set( this, "focus", ... )
+			// dataPriv.set( this, "blur", ... )
+			leverageNative( this, type, expectSync );
+
+			// Return false to allow normal processing in the caller
+			return false;
+		},
+		trigger: function() {
+
+			// Force setup before trigger
+			leverageNative( this, type );
+
+			// Return non-false to allow normal event-path propagation
+			return true;
+		},
+
+		delegateType: delegateType
+	};
+} );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+jQuery.fn.extend( {
+
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	}
+} );
+
+
+var
+
+	// Support: IE <=10 - 11, Edge 12 - 13 only
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+	if ( nodeName( elem, "table" ) &&
+		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
+	}
+
+	return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
+		elem.type = elem.type.slice( 5 );
+	} else {
+		elem.removeAttribute( "type" );
+	}
+
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( dataPriv.hasData( src ) ) {
+		pdataOld = dataPriv.get( src );
+		events = pdataOld.events;
+
+		if ( events ) {
+			dataPriv.remove( dest, "handle events" );
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( dataUser.hasData( src ) ) {
+		udataOld = dataUser.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		dataUser.set( dest, udataCur );
+	}
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = flat( args );
+
+	var fragment, first, scripts, hasScripts, node, doc,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		valueIsFunction = isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( valueIsFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( valueIsFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android <=4.0 only, PhantomJS 1 only
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!dataPriv.access( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl && !node.noModule ) {
+								jQuery._evalUrl( node.src, {
+									nonce: node.nonce || node.getAttribute( "nonce" )
+								}, doc );
+							}
+						} else {
+							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		nodes = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && isAttached( node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html;
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = isAttached( elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+			if ( acceptData( elem ) ) {
+				if ( ( data = elem[ dataPriv.expando ] ) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataPriv.expando ] = undefined;
+				}
+				if ( elem[ dataUser.expando ] ) {
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataUser.expando ] = undefined;
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each( function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				} );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: Android <=4.0 only, PhantomJS 1 only
+			// .get() because push.apply(_, arraylike) throws on ancient WebKit
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+var swap = function( elem, options, callback ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.call( elem );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
+
+
+
+( function() {
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computeStyleTests() {
+
+		// This is a singleton, we need to execute it only once
+		if ( !div ) {
+			return;
+		}
+
+		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
+			"margin-top:1px;padding:0;border:0";
+		div.style.cssText =
+			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"width:60%;top:1%";
+		documentElement.appendChild( container ).appendChild( div );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+
+		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
+
+		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.right = "60%";
+		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
+
+		// Support: IE 9 - 11 only
+		// Detect misreporting of content dimensions for box-sizing:border-box elements
+		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
+
+		// Support: IE 9 only
+		// Detect overflow:scroll screwiness (gh-3699)
+		// Support: Chrome <=64
+		// Don't get tricked when zoom affects offsetWidth (gh-4029)
+		div.style.position = "absolute";
+		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
+
+		documentElement.removeChild( container );
+
+		// Nullify the div so it wouldn't be stored in the memory and
+		// it will also be a sign that checks already performed
+		div = null;
+	}
+
+	function roundPixelMeasures( measure ) {
+		return Math.round( parseFloat( measure ) );
+	}
+
+	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
+		reliableTrDimensionsVal, reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE <=9 - 11 only
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	jQuery.extend( support, {
+		boxSizingReliable: function() {
+			computeStyleTests();
+			return boxSizingReliableVal;
+		},
+		pixelBoxStyles: function() {
+			computeStyleTests();
+			return pixelBoxStylesVal;
+		},
+		pixelPosition: function() {
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		reliableMarginLeft: function() {
+			computeStyleTests();
+			return reliableMarginLeftVal;
+		},
+		scrollboxSize: function() {
+			computeStyleTests();
+			return scrollboxSizeVal;
+		},
+
+		// Support: IE 9 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Behavior in IE 9 is more subtle than in newer versions & it passes
+		// some versions of this test; make sure not to make it pass there!
+		reliableTrDimensions: function() {
+			var table, tr, trChild, trStyle;
+			if ( reliableTrDimensionsVal == null ) {
+				table = document.createElement( "table" );
+				tr = document.createElement( "tr" );
+				trChild = document.createElement( "div" );
+
+				table.style.cssText = "position:absolute;left:-11111px";
+				tr.style.height = "1px";
+				trChild.style.height = "9px";
+
+				documentElement
+					.appendChild( table )
+					.appendChild( tr )
+					.appendChild( trChild );
+
+				trStyle = window.getComputedStyle( tr );
+				reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
+
+				documentElement.removeChild( table );
+			}
+			return reliableTrDimensionsVal;
+		}
+	} );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+
+		// Support: Firefox 51+
+		// Retrieving style before computed somehow
+		// fixes an issue with getting wrong values
+		// on detached elements
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+
+	// getPropertyValue is needed for:
+	//   .css('filter') (IE 9 only, #12537)
+	//   .css('--customProperty) (#3144)
+	if ( computed ) {
+		ret = computed.getPropertyValue( name ) || computed[ name ];
+
+		if ( ret === "" && !isAttached( elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// Android Browser returns percentage for some values,
+		// but width seems to be reliably pixels.
+		// This is against the CSSOM draft spec:
+		// https://drafts.csswg.org/cssom/#resolved-values
+		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+
+		// Support: IE <=9 - 11 only
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var cssPrefixes = [ "Webkit", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style,
+	vendorProps = {};
+
+// Return a vendor-prefixed property or undefined
+function vendorPropName( name ) {
+
+	// Check for vendor prefixed names
+	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
+function finalPropName( name ) {
+	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
+
+	if ( final ) {
+		return final;
+	}
+	if ( name in emptyStyle ) {
+		return name;
+	}
+	return vendorProps[ name ] = vendorPropName( name ) || name;
+}
+
+
+var
+
+	// Swappable if display is none or starts with table
+	// except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rcustomProp = /^--/,
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	};
+
+function setPositiveNumber( _elem, value, subtract ) {
+
+	// Any relative (+/-) values have already been
+	// normalized at this point
+	var matches = rcssNum.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+		value;
+}
+
+function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
+	var i = dimension === "width" ? 1 : 0,
+		extra = 0,
+		delta = 0;
+
+	// Adjustment may not be necessary
+	if ( box === ( isBorderBox ? "border" : "content" ) ) {
+		return 0;
+	}
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin
+		if ( box === "margin" ) {
+			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
+		}
+
+		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
+		if ( !isBorderBox ) {
+
+			// Add padding
+			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// For "border" or "margin", add border
+			if ( box !== "padding" ) {
+				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+
+			// But still keep track of it otherwise
+			} else {
+				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+
+		// If we get here with a border-box (content + padding + border), we're seeking "content" or
+		// "padding" or "margin"
+		} else {
+
+			// For "content", subtract padding
+			if ( box === "content" ) {
+				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// For "content" or "padding", subtract border
+			if ( box !== "margin" ) {
+				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	// Account for positive content-box scroll gutter when requested by providing computedVal
+	if ( !isBorderBox && computedVal >= 0 ) {
+
+		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
+		// Assuming integer scroll gutter, subtract the rest and round down
+		delta += Math.max( 0, Math.ceil(
+			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+			computedVal -
+			delta -
+			extra -
+			0.5
+
+		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
+		// Use an explicit zero to avoid NaN (gh-3964)
+		) ) || 0;
+	}
+
+	return delta;
+}
+
+function getWidthOrHeight( elem, dimension, extra ) {
+
+	// Start with computed style
+	var styles = getStyles( elem ),
+
+		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
+		// Fake content-box until we know it's needed to know the true value.
+		boxSizingNeeded = !support.boxSizingReliable() || extra,
+		isBorderBox = boxSizingNeeded &&
+			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+		valueIsBorderBox = isBorderBox,
+
+		val = curCSS( elem, dimension, styles ),
+		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
+
+	// Support: Firefox <=54
+	// Return a confounding non-pixel value or feign ignorance, as appropriate.
+	if ( rnumnonpx.test( val ) ) {
+		if ( !extra ) {
+			return val;
+		}
+		val = "auto";
+	}
+
+
+	// Support: IE 9 - 11 only
+	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
+	// In those cases, the computed value can be trusted to be border-box.
+	if ( ( !support.boxSizingReliable() && isBorderBox ||
+
+		// Support: IE 10 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
+		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
+
+		// Fall back to offsetWidth/offsetHeight when value is "auto"
+		// This happens for inline elements with no explicit setting (gh-3571)
+		val === "auto" ||
+
+		// Support: Android <=4.1 - 4.3 only
+		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
+		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
+
+		// Make sure the element is visible & connected
+		elem.getClientRects().length ) {
+
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
+		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
+		// retrieved value as a content box dimension.
+		valueIsBorderBox = offsetProp in elem;
+		if ( valueIsBorderBox ) {
+			val = elem[ offsetProp ];
+		}
+	}
+
+	// Normalize "" and auto
+	val = parseFloat( val ) || 0;
+
+	// Adjust for the element's box model
+	return ( val +
+		boxModelAdjustment(
+			elem,
+			dimension,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles,
+
+			// Provide the current computed size to request scroll gutter calculation (gh-3589)
+			val
+		)
+	) + "px";
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"gridArea": true,
+		"gridColumn": true,
+		"gridColumnEnd": true,
+		"gridColumnStart": true,
+		"gridRow": true,
+		"gridRowEnd": true,
+		"gridRowStart": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = camelCase( name ),
+			isCustomProp = rcustomProp.test( name ),
+			style = elem.style;
+
+		// Make sure that we're working with the right name. We don't
+		// want to query the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
+			// "px" to a few hardcoded values.
+			if ( type === "number" && !isCustomProp ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				if ( isCustomProp ) {
+					style.setProperty( name, value );
+				} else {
+					style[ name ] = value;
+				}
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = camelCase( name ),
+			isCustomProp = rcustomProp.test( name );
+
+		// Make sure that we're working with the right name. We don't
+		// want to modify the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( _i, dimension ) {
+	jQuery.cssHooks[ dimension ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+					// Support: Safari 8+
+					// Table columns in Safari have non-zero offsetWidth & zero
+					// getBoundingClientRect().width unless display is changed.
+					// Support: IE <=11 only
+					// Running getBoundingClientRect on a disconnected node
+					// in IE throws an error.
+					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, dimension, extra );
+						} ) :
+						getWidthOrHeight( elem, dimension, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = getStyles( elem ),
+
+				// Only read styles.position if the test has a chance to fail
+				// to avoid forcing a reflow.
+				scrollboxSizeBuggy = !support.scrollboxSize() &&
+					styles.position === "absolute",
+
+				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
+				boxSizingNeeded = scrollboxSizeBuggy || extra,
+				isBorderBox = boxSizingNeeded &&
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+				subtract = extra ?
+					boxModelAdjustment(
+						elem,
+						dimension,
+						extra,
+						isBorderBox,
+						styles
+					) :
+					0;
+
+			// Account for unreliable border-box dimensions by comparing offset* to computed and
+			// faking a content-box to get border and padding (gh-3699)
+			if ( isBorderBox && scrollboxSizeBuggy ) {
+				subtract -= Math.ceil(
+					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+					parseFloat( styles[ dimension ] ) -
+					boxModelAdjustment( elem, dimension, "border", false, styles ) -
+					0.5
+				);
+			}
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ dimension ] = value;
+				value = jQuery.css( elem, dimension );
+			}
+
+			return setPositiveNumber( elem, value, subtract );
+		}
+	};
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+				elem.getBoundingClientRect().left -
+					swap( elem, { marginLeft: 0 }, function() {
+						return elem.getBoundingClientRect().left;
+					} )
+				) + "px";
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( prefix !== "margin" ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( Array.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 && (
+					jQuery.cssHooks[ tween.prop ] ||
+					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, inProgress,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+function schedule() {
+	if ( inProgress ) {
+		if ( document.hidden === false && window.requestAnimationFrame ) {
+			window.requestAnimationFrame( schedule );
+		} else {
+			window.setTimeout( schedule, jQuery.fx.interval );
+		}
+
+		jQuery.fx.tick();
+	}
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = Date.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+		isBox = "width" in props || "height" in props,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHiddenWithinTree( elem ),
+		dataShow = dataPriv.get( elem, "fxshow" );
+
+	// Queue-skipping animations hijack the fx hooks
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// Ensure the complete handler is called before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// Detect show/hide animations
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.test( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// Pretend to be hidden if this is a "show" and
+				// there is still data from a stopped show/hide
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+
+				// Ignore all other no-op show/hide data
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+		}
+	}
+
+	// Bail out if this is a no-op like .hide().hide()
+	propTween = !jQuery.isEmptyObject( props );
+	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+		return;
+	}
+
+	// Restrict "overflow" and "display" styles during box animations
+	if ( isBox && elem.nodeType === 1 ) {
+
+		// Support: IE <=9 - 11, Edge 12 - 15
+		// Record all 3 overflow attributes because IE does not infer the shorthand
+		// from identically-valued overflowX and overflowY and Edge just mirrors
+		// the overflowX value there.
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Identify a display type, preferring old show/hide data over the CSS cascade
+		restoreDisplay = dataShow && dataShow.display;
+		if ( restoreDisplay == null ) {
+			restoreDisplay = dataPriv.get( elem, "display" );
+		}
+		display = jQuery.css( elem, "display" );
+		if ( display === "none" ) {
+			if ( restoreDisplay ) {
+				display = restoreDisplay;
+			} else {
+
+				// Get nonempty value(s) by temporarily forcing visibility
+				showHide( [ elem ], true );
+				restoreDisplay = elem.style.display || restoreDisplay;
+				display = jQuery.css( elem, "display" );
+				showHide( [ elem ] );
+			}
+		}
+
+		// Animate inline elements as inline-block
+		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+			if ( jQuery.css( elem, "float" ) === "none" ) {
+
+				// Restore the original display value at the end of pure show/hide animations
+				if ( !propTween ) {
+					anim.done( function() {
+						style.display = restoreDisplay;
+					} );
+					if ( restoreDisplay == null ) {
+						display = style.display;
+						restoreDisplay = display === "none" ? "" : display;
+					}
+				}
+				style.display = "inline-block";
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always( function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		} );
+	}
+
+	// Implement show/hide animations
+	propTween = false;
+	for ( prop in orig ) {
+
+		// General show/hide setup for this element animation
+		if ( !propTween ) {
+			if ( dataShow ) {
+				if ( "hidden" in dataShow ) {
+					hidden = dataShow.hidden;
+				}
+			} else {
+				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+			}
+
+			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+			if ( toggle ) {
+				dataShow.hidden = !hidden;
+			}
+
+			// Show elements before animating them
+			if ( hidden ) {
+				showHide( [ elem ], true );
+			}
+
+			/* eslint-disable no-loop-func */
+
+			anim.done( function() {
+
+			/* eslint-enable no-loop-func */
+
+				// The final step of a "hide" animation is actually hiding the element
+				if ( !hidden ) {
+					showHide( [ elem ] );
+				}
+				dataPriv.remove( elem, "fxshow" );
+				for ( prop in orig ) {
+					jQuery.style( elem, prop, orig[ prop ] );
+				}
+			} );
+		}
+
+		// Per-property setup
+		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+		if ( !( prop in dataShow ) ) {
+			dataShow[ prop ] = propTween.start;
+			if ( hidden ) {
+				propTween.end = propTween.start;
+				propTween.start = 0;
+			}
+		}
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( Array.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3 only
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			// If there's more to do, yield
+			if ( percent < 1 && length ) {
+				return remaining;
+			}
+
+			// If this was an empty animation, synthesize a final progress notification
+			if ( !length ) {
+				deferred.notifyWith( elem, [ animation, 1, 0 ] );
+			}
+
+			// Resolve the animation and report its conclusion
+			deferred.resolveWith( elem, [ animation ] );
+			return false;
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					result.stop.bind( result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	// Attach callbacks from options
+	animation
+		.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnothtmlwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !isFunction( easing ) && easing
+	};
+
+	// Go to the end state if fx are off
+	if ( jQuery.fx.off ) {
+		opt.duration = 0;
+
+	} else {
+		if ( typeof opt.duration !== "number" ) {
+			if ( opt.duration in jQuery.fx.speeds ) {
+				opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+			} else {
+				opt.duration = jQuery.fx.speeds._default;
+			}
+		}
+	}
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || dataPriv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = dataPriv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = dataPriv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = Date.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Run the timer and safely remove it when done (allowing for external removal)
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+	if ( inProgress ) {
+		return;
+	}
+
+	inProgress = true;
+	schedule();
+};
+
+jQuery.fx.stop = function() {
+	inProgress = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: Android <=4.3 only
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE <=11 only
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: IE <=11 only
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// Attribute hooks are determined by the lowercase version
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name,
+			i = 0,
+
+			// Attribute names can contain non-HTML whitespace characters
+			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+			attrNames = value && value.match( rnothtmlwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				elem.removeAttribute( name );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle,
+			lowercaseName = name.toLowerCase();
+
+		if ( !isXML ) {
+
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ lowercaseName ];
+			attrHandle[ lowercaseName ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				lowercaseName :
+				null;
+			attrHandle[ lowercaseName ] = handle;
+		}
+		return ret;
+	};
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each( function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// Support: IE <=9 - 11 only
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				if ( tabindex ) {
+					return parseInt( tabindex, 10 );
+				}
+
+				if (
+					rfocusable.test( elem.nodeName ) ||
+					rclickable.test( elem.nodeName ) &&
+					elem.href
+				) {
+					return 0;
+				}
+
+				return -1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		},
+		set: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent ) {
+				parent.selectedIndex;
+
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+	// Strip and collapse whitespace according to HTML spec
+	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
+	function stripAndCollapse( value ) {
+		var tokens = value.match( rnothtmlwhite ) || [];
+		return tokens.join( " " );
+	}
+
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+function classesToArray( value ) {
+	if ( Array.isArray( value ) ) {
+		return value;
+	}
+	if ( typeof value === "string" ) {
+		return value.match( rnothtmlwhite ) || [];
+	}
+	return [];
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isValidValue = type === "string" || Array.isArray( value );
+
+		if ( typeof stateVal === "boolean" && isValidValue ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( isValidValue ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = classesToArray( value );
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// Store className if set
+					dataPriv.set( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				if ( this.setAttribute ) {
+					this.setAttribute( "class",
+						className || value === false ?
+						"" :
+						dataPriv.get( this, "__className__" ) || ""
+					);
+				}
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+					return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, valueIsFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				// Handle most common string cases
+				if ( typeof ret === "string" ) {
+					return ret.replace( rreturn, "" );
+				}
+
+				// Handle cases where value is null/undef or number
+				return ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		valueIsFunction = isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( valueIsFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( Array.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE <=10 - 11 only
+					// option.text throws exceptions (#14686, #14858)
+					// Strip and collapse whitespace
+					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+					stripAndCollapse( jQuery.text( elem ) );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option, i,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one",
+					values = one ? null : [],
+					max = one ? index + 1 : options.length;
+
+				if ( index < 0 ) {
+					i = max;
+
+				} else {
+					i = one ? index : 0;
+				}
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// Support: IE <=9 only
+					// IE8-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							!option.disabled &&
+							( !option.parentNode.disabled ||
+								!nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+
+					/* eslint-disable no-cond-assign */
+
+					if ( option.selected =
+						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+					) {
+						optionSet = true;
+					}
+
+					/* eslint-enable no-cond-assign */
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( Array.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+support.focusin = "onfocusin" in window;
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	stopPropagationCallback = function( e ) {
+		e.stopPropagation();
+	};
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = lastElement = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+			lastElement = cur;
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = (
+					dataPriv.get( cur, "events" ) || Object.create( null )
+				)[ event.type ] &&
+				dataPriv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( ( !special._default ||
+				special._default.apply( eventPath.pop(), data ) === false ) &&
+				acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.addEventListener( type, stopPropagationCallback );
+					}
+
+					elem[ type ]();
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.removeEventListener( type, stopPropagationCallback );
+					}
+
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	// Used only for `focus(in | out)` events
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+	}
+
+} );
+
+jQuery.fn.extend( {
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+
+				// Handle: regular nodes (via `this.ownerDocument`), window
+				// (via `this.document`) & document (via `this`).
+				var doc = this.ownerDocument || this.document || this,
+					attaches = dataPriv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this.document || this,
+					attaches = dataPriv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					dataPriv.remove( doc, fix );
+
+				} else {
+					dataPriv.access( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+var location = window.location;
+
+var nonce = { guid: Date.now() };
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE 9 - 11 only
+	// IE throws on parseFromString with invalid input.
+	try {
+		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( Array.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && toType( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, valueOrFunction ) {
+
+			// If value is a function, invoke it and use its return value
+			var value = isFunction( valueOrFunction ) ?
+				valueOrFunction() :
+				valueOrFunction;
+
+			s[ s.length ] = encodeURIComponent( key ) + "=" +
+				encodeURIComponent( value == null ? "" : value );
+		};
+
+	if ( a == null ) {
+		return "";
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( _i, elem ) {
+			var val = jQuery( this ).val();
+
+			if ( val == null ) {
+				return null;
+			}
+
+			if ( Array.isArray( val ) ) {
+				return jQuery.map( val, function( val ) {
+					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+				} );
+			}
+
+			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+var
+	r20 = /%20/g,
+	rhash = /#.*$/,
+	rantiCache = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+		if ( isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+			// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": JSON.parse,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// Request state (becomes false upon send and true upon completion)
+			completed,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// uncached part of the url
+			uncached,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( completed ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
+									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
+										.concat( match[ 2 ] );
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() + " " ];
+					}
+					return match == null ? null : match.join( ", " );
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return completed ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( completed == null ) {
+						name = requestHeadersNames[ name.toLowerCase() ] =
+							requestHeadersNames[ name.toLowerCase() ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( completed == null ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( completed ) {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						} else {
+
+							// Lazy-add the new callbacks in a way that preserves old ones
+							for ( code in map ) {
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE <=8 - 11, Edge 12 - 15
+			// IE throws exception on accessing the href property if url is malformed,
+			// e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE <=8 - 11 only
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( completed ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		// Remove hash to simplify url manipulation
+		cacheURL = s.url.replace( rhash, "" );
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// Remember the hash so we can put it back
+			uncached = s.url.slice( cacheURL.length );
+
+			// If data is available and should be processed, append data to url
+			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
+				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add or update anti-cache param if needed
+			if ( s.cache === false ) {
+				cacheURL = cacheURL.replace( rantiCache, "$1" );
+				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
+					uncached;
+			}
+
+			// Put hash and anti-cache on the URL that will be requested (gh-1732)
+			s.url = cacheURL + uncached;
+
+		// Change '%20' to '+' if this is encoded form body content (gh-2658)
+		} else if ( s.data && s.processData &&
+			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+			s.data = s.data.replace( r20, "+" );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		completeDeferred.add( s.complete );
+		jqXHR.done( s.success );
+		jqXHR.fail( s.error );
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( completed ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				completed = false;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Rethrow post-completion exceptions
+				if ( completed ) {
+					throw e;
+				}
+
+				// Propagate others as results
+				done( -1, e );
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Ignore repeat invocations
+			if ( completed ) {
+				return;
+			}
+
+			completed = true;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Use a noop converter for missing script
+			if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
+				s.converters[ "text script" ] = function() {};
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( _i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+jQuery.ajaxPrefilter( function( s ) {
+	var i;
+	for ( i in s.headers ) {
+		if ( i.toLowerCase() === "content-type" ) {
+			s.contentType = s.headers[ i ] || "";
+		}
+	}
+} );
+
+
+jQuery._evalUrl = function( url, options, doc ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		cache: true,
+		async: false,
+		global: false,
+
+		// Only evaluate the response if it is successful (gh-4126)
+		// dataFilter is not invoked for failure responses, so using it instead
+		// of the default converter is kludgy but it works.
+		converters: {
+			"text script": function() {}
+		},
+		dataFilter: function( response ) {
+			jQuery.globalEval( response, options, doc );
+		}
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( this[ 0 ] ) {
+			if ( isFunction( html ) ) {
+				html = html.call( this[ 0 ] );
+			}
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var htmlIsFunction = isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function( selector ) {
+		this.parent( selector ).not( "body" ).each( function() {
+			jQuery( this ).replaceWith( this.childNodes );
+		} );
+		return this;
+	}
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+	return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+		// File protocol always yields status code 0, assume 200
+		0: 200,
+
+		// Support: IE <=9 only
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+	var callback, errorCallback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr();
+
+				xhr.open(
+					options.type,
+					options.url,
+					options.async,
+					options.username,
+					options.password
+				);
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+					headers[ "X-Requested-With" ] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							callback = errorCallback = xhr.onload =
+								xhr.onerror = xhr.onabort = xhr.ontimeout =
+									xhr.onreadystatechange = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+
+								// Support: IE <=9 only
+								// On a manual native abort, IE9 throws
+								// errors on any property access that is not readyState
+								if ( typeof xhr.status !== "number" ) {
+									complete( 0, "error" );
+								} else {
+									complete(
+
+										// File: protocol always yields status 0; see #8605, #14207
+										xhr.status,
+										xhr.statusText
+									);
+								}
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+
+									// Support: IE <=9 only
+									// IE9 has no XHR2 but throws on binary (trac-11426)
+									// For XHR2 non-text, let the caller handle it (gh-2498)
+									( xhr.responseType || "text" ) !== "text"  ||
+									typeof xhr.responseText !== "string" ?
+										{ binary: xhr.response } :
+										{ text: xhr.responseText },
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
+
+				// Support: IE 9 only
+				// Use onreadystatechange to replace onabort
+				// to handle uncaught aborts
+				if ( xhr.onabort !== undefined ) {
+					xhr.onabort = errorCallback;
+				} else {
+					xhr.onreadystatechange = function() {
+
+						// Check readyState before timeout as it changes
+						if ( xhr.readyState === 4 ) {
+
+							// Allow onerror to be called first,
+							// but that will not handle a native abort
+							// Also, save errorCallback to a variable
+							// as xhr.onerror cannot be accessed
+							window.setTimeout( function() {
+								if ( callback ) {
+									errorCallback();
+								}
+							} );
+						}
+					};
+				}
+
+				// Create the abort callback
+				callback = callback( "abort" );
+
+				try {
+
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+	if ( s.crossDomain ) {
+		s.contents.script = false;
+	}
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain or forced-by-attrs requests
+	if ( s.crossDomain || s.scriptAttrs ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery( "<script>" )
+					.attr( s.scriptAttrs || {} )
+					.prop( { charset: s.scriptCharset, src: s.url } )
+					.on( "load error", callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					} );
+
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+	var body = document.implementation.createHTMLDocument( "" ).body;
+	body.innerHTML = "<form></form><form></form>";
+	return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( typeof data !== "string" ) {
+		return [];
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+
+	var base, parsed, scripts;
+
+	if ( !context ) {
+
+		// Stop scripts or inline event handlers from being executed immediately
+		// by using document.implementation
+		if ( support.createHTMLDocument ) {
+			context = document.implementation.createHTMLDocument( "" );
+
+			// Set the base href for the created document
+			// so any parsed elements with URLs
+			// are based on the document's URL (gh-2965)
+			base = context.createElement( "base" );
+			base.href = document.location.href;
+			context.head.appendChild( base );
+		} else {
+			context = document;
+		}
+	}
+
+	parsed = rsingleTag.exec( data );
+	scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = stripAndCollapse( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			if ( typeof props.top === "number" ) {
+				props.top += "px";
+			}
+			if ( typeof props.left === "number" ) {
+				props.left += "px";
+			}
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+
+	// offset() relates an element's border box to the document origin
+	offset: function( options ) {
+
+		// Preserve chaining for setter
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var rect, win,
+			elem = this[ 0 ];
+
+		if ( !elem ) {
+			return;
+		}
+
+		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+		// Support: IE <=11 only
+		// Running getBoundingClientRect on a
+		// disconnected node in IE throws an error
+		if ( !elem.getClientRects().length ) {
+			return { top: 0, left: 0 };
+		}
+
+		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
+		rect = elem.getBoundingClientRect();
+		win = elem.ownerDocument.defaultView;
+		return {
+			top: rect.top + win.pageYOffset,
+			left: rect.left + win.pageXOffset
+		};
+	},
+
+	// position() relates an element's margin box to its offset parent's padding box
+	// This corresponds to the behavior of CSS absolute positioning
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset, doc,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// position:fixed elements are offset from the viewport, which itself always has zero offset
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume position:fixed implies availability of getBoundingClientRect
+			offset = elem.getBoundingClientRect();
+
+		} else {
+			offset = this.offset();
+
+			// Account for the *real* offset parent, which can be the document or its root element
+			// when a statically positioned element is identified
+			doc = elem.ownerDocument;
+			offsetParent = elem.offsetParent || doc.documentElement;
+			while ( offsetParent &&
+				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
+				jQuery.css( offsetParent, "position" ) === "static" ) {
+
+				offsetParent = offsetParent.parentNode;
+			}
+			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
+
+				// Incorporate borders into its offset, since they are outside its content origin
+				parentOffset = jQuery( offsetParent ).offset();
+				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
+				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
+			}
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	// This method will return documentElement in the following cases:
+	// 1) For the element inside the iframe without offsetParent, this method will return
+	//    documentElement of the parent window
+	// 2) For the hidden or detached element
+	// 3) For body or html element, i.e. in case of the html node - it will return itself
+	//
+	// but those exceptions were never presented as a real life use-cases
+	// and might be considered as more preferable results.
+	//
+	// This logic, however, is not guaranteed and can change at any point in the future
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+
+			// Coalesce documents and windows
+			var win;
+			if ( isWindow( elem ) ) {
+				win = elem;
+			} else if ( elem.nodeType === 9 ) {
+				win = elem.defaultView;
+			}
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : win.pageXOffset,
+					top ? val : win.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length );
+	};
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( _i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+		function( defaultExtra, funcName ) {
+
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( isWindow( elem ) ) {
+
+					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+					return funcName.indexOf( "outer" ) === 0 ?
+						elem[ "inner" + name ] :
+						elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable );
+		};
+	} );
+} );
+
+
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( _i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
+	function( _i, name ) {
+
+		// Handle event binding
+		jQuery.fn[ name ] = function( data, fn ) {
+			return arguments.length > 0 ?
+				this.on( name, null, data, fn ) :
+				this.trigger( name );
+		};
+	} );
+
+
+
+
+// Support: Android <=4.0 only
+// Make sure we trim BOM and NBSP
+var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
+// Bind a function to a context, optionally partially applying any
+// arguments.
+// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
+// However, it is not slated for removal any time soon
+jQuery.proxy = function( fn, context ) {
+	var tmp, args, proxy;
+
+	if ( typeof context === "string" ) {
+		tmp = fn[ context ];
+		context = fn;
+		fn = tmp;
+	}
+
+	// Quick check to determine if target is callable, in the spec
+	// this throws a TypeError, but we will just return undefined.
+	if ( !isFunction( fn ) ) {
+		return undefined;
+	}
+
+	// Simulated bind
+	args = slice.call( arguments, 2 );
+	proxy = function() {
+		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+	};
+
+	// Set the guid of unique handler to the same of original handler, so it can be removed
+	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+	return proxy;
+};
+
+jQuery.holdReady = function( hold ) {
+	if ( hold ) {
+		jQuery.readyWait++;
+	} else {
+		jQuery.ready( true );
+	}
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+jQuery.isFunction = isFunction;
+jQuery.isWindow = isWindow;
+jQuery.camelCase = camelCase;
+jQuery.type = toType;
+
+jQuery.now = Date.now;
+
+jQuery.isNumeric = function( obj ) {
+
+	// As of jQuery 3.0, isNumeric is limited to
+	// strings and numbers (primitives or objects)
+	// that can be coerced to finite numbers (gh-2662)
+	var type = jQuery.type( obj );
+	return ( type === "number" || type === "string" ) &&
+
+		// parseFloat NaNs numeric-cast false positives ("")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		!isNaN( obj - parseFloat( obj ) );
+};
+
+jQuery.trim = function( text ) {
+	return text == null ?
+		"" :
+		( text + "" ).replace( rtrim, "" );
+};
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( typeof noGlobal === "undefined" ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/jquery.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/jquery.js
new file mode 100644
index 0000000000000000000000000000000000000000..b0614034ad3a95e4ae9f53c2b015eeb3e8d68bde
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/jquery.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/badge_only.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/badge_only.js
new file mode 100644
index 0000000000000000000000000000000000000000..526d7234b6538603393d419ae2330b3fd6e57ee8
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/badge_only.js
@@ -0,0 +1 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/html5shiv-printshiv.min.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/html5shiv-printshiv.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b43bd062e9689f9f4016931d08e7143d555539d
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/html5shiv-printshiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/html5shiv.min.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/html5shiv.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd1c674f5e3a290a12386156500df3c50903a46b
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/html5shiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/theme.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/theme.js
new file mode 100644
index 0000000000000000000000000000000000000000..1fddb6ee4a60f30b4a4c4b3ad1f1604043f77981
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/js/theme.js
@@ -0,0 +1 @@
+!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),n("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),n("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n('<button class="toctree-expand" title="Open/close menu"></button>'),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e,t){var i=(new Date).getTime(),o=Math.max(0,16-(i-n)),r=window.setTimeout((function(){e(i+o)}),o);return n=i+o,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()}).call(window)},function(n,e){n.exports=jQuery},function(n,e,t){}]);
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/language_data.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/language_data.js
new file mode 100644
index 0000000000000000000000000000000000000000..ebe2f03bf03b7f72481f8f483039ef9b7013f062
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/language_data.js
@@ -0,0 +1,297 @@
+/*
+ * language_data.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * This script contains the language-specific data used by searchtools.js,
+ * namely the list of stopwords, stemmer, scorer and splitter.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
+
+
+/* Non-minified version is copied as a separate JS file, is available */
+
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
+
+
+
+var splitChars = (function() {
+    var result = {};
+    var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
+         1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
+         2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
+         2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
+         3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
+         3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
+         4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
+         8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
+         11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
+         43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
+    var i, j, start, end;
+    for (i = 0; i < singles.length; i++) {
+        result[singles[i]] = true;
+    }
+    var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
+         [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
+         [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
+         [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
+         [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
+         [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
+         [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
+         [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
+         [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
+         [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
+         [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
+         [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
+         [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
+         [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
+         [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
+         [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
+         [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
+         [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
+         [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
+         [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
+         [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
+         [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
+         [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
+         [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
+         [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
+         [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
+         [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
+         [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
+         [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
+         [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
+         [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
+         [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
+         [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
+         [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
+         [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
+         [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
+         [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
+         [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
+         [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
+         [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
+         [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
+         [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
+         [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
+         [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
+         [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
+         [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
+         [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
+         [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
+         [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
+    for (i = 0; i < ranges.length; i++) {
+        start = ranges[i][0];
+        end = ranges[i][1];
+        for (j = start; j <= end; j++) {
+            result[j] = true;
+        }
+    }
+    return result;
+})();
+
+function splitQuery(query) {
+    var result = [];
+    var start = -1;
+    for (var i = 0; i < query.length; i++) {
+        if (splitChars[query.charCodeAt(i)]) {
+            if (start !== -1) {
+                result.push(query.slice(start, i));
+                start = -1;
+            }
+        } else if (start === -1) {
+            start = i;
+        }
+    }
+    if (start !== -1) {
+        result.push(query.slice(start));
+    }
+    return result;
+}
+
+
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/minus.png b/VimbaX/doc/VimbaX_ReleaseNotes/_static/minus.png
new file mode 100644
index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/minus.png differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/plus.png b/VimbaX/doc/VimbaX_ReleaseNotes/_static/plus.png
new file mode 100644
index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d
Binary files /dev/null and b/VimbaX/doc/VimbaX_ReleaseNotes/_static/plus.png differ
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/pygments.css b/VimbaX/doc/VimbaX_ReleaseNotes/_static/pygments.css
new file mode 100644
index 0000000000000000000000000000000000000000..08bec689d3306e6c13d1973f61a01bee9a307e87
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/pygments.css
@@ -0,0 +1,74 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #9C6500 } /* Comment.Preproc */
+.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #E40000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #008400 } /* Generic.Inserted */
+.highlight .go { color: #717171 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #687822 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #767600 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #666666 } /* Literal.Number.Bin */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0000FF } /* Name.Function.Magic */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .vm { color: #19177C } /* Name.Variable.Magic */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/searchtools.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/searchtools.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a44e8582f6eda32047831d454c09eced81622d2
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/searchtools.js
@@ -0,0 +1,525 @@
+/*
+ * searchtools.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for the full-text search.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+if (!Scorer) {
+  /**
+   * Simple result scoring code.
+   */
+  var Scorer = {
+    // Implement the following function to further tweak the score for each result
+    // The function takes a result array [filename, title, anchor, descr, score]
+    // and returns the new score.
+    /*
+    score: function(result) {
+      return result[4];
+    },
+    */
+
+    // query matches the full name of an object
+    objNameMatch: 11,
+    // or matches in the last dotted part of the object name
+    objPartialMatch: 6,
+    // Additive scores depending on the priority of the object
+    objPrio: {0:  15,   // used to be importantResults
+              1:  5,   // used to be objectResults
+              2: -5},  // used to be unimportantResults
+    //  Used when the priority is not in the mapping.
+    objPrioDefault: 0,
+
+    // query found in title
+    title: 15,
+    partialTitle: 7,
+    // query found in terms
+    term: 5,
+    partialTerm: 2
+  };
+}
+
+if (!splitQuery) {
+  function splitQuery(query) {
+    return query.split(/\s+/);
+  }
+}
+
+/**
+ * Search Module
+ */
+var Search = {
+
+  _index : null,
+  _queued_query : null,
+  _pulse_status : -1,
+
+  htmlToText : function(htmlString) {
+      var virtualDocument = document.implementation.createHTMLDocument('virtual');
+      var htmlElement = $(htmlString, virtualDocument);
+      htmlElement.find('.headerlink').remove();
+      docContent = htmlElement.find('[role=main]')[0];
+      if(docContent === undefined) {
+          console.warn("Content block not found. Sphinx search tries to obtain it " +
+                       "via '[role=main]'. Could you check your theme or template.");
+          return "";
+      }
+      return docContent.textContent || docContent.innerText;
+  },
+
+  init : function() {
+      var params = $.getQueryParameters();
+      if (params.q) {
+          var query = params.q[0];
+          $('input[name="q"]')[0].value = query;
+          this.performSearch(query);
+      }
+  },
+
+  loadIndex : function(url) {
+    $.ajax({type: "GET", url: url, data: null,
+            dataType: "script", cache: true,
+            complete: function(jqxhr, textstatus) {
+              if (textstatus != "success") {
+                document.getElementById("searchindexloader").src = url;
+              }
+            }});
+  },
+
+  setIndex : function(index) {
+    var q;
+    this._index = index;
+    if ((q = this._queued_query) !== null) {
+      this._queued_query = null;
+      Search.query(q);
+    }
+  },
+
+  hasIndex : function() {
+      return this._index !== null;
+  },
+
+  deferQuery : function(query) {
+      this._queued_query = query;
+  },
+
+  stopPulse : function() {
+      this._pulse_status = 0;
+  },
+
+  startPulse : function() {
+    if (this._pulse_status >= 0)
+        return;
+    function pulse() {
+      var i;
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      var dotString = '';
+      for (i = 0; i < Search._pulse_status; i++)
+        dotString += '.';
+      Search.dots.text(dotString);
+      if (Search._pulse_status > -1)
+        window.setTimeout(pulse, 500);
+    }
+    pulse();
+  },
+
+  /**
+   * perform a search for something (or wait until index is loaded)
+   */
+  performSearch : function(query) {
+    // create the required interface elements
+    this.out = $('#search-results');
+    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
+    this.dots = $('<span></span>').appendTo(this.title);
+    this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
+    this.output = $('<ul class="search"/>').appendTo(this.out);
+
+    $('#search-progress').text(_('Preparing search...'));
+    this.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (this.hasIndex())
+      this.query(query);
+    else
+      this.deferQuery(query);
+  },
+
+  /**
+   * execute search (requires search index to be loaded)
+   */
+  query : function(query) {
+    var i;
+
+    // stem the searchterms and add them to the correct list
+    var stemmer = new Stemmer();
+    var searchterms = [];
+    var excluded = [];
+    var hlterms = [];
+    var tmp = splitQuery(query);
+    var objectterms = [];
+    for (i = 0; i < tmp.length; i++) {
+      if (tmp[i] !== "") {
+          objectterms.push(tmp[i].toLowerCase());
+      }
+
+      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
+        // skip this "word"
+        continue;
+      }
+      // stem the word
+      var word = stemmer.stemWord(tmp[i].toLowerCase());
+      var toAppend;
+      // select the correct list
+      if (word[0] == '-') {
+        toAppend = excluded;
+        word = word.substr(1);
+      }
+      else {
+        toAppend = searchterms;
+        hlterms.push(tmp[i].toLowerCase());
+      }
+      // only add if not already in the list
+      if (!$u.contains(toAppend, word))
+        toAppend.push(word);
+    }
+    var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
+
+    // console.debug('SEARCH: searching for:');
+    // console.info('required: ', searchterms);
+    // console.info('excluded: ', excluded);
+
+    // prepare search
+    var terms = this._index.terms;
+    var titleterms = this._index.titleterms;
+
+    // array of [filename, title, anchor, descr, score]
+    var results = [];
+    $('#search-progress').empty();
+
+    // lookup as object
+    for (i = 0; i < objectterms.length; i++) {
+      var others = [].concat(objectterms.slice(0, i),
+                             objectterms.slice(i+1, objectterms.length));
+      results = results.concat(this.performObjectSearch(objectterms[i], others));
+    }
+
+    // lookup as search terms in fulltext
+    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
+
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) {
+      for (i = 0; i < results.length; i++)
+        results[i][4] = Scorer.score(results[i]);
+    }
+
+    // now sort the results by score (in opposite order of appearance, since the
+    // display function below uses pop() to retrieve items) and then
+    // alphabetically
+    results.sort(function(a, b) {
+      var left = a[4];
+      var right = b[4];
+      if (left > right) {
+        return 1;
+      } else if (left < right) {
+        return -1;
+      } else {
+        // same score: sort alphabetically
+        left = a[1].toLowerCase();
+        right = b[1].toLowerCase();
+        return (left > right) ? -1 : ((left < right) ? 1 : 0);
+      }
+    });
+
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    //console.info('search results:', Search.lastresults);
+
+    // print the results
+    var resultCount = results.length;
+    function displayNextItem() {
+      // results left, load the summary and display it
+      if (results.length) {
+        var item = results.pop();
+        var listItem = $('<li></li>');
+        var requestUrl = "";
+        var linkUrl = "";
+        if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
+          // dirhtml builder
+          var dirname = item[0] + '/';
+          if (dirname.match(/\/index\/$/)) {
+            dirname = dirname.substring(0, dirname.length-6);
+          } else if (dirname == 'index/') {
+            dirname = '';
+          }
+          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
+          linkUrl = requestUrl;
+
+        } else {
+          // normal html builders
+          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+          linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
+        }
+        listItem.append($('<a/>').attr('href',
+            linkUrl +
+            highlightstring + item[2]).html(item[1]));
+        if (item[3]) {
+          listItem.append($('<span> (' + item[3] + ')</span>'));
+          Search.output.append(listItem);
+          setTimeout(function() {
+            displayNextItem();
+          }, 5);
+        } else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) {
+          $.ajax({url: requestUrl,
+                  dataType: "text",
+                  complete: function(jqxhr, textstatus) {
+                    var data = jqxhr.responseText;
+                    if (data !== '' && data !== undefined) {
+                      var summary = Search.makeSearchSummary(data, searchterms, hlterms);
+                      if (summary) {
+                        listItem.append(summary);
+                      }
+                    }
+                    Search.output.append(listItem);
+                    setTimeout(function() {
+                      displayNextItem();
+                    }, 5);
+                  }});
+        } else {
+          // just display title
+          Search.output.append(listItem);
+          setTimeout(function() {
+            displayNextItem();
+          }, 5);
+        }
+      }
+      // search finished, update title and status message
+      else {
+        Search.stopPulse();
+        Search.title.text(_('Search Results'));
+        if (!resultCount)
+          Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
+        else
+            Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
+        Search.status.fadeIn(500);
+      }
+    }
+    displayNextItem();
+  },
+
+  /**
+   * search for object names
+   */
+  performObjectSearch : function(object, otherterms) {
+    var filenames = this._index.filenames;
+    var docnames = this._index.docnames;
+    var objects = this._index.objects;
+    var objnames = this._index.objnames;
+    var titles = this._index.titles;
+
+    var i;
+    var results = [];
+
+    for (var prefix in objects) {
+      for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
+        var match = objects[prefix][iMatch];
+        var name = match[4];
+        var fullname = (prefix ? prefix + '.' : '') + name;
+        var fullnameLower = fullname.toLowerCase()
+        if (fullnameLower.indexOf(object) > -1) {
+          var score = 0;
+          var parts = fullnameLower.split('.');
+          // check for different match types: exact matches of full name or
+          // "last name" (i.e. last dotted part)
+          if (fullnameLower == object || parts[parts.length - 1] == object) {
+            score += Scorer.objNameMatch;
+          // matches in last name
+          } else if (parts[parts.length - 1].indexOf(object) > -1) {
+            score += Scorer.objPartialMatch;
+          }
+          var objname = objnames[match[1]][2];
+          var title = titles[match[0]];
+          // If more than one term searched for, we require other words to be
+          // found in the name/title/description
+          if (otherterms.length > 0) {
+            var haystack = (prefix + ' ' + name + ' ' +
+                            objname + ' ' + title).toLowerCase();
+            var allfound = true;
+            for (i = 0; i < otherterms.length; i++) {
+              if (haystack.indexOf(otherterms[i]) == -1) {
+                allfound = false;
+                break;
+              }
+            }
+            if (!allfound) {
+              continue;
+            }
+          }
+          var descr = objname + _(', in ') + title;
+
+          var anchor = match[3];
+          if (anchor === '')
+            anchor = fullname;
+          else if (anchor == '-')
+            anchor = objnames[match[1]][1] + '-' + fullname;
+          // add custom score for some objects according to scorer
+          if (Scorer.objPrio.hasOwnProperty(match[2])) {
+            score += Scorer.objPrio[match[2]];
+          } else {
+            score += Scorer.objPrioDefault;
+          }
+          results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
+        }
+      }
+    }
+
+    return results;
+  },
+
+  /**
+   * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+   */
+  escapeRegExp : function(string) {
+    return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+  },
+
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch : function(searchterms, excluded, terms, titleterms) {
+    var docnames = this._index.docnames;
+    var filenames = this._index.filenames;
+    var titles = this._index.titles;
+
+    var i, j, file;
+    var fileMap = {};
+    var scoreMap = {};
+    var results = [];
+
+    // perform the search on the required terms
+    for (i = 0; i < searchterms.length; i++) {
+      var word = searchterms[i];
+      var files = [];
+      var _o = [
+        {files: terms[word], score: Scorer.term},
+        {files: titleterms[word], score: Scorer.title}
+      ];
+      // add support for partial matches
+      if (word.length > 2) {
+        var word_regex = this.escapeRegExp(word);
+        for (var w in terms) {
+          if (w.match(word_regex) && !terms[word]) {
+            _o.push({files: terms[w], score: Scorer.partialTerm})
+          }
+        }
+        for (var w in titleterms) {
+          if (w.match(word_regex) && !titleterms[word]) {
+              _o.push({files: titleterms[w], score: Scorer.partialTitle})
+          }
+        }
+      }
+
+      // no match but word was a required one
+      if ($u.every(_o, function(o){return o.files === undefined;})) {
+        break;
+      }
+      // found search word in contents
+      $u.each(_o, function(o) {
+        var _files = o.files;
+        if (_files === undefined)
+          return
+
+        if (_files.length === undefined)
+          _files = [_files];
+        files = files.concat(_files);
+
+        // set score for the word in each file to Scorer.term
+        for (j = 0; j < _files.length; j++) {
+          file = _files[j];
+          if (!(file in scoreMap))
+            scoreMap[file] = {};
+          scoreMap[file][word] = o.score;
+        }
+      });
+
+      // create the mapping
+      for (j = 0; j < files.length; j++) {
+        file = files[j];
+        if (file in fileMap && fileMap[file].indexOf(word) === -1)
+          fileMap[file].push(word);
+        else
+          fileMap[file] = [word];
+      }
+    }
+
+    // now check if the files don't contain excluded terms
+    for (file in fileMap) {
+      var valid = true;
+
+      // check if all requirements are matched
+      var filteredTermCount = // as search terms with length < 3 are discarded: ignore
+        searchterms.filter(function(term){return term.length > 2}).length
+      if (
+        fileMap[file].length != searchterms.length &&
+        fileMap[file].length != filteredTermCount
+      ) continue;
+
+      // ensure that none of the excluded terms is in the search result
+      for (i = 0; i < excluded.length; i++) {
+        if (terms[excluded[i]] == file ||
+            titleterms[excluded[i]] == file ||
+            $u.contains(terms[excluded[i]] || [], file) ||
+            $u.contains(titleterms[excluded[i]] || [], file)) {
+          valid = false;
+          break;
+        }
+      }
+
+      // if we have still a valid result we can add it to the result list
+      if (valid) {
+        // select one (max) score for the file.
+        // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
+        var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
+        results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
+      }
+    }
+    return results;
+  },
+
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words, hlwords is the list of normal, unstemmed
+   * words. the first one is used to find the occurrence, the
+   * latter for highlighting it.
+   */
+  makeSearchSummary : function(htmlText, keywords, hlwords) {
+    var text = Search.htmlToText(htmlText);
+    if (text == "") {
+      return null;
+    }
+    var textLower = text.toLowerCase();
+    var start = 0;
+    $.each(keywords, function() {
+      var i = textLower.indexOf(this.toLowerCase());
+      if (i > -1)
+        start = i;
+    });
+    start = Math.max(start - 120, 0);
+    var excerpt = ((start > 0) ? '...' : '') +
+      $.trim(text.substr(start, 240)) +
+      ((start + 240 - text.length) ? '...' : '');
+    var rv = $('<p class="context"></p>').text(excerpt);
+    $.each(hlwords, function() {
+      rv = rv.highlightText(this, 'highlighted');
+    });
+    return rv;
+  }
+};
+
+$(document).ready(function() {
+  Search.init();
+});
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/underscore-1.13.1.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/underscore-1.13.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..ffd77af9648a47d389f2d6976d4aa1c44d7ce7ce
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/underscore-1.13.1.js
@@ -0,0 +1,2042 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define('underscore', factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
+    var current = global._;
+    var exports = global._ = factory();
+    exports.noConflict = function () { global._ = current; return exports; };
+  }()));
+}(this, (function () {
+  //     Underscore.js 1.13.1
+  //     https://underscorejs.org
+  //     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
+  //     Underscore may be freely distributed under the MIT license.
+
+  // Current version.
+  var VERSION = '1.13.1';
+
+  // Establish the root object, `window` (`self`) in the browser, `global`
+  // on the server, or `this` in some virtual machines. We use `self`
+  // instead of `window` for `WebWorker` support.
+  var root = typeof self == 'object' && self.self === self && self ||
+            typeof global == 'object' && global.global === global && global ||
+            Function('return this')() ||
+            {};
+
+  // Save bytes in the minified (but not gzipped) version:
+  var ArrayProto = Array.prototype, ObjProto = Object.prototype;
+  var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
+
+  // Create quick reference variables for speed access to core prototypes.
+  var push = ArrayProto.push,
+      slice = ArrayProto.slice,
+      toString = ObjProto.toString,
+      hasOwnProperty = ObjProto.hasOwnProperty;
+
+  // Modern feature detection.
+  var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
+      supportsDataView = typeof DataView !== 'undefined';
+
+  // All **ECMAScript 5+** native function implementations that we hope to use
+  // are declared here.
+  var nativeIsArray = Array.isArray,
+      nativeKeys = Object.keys,
+      nativeCreate = Object.create,
+      nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;
+
+  // Create references to these builtin functions because we override them.
+  var _isNaN = isNaN,
+      _isFinite = isFinite;
+
+  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
+  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
+    'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
+
+  // The largest integer that can be represented exactly.
+  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
+
+  // Some functions take a variable number of arguments, or a few expected
+  // arguments at the beginning and then a variable number of values to operate
+  // on. This helper accumulates all remaining arguments past the function’s
+  // argument length (or an explicit `startIndex`), into an array that becomes
+  // the last argument. Similar to ES6’s "rest parameter".
+  function restArguments(func, startIndex) {
+    startIndex = startIndex == null ? func.length - 1 : +startIndex;
+    return function() {
+      var length = Math.max(arguments.length - startIndex, 0),
+          rest = Array(length),
+          index = 0;
+      for (; index < length; index++) {
+        rest[index] = arguments[index + startIndex];
+      }
+      switch (startIndex) {
+        case 0: return func.call(this, rest);
+        case 1: return func.call(this, arguments[0], rest);
+        case 2: return func.call(this, arguments[0], arguments[1], rest);
+      }
+      var args = Array(startIndex + 1);
+      for (index = 0; index < startIndex; index++) {
+        args[index] = arguments[index];
+      }
+      args[startIndex] = rest;
+      return func.apply(this, args);
+    };
+  }
+
+  // Is a given variable an object?
+  function isObject(obj) {
+    var type = typeof obj;
+    return type === 'function' || type === 'object' && !!obj;
+  }
+
+  // Is a given value equal to null?
+  function isNull(obj) {
+    return obj === null;
+  }
+
+  // Is a given variable undefined?
+  function isUndefined(obj) {
+    return obj === void 0;
+  }
+
+  // Is a given value a boolean?
+  function isBoolean(obj) {
+    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+  }
+
+  // Is a given value a DOM element?
+  function isElement(obj) {
+    return !!(obj && obj.nodeType === 1);
+  }
+
+  // Internal function for creating a `toString`-based type tester.
+  function tagTester(name) {
+    var tag = '[object ' + name + ']';
+    return function(obj) {
+      return toString.call(obj) === tag;
+    };
+  }
+
+  var isString = tagTester('String');
+
+  var isNumber = tagTester('Number');
+
+  var isDate = tagTester('Date');
+
+  var isRegExp = tagTester('RegExp');
+
+  var isError = tagTester('Error');
+
+  var isSymbol = tagTester('Symbol');
+
+  var isArrayBuffer = tagTester('ArrayBuffer');
+
+  var isFunction = tagTester('Function');
+
+  // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old
+  // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
+  var nodelist = root.document && root.document.childNodes;
+  if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
+    isFunction = function(obj) {
+      return typeof obj == 'function' || false;
+    };
+  }
+
+  var isFunction$1 = isFunction;
+
+  var hasObjectTag = tagTester('Object');
+
+  // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.
+  // In IE 11, the most common among them, this problem also applies to
+  // `Map`, `WeakMap` and `Set`.
+  var hasStringTagBug = (
+        supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))
+      ),
+      isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));
+
+  var isDataView = tagTester('DataView');
+
+  // In IE 10 - Edge 13, we need a different heuristic
+  // to determine whether an object is a `DataView`.
+  function ie10IsDataView(obj) {
+    return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);
+  }
+
+  var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);
+
+  // Is a given value an array?
+  // Delegates to ECMA5's native `Array.isArray`.
+  var isArray = nativeIsArray || tagTester('Array');
+
+  // Internal function to check whether `key` is an own property name of `obj`.
+  function has$1(obj, key) {
+    return obj != null && hasOwnProperty.call(obj, key);
+  }
+
+  var isArguments = tagTester('Arguments');
+
+  // Define a fallback version of the method in browsers (ahem, IE < 9), where
+  // there isn't any inspectable "Arguments" type.
+  (function() {
+    if (!isArguments(arguments)) {
+      isArguments = function(obj) {
+        return has$1(obj, 'callee');
+      };
+    }
+  }());
+
+  var isArguments$1 = isArguments;
+
+  // Is a given object a finite number?
+  function isFinite$1(obj) {
+    return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));
+  }
+
+  // Is the given value `NaN`?
+  function isNaN$1(obj) {
+    return isNumber(obj) && _isNaN(obj);
+  }
+
+  // Predicate-generating function. Often useful outside of Underscore.
+  function constant(value) {
+    return function() {
+      return value;
+    };
+  }
+
+  // Common internal logic for `isArrayLike` and `isBufferLike`.
+  function createSizePropertyCheck(getSizeProperty) {
+    return function(collection) {
+      var sizeProperty = getSizeProperty(collection);
+      return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;
+    }
+  }
+
+  // Internal helper to generate a function to obtain property `key` from `obj`.
+  function shallowProperty(key) {
+    return function(obj) {
+      return obj == null ? void 0 : obj[key];
+    };
+  }
+
+  // Internal helper to obtain the `byteLength` property of an object.
+  var getByteLength = shallowProperty('byteLength');
+
+  // Internal helper to determine whether we should spend extensive checks against
+  // `ArrayBuffer` et al.
+  var isBufferLike = createSizePropertyCheck(getByteLength);
+
+  // Is a given value a typed array?
+  var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;
+  function isTypedArray(obj) {
+    // `ArrayBuffer.isView` is the most future-proof, so use it when available.
+    // Otherwise, fall back on the above regular expression.
+    return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :
+                  isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));
+  }
+
+  var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);
+
+  // Internal helper to obtain the `length` property of an object.
+  var getLength = shallowProperty('length');
+
+  // Internal helper to create a simple lookup structure.
+  // `collectNonEnumProps` used to depend on `_.contains`, but this led to
+  // circular imports. `emulatedSet` is a one-off solution that only works for
+  // arrays of strings.
+  function emulatedSet(keys) {
+    var hash = {};
+    for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;
+    return {
+      contains: function(key) { return hash[key]; },
+      push: function(key) {
+        hash[key] = true;
+        return keys.push(key);
+      }
+    };
+  }
+
+  // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
+  // be iterated by `for key in ...` and thus missed. Extends `keys` in place if
+  // needed.
+  function collectNonEnumProps(obj, keys) {
+    keys = emulatedSet(keys);
+    var nonEnumIdx = nonEnumerableProps.length;
+    var constructor = obj.constructor;
+    var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;
+
+    // Constructor is a special case.
+    var prop = 'constructor';
+    if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);
+
+    while (nonEnumIdx--) {
+      prop = nonEnumerableProps[nonEnumIdx];
+      if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {
+        keys.push(prop);
+      }
+    }
+  }
+
+  // Retrieve the names of an object's own properties.
+  // Delegates to **ECMAScript 5**'s native `Object.keys`.
+  function keys(obj) {
+    if (!isObject(obj)) return [];
+    if (nativeKeys) return nativeKeys(obj);
+    var keys = [];
+    for (var key in obj) if (has$1(obj, key)) keys.push(key);
+    // Ahem, IE < 9.
+    if (hasEnumBug) collectNonEnumProps(obj, keys);
+    return keys;
+  }
+
+  // Is a given array, string, or object empty?
+  // An "empty" object has no enumerable own-properties.
+  function isEmpty(obj) {
+    if (obj == null) return true;
+    // Skip the more expensive `toString`-based type checks if `obj` has no
+    // `.length`.
+    var length = getLength(obj);
+    if (typeof length == 'number' && (
+      isArray(obj) || isString(obj) || isArguments$1(obj)
+    )) return length === 0;
+    return getLength(keys(obj)) === 0;
+  }
+
+  // Returns whether an object has a given set of `key:value` pairs.
+  function isMatch(object, attrs) {
+    var _keys = keys(attrs), length = _keys.length;
+    if (object == null) return !length;
+    var obj = Object(object);
+    for (var i = 0; i < length; i++) {
+      var key = _keys[i];
+      if (attrs[key] !== obj[key] || !(key in obj)) return false;
+    }
+    return true;
+  }
+
+  // If Underscore is called as a function, it returns a wrapped object that can
+  // be used OO-style. This wrapper holds altered versions of all functions added
+  // through `_.mixin`. Wrapped objects may be chained.
+  function _$1(obj) {
+    if (obj instanceof _$1) return obj;
+    if (!(this instanceof _$1)) return new _$1(obj);
+    this._wrapped = obj;
+  }
+
+  _$1.VERSION = VERSION;
+
+  // Extracts the result from a wrapped and chained object.
+  _$1.prototype.value = function() {
+    return this._wrapped;
+  };
+
+  // Provide unwrapping proxies for some methods used in engine operations
+  // such as arithmetic and JSON stringification.
+  _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;
+
+  _$1.prototype.toString = function() {
+    return String(this._wrapped);
+  };
+
+  // Internal function to wrap or shallow-copy an ArrayBuffer,
+  // typed array or DataView to a new view, reusing the buffer.
+  function toBufferView(bufferSource) {
+    return new Uint8Array(
+      bufferSource.buffer || bufferSource,
+      bufferSource.byteOffset || 0,
+      getByteLength(bufferSource)
+    );
+  }
+
+  // We use this string twice, so give it a name for minification.
+  var tagDataView = '[object DataView]';
+
+  // Internal recursive comparison function for `_.isEqual`.
+  function eq(a, b, aStack, bStack) {
+    // Identical objects are equal. `0 === -0`, but they aren't identical.
+    // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
+    if (a === b) return a !== 0 || 1 / a === 1 / b;
+    // `null` or `undefined` only equal to itself (strict comparison).
+    if (a == null || b == null) return false;
+    // `NaN`s are equivalent, but non-reflexive.
+    if (a !== a) return b !== b;
+    // Exhaust primitive checks
+    var type = typeof a;
+    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
+    return deepEq(a, b, aStack, bStack);
+  }
+
+  // Internal recursive comparison function for `_.isEqual`.
+  function deepEq(a, b, aStack, bStack) {
+    // Unwrap any wrapped objects.
+    if (a instanceof _$1) a = a._wrapped;
+    if (b instanceof _$1) b = b._wrapped;
+    // Compare `[[Class]]` names.
+    var className = toString.call(a);
+    if (className !== toString.call(b)) return false;
+    // Work around a bug in IE 10 - Edge 13.
+    if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {
+      if (!isDataView$1(b)) return false;
+      className = tagDataView;
+    }
+    switch (className) {
+      // These types are compared by value.
+      case '[object RegExp]':
+        // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+      case '[object String]':
+        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+        // equivalent to `new String("5")`.
+        return '' + a === '' + b;
+      case '[object Number]':
+        // `NaN`s are equivalent, but non-reflexive.
+        // Object(NaN) is equivalent to NaN.
+        if (+a !== +a) return +b !== +b;
+        // An `egal` comparison is performed for other numeric values.
+        return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+      case '[object Date]':
+      case '[object Boolean]':
+        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+        // millisecond representations. Note that invalid dates with millisecond representations
+        // of `NaN` are not equivalent.
+        return +a === +b;
+      case '[object Symbol]':
+        return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
+      case '[object ArrayBuffer]':
+      case tagDataView:
+        // Coerce to typed array so we can fall through.
+        return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);
+    }
+
+    var areArrays = className === '[object Array]';
+    if (!areArrays && isTypedArray$1(a)) {
+        var byteLength = getByteLength(a);
+        if (byteLength !== getByteLength(b)) return false;
+        if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;
+        areArrays = true;
+    }
+    if (!areArrays) {
+      if (typeof a != 'object' || typeof b != 'object') return false;
+
+      // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+      // from different frames are.
+      var aCtor = a.constructor, bCtor = b.constructor;
+      if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&
+                               isFunction$1(bCtor) && bCtor instanceof bCtor)
+                          && ('constructor' in a && 'constructor' in b)) {
+        return false;
+      }
+    }
+    // Assume equality for cyclic structures. The algorithm for detecting cyclic
+    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+
+    // Initializing stack of traversed objects.
+    // It's done here since we only need them for objects and arrays comparison.
+    aStack = aStack || [];
+    bStack = bStack || [];
+    var length = aStack.length;
+    while (length--) {
+      // Linear search. Performance is inversely proportional to the number of
+      // unique nested structures.
+      if (aStack[length] === a) return bStack[length] === b;
+    }
+
+    // Add the first object to the stack of traversed objects.
+    aStack.push(a);
+    bStack.push(b);
+
+    // Recursively compare objects and arrays.
+    if (areArrays) {
+      // Compare array lengths to determine if a deep comparison is necessary.
+      length = a.length;
+      if (length !== b.length) return false;
+      // Deep compare the contents, ignoring non-numeric properties.
+      while (length--) {
+        if (!eq(a[length], b[length], aStack, bStack)) return false;
+      }
+    } else {
+      // Deep compare objects.
+      var _keys = keys(a), key;
+      length = _keys.length;
+      // Ensure that both objects contain the same number of properties before comparing deep equality.
+      if (keys(b).length !== length) return false;
+      while (length--) {
+        // Deep compare each member
+        key = _keys[length];
+        if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
+      }
+    }
+    // Remove the first object from the stack of traversed objects.
+    aStack.pop();
+    bStack.pop();
+    return true;
+  }
+
+  // Perform a deep comparison to check if two objects are equal.
+  function isEqual(a, b) {
+    return eq(a, b);
+  }
+
+  // Retrieve all the enumerable property names of an object.
+  function allKeys(obj) {
+    if (!isObject(obj)) return [];
+    var keys = [];
+    for (var key in obj) keys.push(key);
+    // Ahem, IE < 9.
+    if (hasEnumBug) collectNonEnumProps(obj, keys);
+    return keys;
+  }
+
+  // Since the regular `Object.prototype.toString` type tests don't work for
+  // some types in IE 11, we use a fingerprinting heuristic instead, based
+  // on the methods. It's not great, but it's the best we got.
+  // The fingerprint method lists are defined below.
+  function ie11fingerprint(methods) {
+    var length = getLength(methods);
+    return function(obj) {
+      if (obj == null) return false;
+      // `Map`, `WeakMap` and `Set` have no enumerable keys.
+      var keys = allKeys(obj);
+      if (getLength(keys)) return false;
+      for (var i = 0; i < length; i++) {
+        if (!isFunction$1(obj[methods[i]])) return false;
+      }
+      // If we are testing against `WeakMap`, we need to ensure that
+      // `obj` doesn't have a `forEach` method in order to distinguish
+      // it from a regular `Map`.
+      return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);
+    };
+  }
+
+  // In the interest of compact minification, we write
+  // each string in the fingerprints only once.
+  var forEachName = 'forEach',
+      hasName = 'has',
+      commonInit = ['clear', 'delete'],
+      mapTail = ['get', hasName, 'set'];
+
+  // `Map`, `WeakMap` and `Set` each have slightly different
+  // combinations of the above sublists.
+  var mapMethods = commonInit.concat(forEachName, mapTail),
+      weakMapMethods = commonInit.concat(mapTail),
+      setMethods = ['add'].concat(commonInit, forEachName, hasName);
+
+  var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');
+
+  var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');
+
+  var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');
+
+  var isWeakSet = tagTester('WeakSet');
+
+  // Retrieve the values of an object's properties.
+  function values(obj) {
+    var _keys = keys(obj);
+    var length = _keys.length;
+    var values = Array(length);
+    for (var i = 0; i < length; i++) {
+      values[i] = obj[_keys[i]];
+    }
+    return values;
+  }
+
+  // Convert an object into a list of `[key, value]` pairs.
+  // The opposite of `_.object` with one argument.
+  function pairs(obj) {
+    var _keys = keys(obj);
+    var length = _keys.length;
+    var pairs = Array(length);
+    for (var i = 0; i < length; i++) {
+      pairs[i] = [_keys[i], obj[_keys[i]]];
+    }
+    return pairs;
+  }
+
+  // Invert the keys and values of an object. The values must be serializable.
+  function invert(obj) {
+    var result = {};
+    var _keys = keys(obj);
+    for (var i = 0, length = _keys.length; i < length; i++) {
+      result[obj[_keys[i]]] = _keys[i];
+    }
+    return result;
+  }
+
+  // Return a sorted list of the function names available on the object.
+  function functions(obj) {
+    var names = [];
+    for (var key in obj) {
+      if (isFunction$1(obj[key])) names.push(key);
+    }
+    return names.sort();
+  }
+
+  // An internal function for creating assigner functions.
+  function createAssigner(keysFunc, defaults) {
+    return function(obj) {
+      var length = arguments.length;
+      if (defaults) obj = Object(obj);
+      if (length < 2 || obj == null) return obj;
+      for (var index = 1; index < length; index++) {
+        var source = arguments[index],
+            keys = keysFunc(source),
+            l = keys.length;
+        for (var i = 0; i < l; i++) {
+          var key = keys[i];
+          if (!defaults || obj[key] === void 0) obj[key] = source[key];
+        }
+      }
+      return obj;
+    };
+  }
+
+  // Extend a given object with all the properties in passed-in object(s).
+  var extend = createAssigner(allKeys);
+
+  // Assigns a given object with all the own properties in the passed-in
+  // object(s).
+  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+  var extendOwn = createAssigner(keys);
+
+  // Fill in a given object with default properties.
+  var defaults = createAssigner(allKeys, true);
+
+  // Create a naked function reference for surrogate-prototype-swapping.
+  function ctor() {
+    return function(){};
+  }
+
+  // An internal function for creating a new object that inherits from another.
+  function baseCreate(prototype) {
+    if (!isObject(prototype)) return {};
+    if (nativeCreate) return nativeCreate(prototype);
+    var Ctor = ctor();
+    Ctor.prototype = prototype;
+    var result = new Ctor;
+    Ctor.prototype = null;
+    return result;
+  }
+
+  // Creates an object that inherits from the given prototype object.
+  // If additional properties are provided then they will be added to the
+  // created object.
+  function create(prototype, props) {
+    var result = baseCreate(prototype);
+    if (props) extendOwn(result, props);
+    return result;
+  }
+
+  // Create a (shallow-cloned) duplicate of an object.
+  function clone(obj) {
+    if (!isObject(obj)) return obj;
+    return isArray(obj) ? obj.slice() : extend({}, obj);
+  }
+
+  // Invokes `interceptor` with the `obj` and then returns `obj`.
+  // The primary purpose of this method is to "tap into" a method chain, in
+  // order to perform operations on intermediate results within the chain.
+  function tap(obj, interceptor) {
+    interceptor(obj);
+    return obj;
+  }
+
+  // Normalize a (deep) property `path` to array.
+  // Like `_.iteratee`, this function can be customized.
+  function toPath$1(path) {
+    return isArray(path) ? path : [path];
+  }
+  _$1.toPath = toPath$1;
+
+  // Internal wrapper for `_.toPath` to enable minification.
+  // Similar to `cb` for `_.iteratee`.
+  function toPath(path) {
+    return _$1.toPath(path);
+  }
+
+  // Internal function to obtain a nested property in `obj` along `path`.
+  function deepGet(obj, path) {
+    var length = path.length;
+    for (var i = 0; i < length; i++) {
+      if (obj == null) return void 0;
+      obj = obj[path[i]];
+    }
+    return length ? obj : void 0;
+  }
+
+  // Get the value of the (deep) property on `path` from `object`.
+  // If any property in `path` does not exist or if the value is
+  // `undefined`, return `defaultValue` instead.
+  // The `path` is normalized through `_.toPath`.
+  function get(object, path, defaultValue) {
+    var value = deepGet(object, toPath(path));
+    return isUndefined(value) ? defaultValue : value;
+  }
+
+  // Shortcut function for checking if an object has a given property directly on
+  // itself (in other words, not on a prototype). Unlike the internal `has`
+  // function, this public version can also traverse nested properties.
+  function has(obj, path) {
+    path = toPath(path);
+    var length = path.length;
+    for (var i = 0; i < length; i++) {
+      var key = path[i];
+      if (!has$1(obj, key)) return false;
+      obj = obj[key];
+    }
+    return !!length;
+  }
+
+  // Keep the identity function around for default iteratees.
+  function identity(value) {
+    return value;
+  }
+
+  // Returns a predicate for checking whether an object has a given set of
+  // `key:value` pairs.
+  function matcher(attrs) {
+    attrs = extendOwn({}, attrs);
+    return function(obj) {
+      return isMatch(obj, attrs);
+    };
+  }
+
+  // Creates a function that, when passed an object, will traverse that object’s
+  // properties down the given `path`, specified as an array of keys or indices.
+  function property(path) {
+    path = toPath(path);
+    return function(obj) {
+      return deepGet(obj, path);
+    };
+  }
+
+  // Internal function that returns an efficient (for current engines) version
+  // of the passed-in callback, to be repeatedly applied in other Underscore
+  // functions.
+  function optimizeCb(func, context, argCount) {
+    if (context === void 0) return func;
+    switch (argCount == null ? 3 : argCount) {
+      case 1: return function(value) {
+        return func.call(context, value);
+      };
+      // The 2-argument case is omitted because we’re not using it.
+      case 3: return function(value, index, collection) {
+        return func.call(context, value, index, collection);
+      };
+      case 4: return function(accumulator, value, index, collection) {
+        return func.call(context, accumulator, value, index, collection);
+      };
+    }
+    return function() {
+      return func.apply(context, arguments);
+    };
+  }
+
+  // An internal function to generate callbacks that can be applied to each
+  // element in a collection, returning the desired result — either `_.identity`,
+  // an arbitrary callback, a property matcher, or a property accessor.
+  function baseIteratee(value, context, argCount) {
+    if (value == null) return identity;
+    if (isFunction$1(value)) return optimizeCb(value, context, argCount);
+    if (isObject(value) && !isArray(value)) return matcher(value);
+    return property(value);
+  }
+
+  // External wrapper for our callback generator. Users may customize
+  // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
+  // This abstraction hides the internal-only `argCount` argument.
+  function iteratee(value, context) {
+    return baseIteratee(value, context, Infinity);
+  }
+  _$1.iteratee = iteratee;
+
+  // The function we call internally to generate a callback. It invokes
+  // `_.iteratee` if overridden, otherwise `baseIteratee`.
+  function cb(value, context, argCount) {
+    if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);
+    return baseIteratee(value, context, argCount);
+  }
+
+  // Returns the results of applying the `iteratee` to each element of `obj`.
+  // In contrast to `_.map` it returns an object.
+  function mapObject(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    var _keys = keys(obj),
+        length = _keys.length,
+        results = {};
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys[index];
+      results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
+    }
+    return results;
+  }
+
+  // Predicate-generating function. Often useful outside of Underscore.
+  function noop(){}
+
+  // Generates a function for a given object that returns a given property.
+  function propertyOf(obj) {
+    if (obj == null) return noop;
+    return function(path) {
+      return get(obj, path);
+    };
+  }
+
+  // Run a function **n** times.
+  function times(n, iteratee, context) {
+    var accum = Array(Math.max(0, n));
+    iteratee = optimizeCb(iteratee, context, 1);
+    for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+    return accum;
+  }
+
+  // Return a random integer between `min` and `max` (inclusive).
+  function random(min, max) {
+    if (max == null) {
+      max = min;
+      min = 0;
+    }
+    return min + Math.floor(Math.random() * (max - min + 1));
+  }
+
+  // A (possibly faster) way to get the current timestamp as an integer.
+  var now = Date.now || function() {
+    return new Date().getTime();
+  };
+
+  // Internal helper to generate functions for escaping and unescaping strings
+  // to/from HTML interpolation.
+  function createEscaper(map) {
+    var escaper = function(match) {
+      return map[match];
+    };
+    // Regexes for identifying a key that needs to be escaped.
+    var source = '(?:' + keys(map).join('|') + ')';
+    var testRegexp = RegExp(source);
+    var replaceRegexp = RegExp(source, 'g');
+    return function(string) {
+      string = string == null ? '' : '' + string;
+      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+    };
+  }
+
+  // Internal list of HTML entities for escaping.
+  var escapeMap = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#x27;',
+    '`': '&#x60;'
+  };
+
+  // Function for escaping strings to HTML interpolation.
+  var _escape = createEscaper(escapeMap);
+
+  // Internal list of HTML entities for unescaping.
+  var unescapeMap = invert(escapeMap);
+
+  // Function for unescaping strings from HTML interpolation.
+  var _unescape = createEscaper(unescapeMap);
+
+  // By default, Underscore uses ERB-style template delimiters. Change the
+  // following template settings to use alternative delimiters.
+  var templateSettings = _$1.templateSettings = {
+    evaluate: /<%([\s\S]+?)%>/g,
+    interpolate: /<%=([\s\S]+?)%>/g,
+    escape: /<%-([\s\S]+?)%>/g
+  };
+
+  // When customizing `_.templateSettings`, if you don't want to define an
+  // interpolation, evaluation or escaping regex, we need one that is
+  // guaranteed not to match.
+  var noMatch = /(.)^/;
+
+  // Certain characters need to be escaped so that they can be put into a
+  // string literal.
+  var escapes = {
+    "'": "'",
+    '\\': '\\',
+    '\r': 'r',
+    '\n': 'n',
+    '\u2028': 'u2028',
+    '\u2029': 'u2029'
+  };
+
+  var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
+
+  function escapeChar(match) {
+    return '\\' + escapes[match];
+  }
+
+  // In order to prevent third-party code injection through
+  // `_.templateSettings.variable`, we test it against the following regular
+  // expression. It is intentionally a bit more liberal than just matching valid
+  // identifiers, but still prevents possible loopholes through defaults or
+  // destructuring assignment.
+  var bareIdentifier = /^\s*(\w|\$)+\s*$/;
+
+  // JavaScript micro-templating, similar to John Resig's implementation.
+  // Underscore templating handles arbitrary delimiters, preserves whitespace,
+  // and correctly escapes quotes within interpolated code.
+  // NB: `oldSettings` only exists for backwards compatibility.
+  function template(text, settings, oldSettings) {
+    if (!settings && oldSettings) settings = oldSettings;
+    settings = defaults({}, settings, _$1.templateSettings);
+
+    // Combine delimiters into one regular expression via alternation.
+    var matcher = RegExp([
+      (settings.escape || noMatch).source,
+      (settings.interpolate || noMatch).source,
+      (settings.evaluate || noMatch).source
+    ].join('|') + '|$', 'g');
+
+    // Compile the template source, escaping string literals appropriately.
+    var index = 0;
+    var source = "__p+='";
+    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+      source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
+      index = offset + match.length;
+
+      if (escape) {
+        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+      } else if (interpolate) {
+        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+      } else if (evaluate) {
+        source += "';\n" + evaluate + "\n__p+='";
+      }
+
+      // Adobe VMs need the match returned to produce the correct offset.
+      return match;
+    });
+    source += "';\n";
+
+    var argument = settings.variable;
+    if (argument) {
+      // Insure against third-party code injection. (CVE-2021-23358)
+      if (!bareIdentifier.test(argument)) throw new Error(
+        'variable is not a bare identifier: ' + argument
+      );
+    } else {
+      // If a variable is not specified, place data values in local scope.
+      source = 'with(obj||{}){\n' + source + '}\n';
+      argument = 'obj';
+    }
+
+    source = "var __t,__p='',__j=Array.prototype.join," +
+      "print=function(){__p+=__j.call(arguments,'');};\n" +
+      source + 'return __p;\n';
+
+    var render;
+    try {
+      render = new Function(argument, '_', source);
+    } catch (e) {
+      e.source = source;
+      throw e;
+    }
+
+    var template = function(data) {
+      return render.call(this, data, _$1);
+    };
+
+    // Provide the compiled source as a convenience for precompilation.
+    template.source = 'function(' + argument + '){\n' + source + '}';
+
+    return template;
+  }
+
+  // Traverses the children of `obj` along `path`. If a child is a function, it
+  // is invoked with its parent as context. Returns the value of the final
+  // child, or `fallback` if any child is undefined.
+  function result(obj, path, fallback) {
+    path = toPath(path);
+    var length = path.length;
+    if (!length) {
+      return isFunction$1(fallback) ? fallback.call(obj) : fallback;
+    }
+    for (var i = 0; i < length; i++) {
+      var prop = obj == null ? void 0 : obj[path[i]];
+      if (prop === void 0) {
+        prop = fallback;
+        i = length; // Ensure we don't continue iterating.
+      }
+      obj = isFunction$1(prop) ? prop.call(obj) : prop;
+    }
+    return obj;
+  }
+
+  // Generate a unique integer id (unique within the entire client session).
+  // Useful for temporary DOM ids.
+  var idCounter = 0;
+  function uniqueId(prefix) {
+    var id = ++idCounter + '';
+    return prefix ? prefix + id : id;
+  }
+
+  // Start chaining a wrapped Underscore object.
+  function chain(obj) {
+    var instance = _$1(obj);
+    instance._chain = true;
+    return instance;
+  }
+
+  // Internal function to execute `sourceFunc` bound to `context` with optional
+  // `args`. Determines whether to execute a function as a constructor or as a
+  // normal function.
+  function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
+    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
+    var self = baseCreate(sourceFunc.prototype);
+    var result = sourceFunc.apply(self, args);
+    if (isObject(result)) return result;
+    return self;
+  }
+
+  // Partially apply a function by creating a version that has had some of its
+  // arguments pre-filled, without changing its dynamic `this` context. `_` acts
+  // as a placeholder by default, allowing any combination of arguments to be
+  // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
+  var partial = restArguments(function(func, boundArgs) {
+    var placeholder = partial.placeholder;
+    var bound = function() {
+      var position = 0, length = boundArgs.length;
+      var args = Array(length);
+      for (var i = 0; i < length; i++) {
+        args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
+      }
+      while (position < arguments.length) args.push(arguments[position++]);
+      return executeBound(func, bound, this, this, args);
+    };
+    return bound;
+  });
+
+  partial.placeholder = _$1;
+
+  // Create a function bound to a given object (assigning `this`, and arguments,
+  // optionally).
+  var bind = restArguments(function(func, context, args) {
+    if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');
+    var bound = restArguments(function(callArgs) {
+      return executeBound(func, bound, context, this, args.concat(callArgs));
+    });
+    return bound;
+  });
+
+  // Internal helper for collection methods to determine whether a collection
+  // should be iterated as an array or as an object.
+  // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
+  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
+  var isArrayLike = createSizePropertyCheck(getLength);
+
+  // Internal implementation of a recursive `flatten` function.
+  function flatten$1(input, depth, strict, output) {
+    output = output || [];
+    if (!depth && depth !== 0) {
+      depth = Infinity;
+    } else if (depth <= 0) {
+      return output.concat(input);
+    }
+    var idx = output.length;
+    for (var i = 0, length = getLength(input); i < length; i++) {
+      var value = input[i];
+      if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
+        // Flatten current level of array or arguments object.
+        if (depth > 1) {
+          flatten$1(value, depth - 1, strict, output);
+          idx = output.length;
+        } else {
+          var j = 0, len = value.length;
+          while (j < len) output[idx++] = value[j++];
+        }
+      } else if (!strict) {
+        output[idx++] = value;
+      }
+    }
+    return output;
+  }
+
+  // Bind a number of an object's methods to that object. Remaining arguments
+  // are the method names to be bound. Useful for ensuring that all callbacks
+  // defined on an object belong to it.
+  var bindAll = restArguments(function(obj, keys) {
+    keys = flatten$1(keys, false, false);
+    var index = keys.length;
+    if (index < 1) throw new Error('bindAll must be passed function names');
+    while (index--) {
+      var key = keys[index];
+      obj[key] = bind(obj[key], obj);
+    }
+    return obj;
+  });
+
+  // Memoize an expensive function by storing its results.
+  function memoize(func, hasher) {
+    var memoize = function(key) {
+      var cache = memoize.cache;
+      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+      if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);
+      return cache[address];
+    };
+    memoize.cache = {};
+    return memoize;
+  }
+
+  // Delays a function for the given number of milliseconds, and then calls
+  // it with the arguments supplied.
+  var delay = restArguments(function(func, wait, args) {
+    return setTimeout(function() {
+      return func.apply(null, args);
+    }, wait);
+  });
+
+  // Defers a function, scheduling it to run after the current call stack has
+  // cleared.
+  var defer = partial(delay, _$1, 1);
+
+  // Returns a function, that, when invoked, will only be triggered at most once
+  // during a given window of time. Normally, the throttled function will run
+  // as much as it can, without ever going more than once per `wait` duration;
+  // but if you'd like to disable the execution on the leading edge, pass
+  // `{leading: false}`. To disable execution on the trailing edge, ditto.
+  function throttle(func, wait, options) {
+    var timeout, context, args, result;
+    var previous = 0;
+    if (!options) options = {};
+
+    var later = function() {
+      previous = options.leading === false ? 0 : now();
+      timeout = null;
+      result = func.apply(context, args);
+      if (!timeout) context = args = null;
+    };
+
+    var throttled = function() {
+      var _now = now();
+      if (!previous && options.leading === false) previous = _now;
+      var remaining = wait - (_now - previous);
+      context = this;
+      args = arguments;
+      if (remaining <= 0 || remaining > wait) {
+        if (timeout) {
+          clearTimeout(timeout);
+          timeout = null;
+        }
+        previous = _now;
+        result = func.apply(context, args);
+        if (!timeout) context = args = null;
+      } else if (!timeout && options.trailing !== false) {
+        timeout = setTimeout(later, remaining);
+      }
+      return result;
+    };
+
+    throttled.cancel = function() {
+      clearTimeout(timeout);
+      previous = 0;
+      timeout = context = args = null;
+    };
+
+    return throttled;
+  }
+
+  // When a sequence of calls of the returned function ends, the argument
+  // function is triggered. The end of a sequence is defined by the `wait`
+  // parameter. If `immediate` is passed, the argument function will be
+  // triggered at the beginning of the sequence instead of at the end.
+  function debounce(func, wait, immediate) {
+    var timeout, previous, args, result, context;
+
+    var later = function() {
+      var passed = now() - previous;
+      if (wait > passed) {
+        timeout = setTimeout(later, wait - passed);
+      } else {
+        timeout = null;
+        if (!immediate) result = func.apply(context, args);
+        // This check is needed because `func` can recursively invoke `debounced`.
+        if (!timeout) args = context = null;
+      }
+    };
+
+    var debounced = restArguments(function(_args) {
+      context = this;
+      args = _args;
+      previous = now();
+      if (!timeout) {
+        timeout = setTimeout(later, wait);
+        if (immediate) result = func.apply(context, args);
+      }
+      return result;
+    });
+
+    debounced.cancel = function() {
+      clearTimeout(timeout);
+      timeout = args = context = null;
+    };
+
+    return debounced;
+  }
+
+  // Returns the first function passed as an argument to the second,
+  // allowing you to adjust arguments, run code before and after, and
+  // conditionally execute the original function.
+  function wrap(func, wrapper) {
+    return partial(wrapper, func);
+  }
+
+  // Returns a negated version of the passed-in predicate.
+  function negate(predicate) {
+    return function() {
+      return !predicate.apply(this, arguments);
+    };
+  }
+
+  // Returns a function that is the composition of a list of functions, each
+  // consuming the return value of the function that follows.
+  function compose() {
+    var args = arguments;
+    var start = args.length - 1;
+    return function() {
+      var i = start;
+      var result = args[start].apply(this, arguments);
+      while (i--) result = args[i].call(this, result);
+      return result;
+    };
+  }
+
+  // Returns a function that will only be executed on and after the Nth call.
+  function after(times, func) {
+    return function() {
+      if (--times < 1) {
+        return func.apply(this, arguments);
+      }
+    };
+  }
+
+  // Returns a function that will only be executed up to (but not including) the
+  // Nth call.
+  function before(times, func) {
+    var memo;
+    return function() {
+      if (--times > 0) {
+        memo = func.apply(this, arguments);
+      }
+      if (times <= 1) func = null;
+      return memo;
+    };
+  }
+
+  // Returns a function that will be executed at most one time, no matter how
+  // often you call it. Useful for lazy initialization.
+  var once = partial(before, 2);
+
+  // Returns the first key on an object that passes a truth test.
+  function findKey(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = keys(obj), key;
+    for (var i = 0, length = _keys.length; i < length; i++) {
+      key = _keys[i];
+      if (predicate(obj[key], key, obj)) return key;
+    }
+  }
+
+  // Internal function to generate `_.findIndex` and `_.findLastIndex`.
+  function createPredicateIndexFinder(dir) {
+    return function(array, predicate, context) {
+      predicate = cb(predicate, context);
+      var length = getLength(array);
+      var index = dir > 0 ? 0 : length - 1;
+      for (; index >= 0 && index < length; index += dir) {
+        if (predicate(array[index], index, array)) return index;
+      }
+      return -1;
+    };
+  }
+
+  // Returns the first index on an array-like that passes a truth test.
+  var findIndex = createPredicateIndexFinder(1);
+
+  // Returns the last index on an array-like that passes a truth test.
+  var findLastIndex = createPredicateIndexFinder(-1);
+
+  // Use a comparator function to figure out the smallest index at which
+  // an object should be inserted so as to maintain order. Uses binary search.
+  function sortedIndex(array, obj, iteratee, context) {
+    iteratee = cb(iteratee, context, 1);
+    var value = iteratee(obj);
+    var low = 0, high = getLength(array);
+    while (low < high) {
+      var mid = Math.floor((low + high) / 2);
+      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
+    }
+    return low;
+  }
+
+  // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.
+  function createIndexFinder(dir, predicateFind, sortedIndex) {
+    return function(array, item, idx) {
+      var i = 0, length = getLength(array);
+      if (typeof idx == 'number') {
+        if (dir > 0) {
+          i = idx >= 0 ? idx : Math.max(idx + length, i);
+        } else {
+          length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
+        }
+      } else if (sortedIndex && idx && length) {
+        idx = sortedIndex(array, item);
+        return array[idx] === item ? idx : -1;
+      }
+      if (item !== item) {
+        idx = predicateFind(slice.call(array, i, length), isNaN$1);
+        return idx >= 0 ? idx + i : -1;
+      }
+      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
+        if (array[idx] === item) return idx;
+      }
+      return -1;
+    };
+  }
+
+  // Return the position of the first occurrence of an item in an array,
+  // or -1 if the item is not included in the array.
+  // If the array is large and already in sort order, pass `true`
+  // for **isSorted** to use binary search.
+  var indexOf = createIndexFinder(1, findIndex, sortedIndex);
+
+  // Return the position of the last occurrence of an item in an array,
+  // or -1 if the item is not included in the array.
+  var lastIndexOf = createIndexFinder(-1, findLastIndex);
+
+  // Return the first value which passes a truth test.
+  function find(obj, predicate, context) {
+    var keyFinder = isArrayLike(obj) ? findIndex : findKey;
+    var key = keyFinder(obj, predicate, context);
+    if (key !== void 0 && key !== -1) return obj[key];
+  }
+
+  // Convenience version of a common use case of `_.find`: getting the first
+  // object containing specific `key:value` pairs.
+  function findWhere(obj, attrs) {
+    return find(obj, matcher(attrs));
+  }
+
+  // The cornerstone for collection functions, an `each`
+  // implementation, aka `forEach`.
+  // Handles raw objects in addition to array-likes. Treats all
+  // sparse array-likes as if they were dense.
+  function each(obj, iteratee, context) {
+    iteratee = optimizeCb(iteratee, context);
+    var i, length;
+    if (isArrayLike(obj)) {
+      for (i = 0, length = obj.length; i < length; i++) {
+        iteratee(obj[i], i, obj);
+      }
+    } else {
+      var _keys = keys(obj);
+      for (i = 0, length = _keys.length; i < length; i++) {
+        iteratee(obj[_keys[i]], _keys[i], obj);
+      }
+    }
+    return obj;
+  }
+
+  // Return the results of applying the iteratee to each element.
+  function map(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length,
+        results = Array(length);
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      results[index] = iteratee(obj[currentKey], currentKey, obj);
+    }
+    return results;
+  }
+
+  // Internal helper to create a reducing function, iterating left or right.
+  function createReduce(dir) {
+    // Wrap code that reassigns argument variables in a separate function than
+    // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
+    var reducer = function(obj, iteratee, memo, initial) {
+      var _keys = !isArrayLike(obj) && keys(obj),
+          length = (_keys || obj).length,
+          index = dir > 0 ? 0 : length - 1;
+      if (!initial) {
+        memo = obj[_keys ? _keys[index] : index];
+        index += dir;
+      }
+      for (; index >= 0 && index < length; index += dir) {
+        var currentKey = _keys ? _keys[index] : index;
+        memo = iteratee(memo, obj[currentKey], currentKey, obj);
+      }
+      return memo;
+    };
+
+    return function(obj, iteratee, memo, context) {
+      var initial = arguments.length >= 3;
+      return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
+    };
+  }
+
+  // **Reduce** builds up a single result from a list of values, aka `inject`,
+  // or `foldl`.
+  var reduce = createReduce(1);
+
+  // The right-associative version of reduce, also known as `foldr`.
+  var reduceRight = createReduce(-1);
+
+  // Return all the elements that pass a truth test.
+  function filter(obj, predicate, context) {
+    var results = [];
+    predicate = cb(predicate, context);
+    each(obj, function(value, index, list) {
+      if (predicate(value, index, list)) results.push(value);
+    });
+    return results;
+  }
+
+  // Return all the elements for which a truth test fails.
+  function reject(obj, predicate, context) {
+    return filter(obj, negate(cb(predicate)), context);
+  }
+
+  // Determine whether all of the elements pass a truth test.
+  function every(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length;
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      if (!predicate(obj[currentKey], currentKey, obj)) return false;
+    }
+    return true;
+  }
+
+  // Determine if at least one element in the object passes a truth test.
+  function some(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length;
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      if (predicate(obj[currentKey], currentKey, obj)) return true;
+    }
+    return false;
+  }
+
+  // Determine if the array or object contains a given item (using `===`).
+  function contains(obj, item, fromIndex, guard) {
+    if (!isArrayLike(obj)) obj = values(obj);
+    if (typeof fromIndex != 'number' || guard) fromIndex = 0;
+    return indexOf(obj, item, fromIndex) >= 0;
+  }
+
+  // Invoke a method (with arguments) on every item in a collection.
+  var invoke = restArguments(function(obj, path, args) {
+    var contextPath, func;
+    if (isFunction$1(path)) {
+      func = path;
+    } else {
+      path = toPath(path);
+      contextPath = path.slice(0, -1);
+      path = path[path.length - 1];
+    }
+    return map(obj, function(context) {
+      var method = func;
+      if (!method) {
+        if (contextPath && contextPath.length) {
+          context = deepGet(context, contextPath);
+        }
+        if (context == null) return void 0;
+        method = context[path];
+      }
+      return method == null ? method : method.apply(context, args);
+    });
+  });
+
+  // Convenience version of a common use case of `_.map`: fetching a property.
+  function pluck(obj, key) {
+    return map(obj, property(key));
+  }
+
+  // Convenience version of a common use case of `_.filter`: selecting only
+  // objects containing specific `key:value` pairs.
+  function where(obj, attrs) {
+    return filter(obj, matcher(attrs));
+  }
+
+  // Return the maximum element (or element-based computation).
+  function max(obj, iteratee, context) {
+    var result = -Infinity, lastComputed = -Infinity,
+        value, computed;
+    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+      obj = isArrayLike(obj) ? obj : values(obj);
+      for (var i = 0, length = obj.length; i < length; i++) {
+        value = obj[i];
+        if (value != null && value > result) {
+          result = value;
+        }
+      }
+    } else {
+      iteratee = cb(iteratee, context);
+      each(obj, function(v, index, list) {
+        computed = iteratee(v, index, list);
+        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+          result = v;
+          lastComputed = computed;
+        }
+      });
+    }
+    return result;
+  }
+
+  // Return the minimum element (or element-based computation).
+  function min(obj, iteratee, context) {
+    var result = Infinity, lastComputed = Infinity,
+        value, computed;
+    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+      obj = isArrayLike(obj) ? obj : values(obj);
+      for (var i = 0, length = obj.length; i < length; i++) {
+        value = obj[i];
+        if (value != null && value < result) {
+          result = value;
+        }
+      }
+    } else {
+      iteratee = cb(iteratee, context);
+      each(obj, function(v, index, list) {
+        computed = iteratee(v, index, list);
+        if (computed < lastComputed || computed === Infinity && result === Infinity) {
+          result = v;
+          lastComputed = computed;
+        }
+      });
+    }
+    return result;
+  }
+
+  // Sample **n** random values from a collection using the modern version of the
+  // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+  // If **n** is not specified, returns a single random element.
+  // The internal `guard` argument allows it to work with `_.map`.
+  function sample(obj, n, guard) {
+    if (n == null || guard) {
+      if (!isArrayLike(obj)) obj = values(obj);
+      return obj[random(obj.length - 1)];
+    }
+    var sample = isArrayLike(obj) ? clone(obj) : values(obj);
+    var length = getLength(sample);
+    n = Math.max(Math.min(n, length), 0);
+    var last = length - 1;
+    for (var index = 0; index < n; index++) {
+      var rand = random(index, last);
+      var temp = sample[index];
+      sample[index] = sample[rand];
+      sample[rand] = temp;
+    }
+    return sample.slice(0, n);
+  }
+
+  // Shuffle a collection.
+  function shuffle(obj) {
+    return sample(obj, Infinity);
+  }
+
+  // Sort the object's values by a criterion produced by an iteratee.
+  function sortBy(obj, iteratee, context) {
+    var index = 0;
+    iteratee = cb(iteratee, context);
+    return pluck(map(obj, function(value, key, list) {
+      return {
+        value: value,
+        index: index++,
+        criteria: iteratee(value, key, list)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria;
+      var b = right.criteria;
+      if (a !== b) {
+        if (a > b || a === void 0) return 1;
+        if (a < b || b === void 0) return -1;
+      }
+      return left.index - right.index;
+    }), 'value');
+  }
+
+  // An internal function used for aggregate "group by" operations.
+  function group(behavior, partition) {
+    return function(obj, iteratee, context) {
+      var result = partition ? [[], []] : {};
+      iteratee = cb(iteratee, context);
+      each(obj, function(value, index) {
+        var key = iteratee(value, index, obj);
+        behavior(result, value, key);
+      });
+      return result;
+    };
+  }
+
+  // Groups the object's values by a criterion. Pass either a string attribute
+  // to group by, or a function that returns the criterion.
+  var groupBy = group(function(result, value, key) {
+    if (has$1(result, key)) result[key].push(value); else result[key] = [value];
+  });
+
+  // Indexes the object's values by a criterion, similar to `_.groupBy`, but for
+  // when you know that your index values will be unique.
+  var indexBy = group(function(result, value, key) {
+    result[key] = value;
+  });
+
+  // Counts instances of an object that group by a certain criterion. Pass
+  // either a string attribute to count by, or a function that returns the
+  // criterion.
+  var countBy = group(function(result, value, key) {
+    if (has$1(result, key)) result[key]++; else result[key] = 1;
+  });
+
+  // Split a collection into two arrays: one whose elements all pass the given
+  // truth test, and one whose elements all do not pass the truth test.
+  var partition = group(function(result, value, pass) {
+    result[pass ? 0 : 1].push(value);
+  }, true);
+
+  // Safely create a real, live array from anything iterable.
+  var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
+  function toArray(obj) {
+    if (!obj) return [];
+    if (isArray(obj)) return slice.call(obj);
+    if (isString(obj)) {
+      // Keep surrogate pair characters together.
+      return obj.match(reStrSymbol);
+    }
+    if (isArrayLike(obj)) return map(obj, identity);
+    return values(obj);
+  }
+
+  // Return the number of elements in a collection.
+  function size(obj) {
+    if (obj == null) return 0;
+    return isArrayLike(obj) ? obj.length : keys(obj).length;
+  }
+
+  // Internal `_.pick` helper function to determine whether `key` is an enumerable
+  // property name of `obj`.
+  function keyInObj(value, key, obj) {
+    return key in obj;
+  }
+
+  // Return a copy of the object only containing the allowed properties.
+  var pick = restArguments(function(obj, keys) {
+    var result = {}, iteratee = keys[0];
+    if (obj == null) return result;
+    if (isFunction$1(iteratee)) {
+      if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
+      keys = allKeys(obj);
+    } else {
+      iteratee = keyInObj;
+      keys = flatten$1(keys, false, false);
+      obj = Object(obj);
+    }
+    for (var i = 0, length = keys.length; i < length; i++) {
+      var key = keys[i];
+      var value = obj[key];
+      if (iteratee(value, key, obj)) result[key] = value;
+    }
+    return result;
+  });
+
+  // Return a copy of the object without the disallowed properties.
+  var omit = restArguments(function(obj, keys) {
+    var iteratee = keys[0], context;
+    if (isFunction$1(iteratee)) {
+      iteratee = negate(iteratee);
+      if (keys.length > 1) context = keys[1];
+    } else {
+      keys = map(flatten$1(keys, false, false), String);
+      iteratee = function(value, key) {
+        return !contains(keys, key);
+      };
+    }
+    return pick(obj, iteratee, context);
+  });
+
+  // Returns everything but the last entry of the array. Especially useful on
+  // the arguments object. Passing **n** will return all the values in
+  // the array, excluding the last N.
+  function initial(array, n, guard) {
+    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+  }
+
+  // Get the first element of an array. Passing **n** will return the first N
+  // values in the array. The **guard** check allows it to work with `_.map`.
+  function first(array, n, guard) {
+    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
+    if (n == null || guard) return array[0];
+    return initial(array, array.length - n);
+  }
+
+  // Returns everything but the first entry of the `array`. Especially useful on
+  // the `arguments` object. Passing an **n** will return the rest N values in the
+  // `array`.
+  function rest(array, n, guard) {
+    return slice.call(array, n == null || guard ? 1 : n);
+  }
+
+  // Get the last element of an array. Passing **n** will return the last N
+  // values in the array.
+  function last(array, n, guard) {
+    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
+    if (n == null || guard) return array[array.length - 1];
+    return rest(array, Math.max(0, array.length - n));
+  }
+
+  // Trim out all falsy values from an array.
+  function compact(array) {
+    return filter(array, Boolean);
+  }
+
+  // Flatten out an array, either recursively (by default), or up to `depth`.
+  // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
+  function flatten(array, depth) {
+    return flatten$1(array, depth, false);
+  }
+
+  // Take the difference between one array and a number of other arrays.
+  // Only the elements present in just the first array will remain.
+  var difference = restArguments(function(array, rest) {
+    rest = flatten$1(rest, true, true);
+    return filter(array, function(value){
+      return !contains(rest, value);
+    });
+  });
+
+  // Return a version of the array that does not contain the specified value(s).
+  var without = restArguments(function(array, otherArrays) {
+    return difference(array, otherArrays);
+  });
+
+  // Produce a duplicate-free version of the array. If the array has already
+  // been sorted, you have the option of using a faster algorithm.
+  // The faster algorithm will not work with an iteratee if the iteratee
+  // is not a one-to-one function, so providing an iteratee will disable
+  // the faster algorithm.
+  function uniq(array, isSorted, iteratee, context) {
+    if (!isBoolean(isSorted)) {
+      context = iteratee;
+      iteratee = isSorted;
+      isSorted = false;
+    }
+    if (iteratee != null) iteratee = cb(iteratee, context);
+    var result = [];
+    var seen = [];
+    for (var i = 0, length = getLength(array); i < length; i++) {
+      var value = array[i],
+          computed = iteratee ? iteratee(value, i, array) : value;
+      if (isSorted && !iteratee) {
+        if (!i || seen !== computed) result.push(value);
+        seen = computed;
+      } else if (iteratee) {
+        if (!contains(seen, computed)) {
+          seen.push(computed);
+          result.push(value);
+        }
+      } else if (!contains(result, value)) {
+        result.push(value);
+      }
+    }
+    return result;
+  }
+
+  // Produce an array that contains the union: each distinct element from all of
+  // the passed-in arrays.
+  var union = restArguments(function(arrays) {
+    return uniq(flatten$1(arrays, true, true));
+  });
+
+  // Produce an array that contains every item shared between all the
+  // passed-in arrays.
+  function intersection(array) {
+    var result = [];
+    var argsLength = arguments.length;
+    for (var i = 0, length = getLength(array); i < length; i++) {
+      var item = array[i];
+      if (contains(result, item)) continue;
+      var j;
+      for (j = 1; j < argsLength; j++) {
+        if (!contains(arguments[j], item)) break;
+      }
+      if (j === argsLength) result.push(item);
+    }
+    return result;
+  }
+
+  // Complement of zip. Unzip accepts an array of arrays and groups
+  // each array's elements on shared indices.
+  function unzip(array) {
+    var length = array && max(array, getLength).length || 0;
+    var result = Array(length);
+
+    for (var index = 0; index < length; index++) {
+      result[index] = pluck(array, index);
+    }
+    return result;
+  }
+
+  // Zip together multiple lists into a single array -- elements that share
+  // an index go together.
+  var zip = restArguments(unzip);
+
+  // Converts lists into objects. Pass either a single array of `[key, value]`
+  // pairs, or two parallel arrays of the same length -- one of keys, and one of
+  // the corresponding values. Passing by pairs is the reverse of `_.pairs`.
+  function object(list, values) {
+    var result = {};
+    for (var i = 0, length = getLength(list); i < length; i++) {
+      if (values) {
+        result[list[i]] = values[i];
+      } else {
+        result[list[i][0]] = list[i][1];
+      }
+    }
+    return result;
+  }
+
+  // Generate an integer Array containing an arithmetic progression. A port of
+  // the native Python `range()` function. See
+  // [the Python documentation](https://docs.python.org/library/functions.html#range).
+  function range(start, stop, step) {
+    if (stop == null) {
+      stop = start || 0;
+      start = 0;
+    }
+    if (!step) {
+      step = stop < start ? -1 : 1;
+    }
+
+    var length = Math.max(Math.ceil((stop - start) / step), 0);
+    var range = Array(length);
+
+    for (var idx = 0; idx < length; idx++, start += step) {
+      range[idx] = start;
+    }
+
+    return range;
+  }
+
+  // Chunk a single array into multiple arrays, each containing `count` or fewer
+  // items.
+  function chunk(array, count) {
+    if (count == null || count < 1) return [];
+    var result = [];
+    var i = 0, length = array.length;
+    while (i < length) {
+      result.push(slice.call(array, i, i += count));
+    }
+    return result;
+  }
+
+  // Helper function to continue chaining intermediate results.
+  function chainResult(instance, obj) {
+    return instance._chain ? _$1(obj).chain() : obj;
+  }
+
+  // Add your own custom functions to the Underscore object.
+  function mixin(obj) {
+    each(functions(obj), function(name) {
+      var func = _$1[name] = obj[name];
+      _$1.prototype[name] = function() {
+        var args = [this._wrapped];
+        push.apply(args, arguments);
+        return chainResult(this, func.apply(_$1, args));
+      };
+    });
+    return _$1;
+  }
+
+  // Add all mutator `Array` functions to the wrapper.
+  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+    var method = ArrayProto[name];
+    _$1.prototype[name] = function() {
+      var obj = this._wrapped;
+      if (obj != null) {
+        method.apply(obj, arguments);
+        if ((name === 'shift' || name === 'splice') && obj.length === 0) {
+          delete obj[0];
+        }
+      }
+      return chainResult(this, obj);
+    };
+  });
+
+  // Add all accessor `Array` functions to the wrapper.
+  each(['concat', 'join', 'slice'], function(name) {
+    var method = ArrayProto[name];
+    _$1.prototype[name] = function() {
+      var obj = this._wrapped;
+      if (obj != null) obj = method.apply(obj, arguments);
+      return chainResult(this, obj);
+    };
+  });
+
+  // Named Exports
+
+  var allExports = {
+    __proto__: null,
+    VERSION: VERSION,
+    restArguments: restArguments,
+    isObject: isObject,
+    isNull: isNull,
+    isUndefined: isUndefined,
+    isBoolean: isBoolean,
+    isElement: isElement,
+    isString: isString,
+    isNumber: isNumber,
+    isDate: isDate,
+    isRegExp: isRegExp,
+    isError: isError,
+    isSymbol: isSymbol,
+    isArrayBuffer: isArrayBuffer,
+    isDataView: isDataView$1,
+    isArray: isArray,
+    isFunction: isFunction$1,
+    isArguments: isArguments$1,
+    isFinite: isFinite$1,
+    isNaN: isNaN$1,
+    isTypedArray: isTypedArray$1,
+    isEmpty: isEmpty,
+    isMatch: isMatch,
+    isEqual: isEqual,
+    isMap: isMap,
+    isWeakMap: isWeakMap,
+    isSet: isSet,
+    isWeakSet: isWeakSet,
+    keys: keys,
+    allKeys: allKeys,
+    values: values,
+    pairs: pairs,
+    invert: invert,
+    functions: functions,
+    methods: functions,
+    extend: extend,
+    extendOwn: extendOwn,
+    assign: extendOwn,
+    defaults: defaults,
+    create: create,
+    clone: clone,
+    tap: tap,
+    get: get,
+    has: has,
+    mapObject: mapObject,
+    identity: identity,
+    constant: constant,
+    noop: noop,
+    toPath: toPath$1,
+    property: property,
+    propertyOf: propertyOf,
+    matcher: matcher,
+    matches: matcher,
+    times: times,
+    random: random,
+    now: now,
+    escape: _escape,
+    unescape: _unescape,
+    templateSettings: templateSettings,
+    template: template,
+    result: result,
+    uniqueId: uniqueId,
+    chain: chain,
+    iteratee: iteratee,
+    partial: partial,
+    bind: bind,
+    bindAll: bindAll,
+    memoize: memoize,
+    delay: delay,
+    defer: defer,
+    throttle: throttle,
+    debounce: debounce,
+    wrap: wrap,
+    negate: negate,
+    compose: compose,
+    after: after,
+    before: before,
+    once: once,
+    findKey: findKey,
+    findIndex: findIndex,
+    findLastIndex: findLastIndex,
+    sortedIndex: sortedIndex,
+    indexOf: indexOf,
+    lastIndexOf: lastIndexOf,
+    find: find,
+    detect: find,
+    findWhere: findWhere,
+    each: each,
+    forEach: each,
+    map: map,
+    collect: map,
+    reduce: reduce,
+    foldl: reduce,
+    inject: reduce,
+    reduceRight: reduceRight,
+    foldr: reduceRight,
+    filter: filter,
+    select: filter,
+    reject: reject,
+    every: every,
+    all: every,
+    some: some,
+    any: some,
+    contains: contains,
+    includes: contains,
+    include: contains,
+    invoke: invoke,
+    pluck: pluck,
+    where: where,
+    max: max,
+    min: min,
+    shuffle: shuffle,
+    sample: sample,
+    sortBy: sortBy,
+    groupBy: groupBy,
+    indexBy: indexBy,
+    countBy: countBy,
+    partition: partition,
+    toArray: toArray,
+    size: size,
+    pick: pick,
+    omit: omit,
+    first: first,
+    head: first,
+    take: first,
+    initial: initial,
+    last: last,
+    rest: rest,
+    tail: rest,
+    drop: rest,
+    compact: compact,
+    flatten: flatten,
+    without: without,
+    uniq: uniq,
+    unique: uniq,
+    union: union,
+    intersection: intersection,
+    difference: difference,
+    unzip: unzip,
+    transpose: unzip,
+    zip: zip,
+    object: object,
+    range: range,
+    chunk: chunk,
+    mixin: mixin,
+    'default': _$1
+  };
+
+  // Default Export
+
+  // Add all of the Underscore functions to the wrapper object.
+  var _ = mixin(allExports);
+  // Legacy Node.js API.
+  _._ = _;
+
+  return _;
+
+})));
+//# sourceMappingURL=underscore-umd.js.map
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/_static/underscore.js b/VimbaX/doc/VimbaX_ReleaseNotes/_static/underscore.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf177d4285ab55fbc16406a5ec827b80e7eecd53
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/_static/underscore.js
@@ -0,0 +1,6 @@
+!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){
+//     Underscore.js 1.13.1
+//     https://underscorejs.org
+//     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
+//     Underscore may be freely distributed under the MIT license.
+var n="1.13.1",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u<t;u++)e[u]=arguments[u+r];switch(r){case 0:return n.call(this,e);case 1:return n.call(this,arguments[0],e);case 2:return n.call(this,arguments[0],arguments[1],e)}var o=Array(r+1);for(u=0;u<r;u++)o[u]=arguments[u];return o[r]=e,n.apply(this,o)}}function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}function w(n){return void 0===n}function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}function x(n){var r="[object "+n+"]";return function(n){return a.call(n)===r}}var S=x("String"),O=x("Number"),M=x("Date"),E=x("RegExp"),B=x("Error"),N=x("Symbol"),I=x("ArrayBuffer"),T=x("Function"),k=r.document&&r.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof k&&(T=function(n){return"function"==typeof n||!1});var D=T,R=x("Object"),F=l&&R(new DataView(new ArrayBuffer(8))),V="undefined"!=typeof Map&&R(new Map),P=x("DataView");var q=F?function(n){return null!=n&&D(n.getInt8)&&I(n.buffer)}:P,U=s||x("Array");function W(n,r){return null!=n&&f.call(n,r)}var z=x("Arguments");!function(){z(arguments)||(z=function(n){return W(n,"callee")})}();var L=z;function $(n){return O(n)&&y(n)}function C(n){return function(){return n}}function K(n){return function(r){var t=n(r);return"number"==typeof t&&t>=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]]=!0;return{contains:function(n){return r[n]},push:function(t){return r[t]=!0,n.push(t)}}}(r);var t=b.length,u=n.constructor,o=D(u)&&u.prototype||e,i="constructor";for(W(n,i)&&!r.contains(i)&&r.push(i);t--;)(i=b[t])in n&&n[i]!==o[i]&&!r.contains(i)&&r.push(i)}function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in n)W(n,t)&&r.push(t);return g&&Z(n,r),r}function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wrapped=n):new tn(n)}function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}tn.VERSION=n,tn.prototype.value=function(){return this._wrapped},tn.prototype.valueOf=tn.prototype.toJSON=tn.prototype.value,tn.prototype.toString=function(){return String(this._wrapped)};var un="[object DataView]";function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var o=typeof n;return("function"===o||"object"===o||"object"==typeof r)&&function n(r,t,e,o){r instanceof tn&&(r=r._wrapped);t instanceof tn&&(t=t._wrapped);var i=a.call(r);if(i!==a.call(t))return!1;if(F&&"[object Object]"==i&&q(r)){if(!q(t))return!1;i=un}switch(i){case"[object RegExp]":case"[object String]":return""+r==""+t;case"[object Number]":return+r!=+r?+t!=+t:0==+r?1/+r==1/t:+r==+t;case"[object Date]":case"[object Boolean]":return+r==+t;case"[object Symbol]":return u.valueOf.call(r)===u.valueOf.call(t);case"[object ArrayBuffer]":case un:return n(en(r),en(t),e,o)}var f="[object Array]"===i;if(!f&&X(r)){if(G(r)!==G(t))return!1;if(r.buffer===t.buffer&&r.byteOffset===t.byteOffset)return!0;f=!0}if(!f){if("object"!=typeof r||"object"!=typeof t)return!1;var c=r.constructor,l=t.constructor;if(c!==l&&!(D(c)&&c instanceof c&&D(l)&&l instanceof l)&&"constructor"in r&&"constructor"in t)return!1}o=o||[];var s=(e=e||[]).length;for(;s--;)if(e[s]===r)return o[s]===t;if(e.push(r),o.push(t),f){if((s=r.length)!==t.length)return!1;for(;s--;)if(!on(r[s],t[s],e,o))return!1}else{var p,v=nn(r);if(s=v.length,nn(t).length!==s)return!1;for(;s--;)if(p=v[s],!W(t,p)||!on(r[p],t[p],e,o))return!1}return e.pop(),o.pop(),!0}(n,r,t,e)}function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);return g&&Z(n,r),r}function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=an(t);if(Y(e))return!1;for(var u=0;u<r;u++)if(!D(t[n[u]]))return!1;return n!==hn||!D(t[cn])}}var cn="forEach",ln="has",sn=["clear","delete"],pn=["get",ln,"set"],vn=sn.concat(cn,pn),hn=sn.concat(pn),yn=["add"].concat(sn,cn,ln),dn=V?fn(vn):x("Map"),gn=V?fn(hn):x("WeakMap"),bn=V?fn(yn):x("Set"),mn=x("WeakSet");function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Object(t)),e<2||null==t)return t;for(var u=1;u<e;u++)for(var o=arguments[u],i=n(o),a=i.length,f=0;f<a;f++){var c=i[f];r&&void 0!==t[c]||(t[c]=o[c])}return t}}var xn=An(an),Sn=An(nn),On=An(an,!0);function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.prototype=n;var t=new r;return r.prototype=null,t}function En(n){return _(n)?U(n)?n.slice():xn({},n):n}function Bn(n){return U(n)?n:[n]}function Nn(n){return tn.toPath(n)}function In(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function Tn(n,r,t){var e=In(n,Nn(r));return w(e)?t:e}function kn(n){return n}function Dn(n){return n=Sn({},n),function(r){return rn(r,n)}}function Rn(n){return n=Nn(n),function(r){return In(r,n)}}function Fn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:return function(t){return n.call(r,t)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return function(){return n.apply(r,arguments)}}function Vn(n,r,t){return null==n?kn:D(n)?Fn(n,r,t):_(n)&&!U(n)?Dn(n):Rn(n)}function Pn(n,r){return Vn(n,r,1/0)}function qn(n,r,t){return tn.iteratee!==Pn?tn.iteratee(n,r):Vn(n,r,t)}function Un(){}function Wn(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}tn.toPath=Bn,tn.iteratee=Pn;var zn=Date.now||function(){return(new Date).getTime()};function Ln(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")",e=RegExp(t),u=RegExp(t,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,r):n}}var $n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a<o;a++)i[a]=r[a]===t?arguments[u++]:r[a];for(;u<arguments.length;)i.push(arguments[u++]);return nr(n,e,this,this,i)};return e}));rr.placeholder=tn;var tr=j((function(n,r,t){if(!D(n))throw new TypeError("Bind must be called on a function");var e=j((function(u){return nr(n,e,r,this,t.concat(u))}));return e})),er=K(Y);function ur(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}else r=1/0;for(var u=e.length,o=0,i=Y(n);o<i;o++){var a=n[o];if(er(a)&&(U(a)||L(a)))if(r>1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else t||(e[u++]=a)}return e}var or=j((function(n,r){var t=(r=ur(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=tr(n[e],n)}return n}));var ir=j((function(n,r,t){return setTimeout((function(){return n.apply(null,t)}),r)})),ar=rr(ir,tn,1);function fr(n){return function(){return!n.apply(this,arguments)}}function cr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function pr(n){return function(r,t,e){t=qn(t,e);for(var u=Y(r),o=n>0?0:u-1;o>=0&&o<u;o+=n)if(t(r[o],o,r))return o;return-1}}var vr=pr(1),hr=pr(-1);function yr(n,r,t,e){for(var u=(t=qn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function dr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==typeof o)n>0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o<f;o+=n)if(e[o]===u)return o;return-1}}var gr=dr(1,vr,yr),br=dr(-1,hr);function mr(n,r,t){var e=(er(n)?vr:sr)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function jr(n,r,t){var e,u;if(r=Fn(r,t),er(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=nn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function _r(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function wr(n){var r=function(r,t,e,u){var o=!er(r)&&nn(r),i=(o||r).length,a=n>0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a<i;a+=n){var f=o?o[a]:a;e=t(e,r[f],f,r)}return e};return function(n,t,e,u){var o=arguments.length>=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function Mr(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function Er(n,r,t,e){return er(n)||(n=jn(n)),("number"!=typeof t||e)&&(t=0),gr(n,r,t)>=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e>o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=Wn(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function kr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=qn(e,u),jr(t,(function(r,u){var i=e(r,u,t);n(o,r,i)})),o}}var Dr=kr((function(n,r,t){W(n,t)?n[t].push(r):n[t]=[r]})),Rr=kr((function(n,r,t){n[t]=r})),Fr=kr((function(n,r,t){W(n,t)?n[t]++:n[t]=1})),Vr=kr((function(n,r,t){n[t?0:1].push(r)}),!0),Pr=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function qr(n,r,t){return r in t}var Ur=j((function(n,r){var t={},e=r[0];if(null==n)return t;D(e)?(r.length>1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t})),Wr=j((function(n,r){var t,e=r[0];return D(e)?(e=fr(e),r.length>1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?Er(o,c)||(o.push(c),u.push(f)):Er(u,f)||u.push(f)}return u}var Gr=j((function(n){return Jr(ur(n,!0,!0))}));function Hr(n){for(var r=n&&Ir(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e]=Nr(n,e);return t}var Qr=j(Hr);function Xr(n,r){return n._chain?tn(r).chain():r}function Yr(n){return jr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototype[r]=function(){var n=[this._wrapped];return o.apply(n,arguments),Xr(this,t.apply(tn,n))}})),tn}jr(["pop","push","reverse","shift","sort","splice","unshift"],(function(n){var r=t[n];tn.prototype[n]=function(){var t=this._wrapped;return null!=t&&(r.apply(t,arguments),"shift"!==n&&"splice"!==n||0!==t.length||delete t[0]),Xr(this,t)}})),jr(["concat","join","slice"],(function(n){var r=t[n];tn.prototype[n]=function(){var n=this._wrapped;return null!=n&&(n=r.apply(n,arguments)),Xr(this,n)}}));var Zr=Yr({__proto__:null,VERSION:n,restArguments:j,isObject:_,isNull:function(n){return null===n},isUndefined:w,isBoolean:A,isElement:function(n){return!(!n||1!==n.nodeType)},isString:S,isNumber:O,isDate:M,isRegExp:E,isError:B,isSymbol:N,isArrayBuffer:I,isDataView:q,isArray:U,isFunction:D,isArguments:L,isFinite:function(n){return!N(n)&&d(n)&&!isNaN(parseFloat(n))},isNaN:$,isTypedArray:X,isEmpty:function(n){if(null==n)return!0;var r=Y(n);return"number"==typeof r&&(U(n)||S(n)||L(n))?0===r:0===Y(nn(n))},isMatch:rn,isEqual:function(n,r){return on(n,r)},isMap:dn,isWeakMap:gn,isSet:bn,isWeakSet:mn,keys:nn,allKeys:an,values:jn,pairs:function(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:_n,functions:wn,methods:wn,extend:xn,extendOwn:Sn,assign:Sn,defaults:On,create:function(n,r){var t=Mn(n);return r&&Sn(t,r),t},clone:En,tap:function(n,r){return r(n),n},get:Tn,has:function(n,r){for(var t=(r=Nn(r)).length,e=0;e<t;e++){var u=r[e];if(!W(n,u))return!1;n=n[u]}return!!t},mapObject:function(n,r,t){r=qn(r,t);for(var e=nn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},identity:kn,constant:C,noop:Un,toPath:Bn,property:Rn,propertyOf:function(n){return null==n?Un:function(r){return Tn(n,r)}},matcher:Dn,matches:Dn,times:function(n,r,t){var e=Array(Math.max(0,n));r=Fn(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:Wn,now:zn,escape:Cn,unescape:Kn,templateSettings:Jn,template:function(n,r,t){!r&&t&&(r=t),r=On({},r,tn.templateSettings);var e=RegExp([(r.escape||Gn).source,(r.interpolate||Gn).source,(r.evaluate||Gn).source].join("|")+"|$","g"),u=0,o="__p+='";n.replace(e,(function(r,t,e,i,a){return o+=n.slice(u,a).replace(Qn,Xn),u=a+r.length,t?o+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?o+="'+\n((__t=("+e+"))==null?'':__t)+\n'":i&&(o+="';\n"+i+"\n__p+='"),r})),o+="';\n";var i,a=r.variable;if(a){if(!Yn.test(a))throw new Error("variable is not a bare identifier: "+a)}else o="with(obj||{}){\n"+o+"}\n",a="obj";o="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{i=new Function(a,"_",o)}catch(n){throw n.source=o,n}var f=function(n){return i.call(this,n,tn)};return f.source="function("+a+"){\n"+o+"}",f},result:function(n,r,t){var e=(r=Nn(r)).length;if(!e)return D(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=D(o)?o.call(n):o}return n},uniqueId:function(n){var r=++Zn+"";return n?n+r:r},chain:function(n){var r=tn(n);return r._chain=!0,r},iteratee:Pn,partial:rr,bind:tr,bindAll:or,memoize:function(n,r){var t=function(e){var u=t.cache,o=""+(r?r.apply(this,arguments):e);return W(u,o)||(u[o]=n.apply(this,arguments)),u[o]};return t.cache={},t},delay:ir,defer:ar,throttle:function(n,r,t){var e,u,o,i,a=0;t||(t={});var f=function(){a=!1===t.leading?0:zn(),e=null,i=n.apply(u,o),e||(u=o=null)},c=function(){var c=zn();a||!1!==t.leading||(a=c);var l=r-(c-a);return u=this,o=arguments,l<=0||l>r?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e<o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))<i||u===1/0&&o===1/0)&&(o=n,i=u)}));return o},shuffle:function(n){return Tr(n,1/0)},sample:Tr,sortBy:function(n,r,t){var e=0;return r=qn(r,t),Nr(_r(n,(function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}})).sort((function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(t>e||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index})),"value")},groupBy:Dr,indexBy:Rr,countBy:Fr,partition:Vr,toArray:function(n){return n?U(n)?i.call(n):S(n)?n.match(Pr):er(n)?_r(n,kn):jn(n):[]},size:function(n){return null==n?0:er(n)?n.length:nn(n).length},pick:Ur,omit:Wr,first:Lr,head:Lr,take:Lr,initial:zr,last:function(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[n.length-1]:$r(n,Math.max(0,n.length-r))},rest:$r,tail:$r,drop:$r,compact:function(n){return Sr(n,Boolean)},flatten:function(n,r){return ur(n,r,!1)},without:Kr,uniq:Jr,unique:Jr,union:Gr,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=Y(n);e<u;e++){var o=n[e];if(!Er(r,o)){var i;for(i=1;i<t&&Er(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:Cr,unzip:Hr,transpose:Hr,zip:Qr,object:function(n,r){for(var t={},e=0,u=Y(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(i.call(n,e,e+=r));return t},mixin:Yr,default:tn});return Zr._=Zr,Zr}));
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/genindex.html b/VimbaX/doc/VimbaX_ReleaseNotes/genindex.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ea5780fdaa838ae5238c4eda47f7eb6d97f62fe
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/genindex.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Index &mdash; Vimba X Release Notes 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="#" />
+    <link rel="search" title="Search" href="search.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Release Notes
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="Windows.html">Vimba X for Windows Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Linux.html">Vimba X for Linux x86_64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ARM.html">Vimba X for ARM64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="GigETL.html">Vimba GigE TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="USBTL.html">Vimba USB TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="CSITL.html">Vimba CSI TL Release Notes</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Release Notes</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Index</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ 
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/index.html b/VimbaX/doc/VimbaX_ReleaseNotes/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..bf2adea4d2e9f2f75da5db7246f2222f0c7bb679
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/index.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Vimba X Release Notes &mdash; Vimba X Release Notes 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Vimba X for Windows Release Notes" href="Windows.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="#" class="icon icon-home"> Vimba X Release Notes
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="Windows.html">Vimba X for Windows Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Linux.html">Vimba X for Linux x86_64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ARM.html">Vimba X for ARM64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="GigETL.html">Vimba GigE TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="USBTL.html">Vimba USB TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="CSITL.html">Vimba CSI TL Release Notes</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="#">Vimba X Release Notes</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="#" class="icon icon-home"></a> &raquo;</li>
+      <li>Vimba X Release Notes</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vimba-x-release-notes">
+<h1>Vimba X Release Notes<a class="headerlink" href="#vimba-x-release-notes" title="Permalink to this headline"></a></h1>
+<div class="toctree-wrapper compound">
+<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="Windows.html">Vimba X for Windows Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="Windows.html#summary">Summary</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Windows.html#components-and-version-reference">Components and version reference</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Windows.html#hardware-requirements">Hardware requirements</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Windows.html#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Windows.html#correlations-with-other-allied-vision-software-packages">Correlations with other Allied Vision Software Packages</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Windows.html#supported-operating-systems">Supported operating systems</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Windows.html#known-issues">Known issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Windows.html#changes-and-release-history">Changes and release history</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="Linux.html">Vimba X for Linux x86_64 Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="Linux.html#summary">Summary</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Linux.html#hardware-requirements">Hardware requirements</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Linux.html#tested-platforms-and-cameras">Tested platforms and cameras</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Linux.html#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Linux.html#known-issues">Known issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="Linux.html#changes-and-release-history">Changes and release history</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="ARM.html">Vimba X for ARM64 Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="ARM.html#summary">Summary</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ARM.html#hardware-requirements">Hardware requirements</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ARM.html#tested-platforms-and-cameras">Tested platforms and cameras</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ARM.html#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ARM.html#known-issues">Known issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ARM.html#changes-and-release-history">Changes and release history</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ARM.html#id1">Known issues</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="GigETL.html">Vimba GigE TL Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="GigETL.html#components-and-version-reference">Components and Version Reference</a></li>
+<li class="toctree-l2"><a class="reference internal" href="GigETL.html#hardware-requirements">Hardware Requirements</a></li>
+<li class="toctree-l2"><a class="reference internal" href="GigETL.html#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="GigETL.html#correlations-with-other-allied-vision-software-packages">Correlations with other Allied Vision Software Packages</a></li>
+<li class="toctree-l2"><a class="reference internal" href="GigETL.html#known-issues">Known Issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="GigETL.html#changes-and-release-history">Changes and release history</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="USBTL.html">Vimba USB TL Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="USBTL.html#components-and-version-reference">Components and Version Reference</a></li>
+<li class="toctree-l2"><a class="reference internal" href="USBTL.html#hardware-requirements">Hardware Requirements</a></li>
+<li class="toctree-l2"><a class="reference internal" href="USBTL.html#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="USBTL.html#correlations-with-other-allied-vision-software-packages">Correlations with other Allied Vision Software Packages</a></li>
+<li class="toctree-l2"><a class="reference internal" href="USBTL.html#known-issues">Known issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="USBTL.html#changes-and-release-history">Changes and release history</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="CSITL.html">Vimba CSI TL Release Notes</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="CSITL.html#components-and-version-reference">Components and Version Reference</a></li>
+<li class="toctree-l2"><a class="reference internal" href="CSITL.html#supported-hardware-and-driver">Supported hardware and driver</a></li>
+<li class="toctree-l2"><a class="reference internal" href="CSITL.html#installation">Installation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="CSITL.html#correlations-with-other-allied-vision-software-packages">Correlations with other Allied Vision Software Packages</a></li>
+<li class="toctree-l2"><a class="reference internal" href="CSITL.html#known-issues">Known issues</a></li>
+<li class="toctree-l2"><a class="reference internal" href="CSITL.html#changes-and-release-history">Changes and release history</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="Windows.html" class="btn btn-neutral float-right" title="Vimba X for Windows Release Notes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/objects.inv b/VimbaX/doc/VimbaX_ReleaseNotes/objects.inv
new file mode 100644
index 0000000000000000000000000000000000000000..16d333c682f38ec9ad4e16b44da7fda22415c8fd
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/objects.inv
@@ -0,0 +1,5 @@
+# Sphinx inventory version 2
+# Project: Vimba X Release Notes
+# Version: 2023-1
+# The remainder of this file is compressed using zlib.
+xڅ�]�0����!ѝE��!��]LwRa�pJ��S�������}��8���[�X��	�eV�y�ÓW��"C"N�Fa�#���T��Gt혧ݓDb�^^6�*��<V�ڍ�0n�D;}{jE��[^R��8!s}��
)�=Gy>#1��d�����76-)�yG�.8�����}N�ӊ��G�:�n$U��d҉�@R�>$�̳
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/search.html b/VimbaX/doc/VimbaX_ReleaseNotes/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..a61b946eb023570585eb133c86acb97973ba0a5d
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/search.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Search &mdash; Vimba X Release Notes 2023-1 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+    
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="#" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> Vimba X Release Notes
+          </a>
+              <div class="version">
+                2023-1
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="#" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="Windows.html">Vimba X for Windows Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Linux.html">Vimba X for Linux x86_64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ARM.html">Vimba X for ARM64 Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="GigETL.html">Vimba GigE TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="USBTL.html">Vimba USB TL Release Notes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="CSITL.html">Vimba CSI TL Release Notes</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">Vimba X Release Notes</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Search</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <noscript>
+  <div id="fallback" class="admonition warning">
+    <p class="last">
+      Please activate JavaScript to enable the search functionality.
+    </p>
+  </div>
+  </noscript>
+
+  
+  <div id="search-results">
+  
+  </div>
+
+           </div>
+          </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+  <script>
+    jQuery(function() { Search.loadIndex("searchindex.js"); });
+  </script>
+  
+  <script id="searchindexloader"></script>
+   
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VimbaX_ReleaseNotes/searchindex.js b/VimbaX/doc/VimbaX_ReleaseNotes/searchindex.js
new file mode 100644
index 0000000000000000000000000000000000000000..28c8276e75b9ee72e6c1cfed609ebfbe488e7e41
--- /dev/null
+++ b/VimbaX/doc/VimbaX_ReleaseNotes/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({docnames:["ARM","CSITL","GigETL","Linux","USBTL","Windows","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["ARM.md","CSITL.md","GigETL.md","Linux.md","USBTL.md","Windows.md","index.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,3,5],"000":0,"04":3,"10":[2,4,5],"100":0,"11":[3,5],"12":0,"15":[0,3,5],"2":[3,5],"20":[0,2,3],"21h2":5,"22":3,"22h2":5,"3":[0,3,5],"35":[0,1],"3rd":4,"4":[0,3,5],"400":0,"5":[0,1,3,4,5],"520":2,"540":2,"5x5":[0,3,5],"6":[0,3,5],"64":[0,2,3,4,5],"7":[0,1,3,4,5],"710":2,"8":[0,3,4,5],"9":[0,3,5],"byte":2,"case":[2,5],"default":[0,2,3,4,5],"enum":[0,3,5],"function":[0,2,4,5],"new":[0,1,2,3,4,5],"null":1,"super":[0,3],"switch":[0,1,2],"try":[0,1,2,3],"while":[2,5],A:[0,2,3,5],By:[0,2,3,5],For:[0,1,2,4,5],If:[0,1,2,3,5],In:[0,3,5],No:[0,3,5],Not:[0,3,5],The:[0,2,3,4,5],Then:[0,3],To:[0,3,5],With:[0,3,5],_setgentlpath:[0,3],about:5,access:[0,2,3,5],accessmod:[0,3,5],acquir:0,acquisit:[0,1,2,3,5],action:[0,2,3,5],activ:[2,5],ad:[0,2,3,4,5],adapt:[0,3],addit:[0,2,3,5],addition:[2,4,5],address:[0,2,3,5],adjust:[0,2],affect:2,after:[2,5],again:[0,1,3,5],agx:[0,1],alik:2,all:[0,1,3,5],alli:6,alloc:[1,2],allow:2,alreadi:[0,3,5],alvium:[0,1,3,5],alwai:5,among:5,an:[0,1,2,3,5],ani:[0,3,4,5],announc:1,api:[0,3,5],app:4,appear:[0,3,5],appli:[0,3,4,5],applic:[0,1,2,3],approx:[0,1],approxim:[0,1],ar:[0,2,3,4,5],archiv:[0,3],arm64:[2,4,6],arm:0,armv8:[0,2,4],asynchronousgrab:[0,3,5],automat:[0,3,5],auvidea:[0,1],avail:[0,2,5],avt:[0,1,2,3,4,5],bad:[0,3,5],base:[0,3,4,5],becaus:[0,4,5],been:[0,3,4,5],befor:5,behavior:[2,5],behaviour:2,best:[0,3,4,5],better:[1,2,3,4,5],between:4,bin:[0,3],bind:2,bit:[0,2,3,4,5],blue:[2,5],board:[0,1],boost:4,bottleneck:2,broadcast:2,bu:[0,3,4,5],buffer:[0,1,2],buffer_info_delivered_imageheight:2,bufferhandlingmod:2,bug:[2,4,5],built:[0,2,3,4,5],button:[0,3,5],cach:4,camera:[1,2,4,6],can:[0,1,2,3,4,5],cannot:[0,2,5],card:[0,2,3,5],carrier:[0,1],categori:2,caus:[0,1,2,3,5],certain:2,certif:[2,4],chang:6,channel:[0,3,4,5],chip:[0,3,4,5],chunk:[0,2,3,5],cleanup:2,click:[0,3,5],close:[0,1,3],code:[2,5],come:0,command:[0,2,3,4,5],compat:[0,2,3,4,5],compil:5,compliant:2,compon:[0,3,6],config:2,configur:[0,3,5],conflict:4,conform:[0,3,4,5],connect:[0,2,5],consist:[0,3,5],consol:2,consum:[0,3],contact:[0,3,4,5],control:[0,3,4,5],copi:4,correct:[2,5],correctli:2,correl:6,count:2,csi:6,csitl:1,cti:[0,1,2,3,4,5],current:4,custom:[2,4],d:[0,3],deactiv:[2,5],debian:3,decreas:2,delock:[0,3,4,5],detect:[0,3,4],develop:[0,1,3],devic:[2,5],devicedriverpath:4,deviceloc:4,deviceupdatetimeout:2,dhcp:[0,3,5],dialog:[0,3,4,5],did:2,differ:[0,2,5],directli:0,directori:[0,3],disabl:[2,5],disconnect:5,discoveri:[0,2,3],discoverybroadcastmod:2,displai:[0,1,2,3,4,5],dll:[0,5],document:2,doe:[0,1,2,3,5],doesn:[0,3,5],done:0,doubl:2,driver:[0,2,3,4,5,6],drop:[0,1,2,3,5],duplic:2,dure:[0,2,3,5],e:[0,2,3],eight:2,embed:[2,4],enabl:2,endia:2,endian:2,endpoint:4,environ:[0,3,5],error:[0,1,2,3,4,5],especi:[0,2,3,5],etc:[0,3],ethernet:[0,2,3,5],even:[2,5],event:[2,4],everi:[0,3],ex:[4,5],exampl:[0,2,3,4,5],except:[0,3,5],excess:[0,3,5],exclus:[0,3,5],execut:[0,3],exist:2,expect:2,experienc:[0,2,3],exposur:[0,1],express:[0,3,4,5],extend:[2,5],fail:[0,3,5],featur:[0,2,3,4,5],featurepersisttyp:0,feel:[0,3,4,5],few:[0,3,5],file:4,fill:2,filter:[2,5],filterclass:2,find:[0,3],firewal:2,firmwar:[0,1,3,5],fix:[0,1,2,3,4,5],folder:[0,3],follow:[0,1,3,5],forc:[0,3,5],forceip:2,format:[0,1,2,3,5],formerli:2,found:[0,3,5],frame:[0,1,2,3,5],free:[0,3,4,5],freez:[2,5],from:[0,1,2,3,4,5],gbit:2,genapimodul:[0,3,5],genicam:[0,1,2,3,5],genicam_gentl64_path:[0,3],gentl:[0,2,3,4],get:[0,1],gevheartbeatinterv:2,gevheartbeattimeout:2,ghz:[2,4],gigabit:[0,2,3,5],gige:6,gigetl:[0,2,3,5],go:[0,3],goldey:[0,3,5],greater:[0,1],grow:2,guid:[0,3],gvcp:[0,3],gvsp:[0,2,3,5],gvsphostreceivebuff:2,gvsphostreceivebuffers:2,gvspmaxlookback:2,gvsppackets:2,ha:[0,3,4,5],halt:4,handl:[2,4],hardwar:6,have:[0,2,3,5],heartbeat:2,hidden:2,high:2,higher:[0,2,3,4,5],highli:[0,3,4,5],hint:[0,3,5],histori:6,host:[0,1,2,3,4,5],how:[2,4],howev:[0,3,4,5],id:2,imag:[0,2,3,5],improv:[0,2,3,4,5],includ:[0,2,3,5],incompat:2,incorrect:5,increas:[0,1,2,3,4],increment:[0,4,5],inf:2,inform:[0,1],initi:[0,3,5],input:[0,3,5],instal:6,installdir:[0,3],instead:[0,1,2,3,4,5],instruct:[2,4,5],intel:[0,2,3,4,5],interfac:[0,2,3,4,5],intern:[0,2,4,5],interv:2,invalid:2,io:[0,3,5],ioi:[0,3,4,5],ip:[0,2,3,5],issu:6,its:[0,3],jetpack:[0,1],jetson:[0,1,2,4],jnx30:[0,1],kit:[0,1],known:6,l4t:[0,1],laptop:[2,3,4,5],last:[0,3],latest:[0,1],layer:[0,1,2,3,4,5],lead:[2,5],led:2,level:[0,3,5],librari:[0,3,4,5],libtiff:[0,3,5],libusb:4,libvimbacpp:0,libvimbaimagetransform:0,libvmbc:[0,3],libvmbcpp:3,libvmbimagetransform:3,like:[0,3],limit:2,linux:[2,4,6],list:[0,2,3,5],list_featur:[0,3,5],listfeatur:[0,3,5],littl:2,load:[0,2,3,5],locat:[0,3],lock:[0,3],log:[2,5],lost:[2,5],lt:3,ltsc:5,lut:[0,3,5],mai:[0,1,2,3,4,5],main:[0,3,5],make:0,malconfigur:[0,5],mani:[0,2,3,5],match:2,matrix:[0,3,5],maxtransfers:4,mbit:0,memori:2,messag:[0,2,3,5],microsoft:5,might:[2,5],minim:2,minor:[2,4],minut:[0,3,5],misconfigur:2,mislead:[0,3,5],miss:2,mode:[0,1,2,3,5],model:[0,1,3,5],modul:[2,4],more:[0,2,3,5],msi:4,multi:2,multicastipaddress:2,multicastipadress:2,multipl:[0,2,3,4,5],must:[2,5],n:[0,2,3],name:[0,1,2,3,4,5],necessari:5,net:[0,3,5],network:[0,2,3,5],nevertheless:[0,3,4,5],nic:[2,5],nice:[0,2,3],nolut:0,nonpag:2,now:[2,4],number:[0,1,2],nvidia:[0,1],nx:[0,1],occur:[0,2,3,5],off:5,old:4,one:[0,2,3,5],onli:[0,2,3,4,5],open:[0,1,3,4,5],oper:6,opt:[0,3],option:[0,2,3,5],order:[2,5],orin:[0,1],other:[0,3,6],our:[0,2,3,4,5],out:5,output:[0,3,5],overwrit:[2,5],own:[0,3],packag:6,packet:[2,5],paramet:[0,2,3,5],part:[2,4],parti:[0,2,3,4,5],path:[0,3],pc:[2,3,4,5],pci:[0,3,4,5],pd:[0,1],pdf:2,pending_ack:0,per:[0,3],perform:[0,1,2,3,4,5],physic:[0,3],pixel:[0,3,5],platform:6,pleas:[0,1,2,3,4,5],plug:5,plugin:4,pool:2,precompil:[0,3],prepar:2,prerequisit:1,prevent:[0,2,3],prioriti:[0,2,3],privileg:[0,3],problem:[0,2,3,4,5],process:[0,3,5],processor:[0,2,3,4,5],profil:[0,3],program:4,provid:[2,5],py:[0,3,5],python:[0,3,5],qt:[0,3,5],qwt:[0,3,5],rang:2,react:0,reason:0,reboot:[0,1,3],receiv:2,recommend:[0,2,3,4,5],reduc:2,refer:[0,3,6],refresh:[0,3,5],regist:[0,3],relat:2,remark:4,remov:[0,2,3,5],renam:[0,3,5],replac:2,report:[0,2,5],request:[0,2,3],requir:[1,6],resend:[0,2,3,4,5],reset:[1,4],respond:[0,3,5],restart:5,restrict:2,roi:[0,2,3,5],run:[0,3,4,5],s:[0,2,5],same:[0,1,2,3,4,5],save:[0,3,5],schedul:[0,2,3,5],screen:[2,5],script:[0,3],sdk:[0,2,3,4,5],second:[0,1,3,5],section:[0,3],see:[0,1,2,3],select:0,send:[0,2,3],separ:2,serial:2,session:[0,3,5],set:[0,2,3,4,5],setup:5,sfnc:2,sh:[0,3],shell:[0,3],ship:[0,3],show:2,shown:[0,3,5],shutdown:[0,3,5],similar:[0,3,5],singl:2,slight:2,slowli:0,small:[0,2,3,5],smooth:5,so:[0,3],so_rcvbuf:2,socket:[2,5],softwar:6,solv:[2,4],som:[0,1],some:[0,3,5],sometim:[0,3,5],sporad:[0,3,5],stai:5,standard:[0,2,3,4,5],start:[0,1,5],startup:[0,3,5],state:4,statist:2,statu:[2,4,5],still:[2,5],stop:[0,1,3,5],stream:[0,1,2,3,4,5],streamabl:0,streambytespersecond:0,streaminform:2,stringlength:[0,3,5],studio:5,subnet:[0,2,5],successfulli:5,sudo:[0,2,3],summari:6,support:[0,2,3,4,6],sure:0,system:[0,2,3,4,6],t:[0,3,5],tab:[0,3,5],take:[0,3,5],tar:[0,3],technic:[0,3,4,5],test:[1,4,5,6],tgz:[0,3],than:[0,1],therefor:[0,3],thi:[0,2,3,4,5],third:[0,2,3,5],through:[0,3],time:[0,1,2,5],timeout:[0,2,3,5],tl:[0,3,5,6],too:[0,3,4,5],tool:[0,3,5],transform:[0,3,5],transport:[0,1,2,3,4,5],trigger:[0,3,4,5],troubl:[0,2,3],troubleshoot:[0,3],type:[0,3,5],ubuntu:3,uncompil:[0,3],uncompress:[0,3],under:[0,3],unexpect:[2,5],uninstal:[0,3,4],unplug:5,up:[0,2,3,5],updat:[0,2,3,4,5],us:[0,1,2,3,4,5],usabl:2,usag:2,usb:6,usbtl:[0,3,5],user:[0,3,4,5],v4l2:[0,1],valu:[0,2,3,4,5],variabl:[0,3,5],vendor:[0,3,4,5],veri:5,versa:[0,1],version:[0,3,6],vice:[0,1],viewer:[0,2,3,5],vimbac:[0,3,5],vimbacpp:[0,3,5],vimbacsitl:[0,1],vimbadriverinstal:4,vimbagigefilt:2,vimbagigetl:[0,2,3,5],vimbapython:[0,3,5],vimbausbtl:[0,3,4,5],vimbax:[0,3,5],visibl:[0,3,4,5],vision:6,visual:5,vmb:[0,3,5],vmbc:[0,3,5],vmbcpp:[0,3,5],vmbgetimagetransformvers:[0,3,5],vmbgetvers:[0,3,5],vmbimagetransform:5,vmbpy:[0,3,5],vmbsetimageinfofromstr:[0,3,5],vmbviewer:[0,3],vpn:[2,5],wa:[0,1,3,4,5],wait:2,wan:2,we:[0,2,3,4,5],were:[0,1],when:[0,2,3,4,5],where:2,which:[0,2,3,5],window:[2,4,6],wireless:2,wireshark:2,within:[0,3,5],work:[2,5],workaround:[0,3],write:[0,3],wrong:[0,2,3,5],x64:2,x86:[2,3,4,5],x86_64:6,x:[1,2,4],xavier:[0,1,2,4],xf:[0,3],xml:4,you:[0,1,2,3,4,5],your:[0,1,2,3,5],zero:4},titles:["Vimba X for ARM64 Release Notes","Vimba CSI TL Release Notes","Vimba GigE TL Release Notes","Vimba X for Linux x86_64 Release Notes","Vimba USB TL Release Notes","Vimba X for Windows Release Notes","Vimba X Release Notes"],titleterms:{"0":[1,2,4],"1":[0,1,2,3,4,5],"2":[0,1,2,4],"2022":[0,3,5],"2023":[0,3,5],"3":[2,4],"4":[2,4],"5":2,"6":2,"7":2,"8":2,"9":2,alli:[0,1,2,3,4,5],arm64:0,camera:[0,3,5],chang:[0,1,2,3,4,5],compon:[1,2,4,5],content:6,correl:[1,2,4,5],csi:[0,1],driver:1,gige:[0,2,3,5],hardwar:[0,1,2,3,4,5],histori:[0,1,2,3,4,5],instal:[0,1,2,3,4,5],issu:[0,1,2,3,4,5],known:[0,1,2,3,4,5],linux:3,note:[0,1,2,3,4,5,6],oper:5,other:[1,2,4,5],packag:[1,2,4,5],platform:[0,3],refer:[1,2,4,5],releas:[0,1,2,3,4,5,6],requir:[0,2,3,4,5],softwar:[1,2,4,5],summari:[0,3,5],support:[1,5],system:5,test:[0,3],tl:[1,2,4],usb:[0,3,4,5],version:[1,2,4,5],vimba:[0,1,2,3,4,5,6],vision:[0,1,2,3,4,5],window:5,x86_64:3,x:[0,3,5,6]}})
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/.buildinfo b/VimbaX/doc/VmbCPP_Function_Reference/.buildinfo
new file mode 100644
index 0000000000000000000000000000000000000000..9b126f4f4adb276005ad9a103a8bf93baf0be32a
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: da139a110a91fe725d60faef7a9acbee
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/.doctrees/cppAPIReference.doctree b/VimbaX/doc/VmbCPP_Function_Reference/.doctrees/cppAPIReference.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..bf0abaa310ca3833fe2af856a67af44b773eb86e
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/.doctrees/cppAPIReference.doctree differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/.doctrees/environment.pickle b/VimbaX/doc/VmbCPP_Function_Reference/.doctrees/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..ebda2a26f2f75f94b975f8526710aaca3303e3a6
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/.doctrees/environment.pickle differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/.doctrees/index.doctree b/VimbaX/doc/VmbCPP_Function_Reference/.doctrees/index.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..3d852931c8f41dd3102e059d41fda46da83bd757
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/.doctrees/index.doctree differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/basic.css b/VimbaX/doc/VmbCPP_Function_Reference/_static/basic.css
new file mode 100644
index 0000000000000000000000000000000000000000..bf18350b65c61f31b2f9f717c03e02f17c0ab4f1
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/basic.css
@@ -0,0 +1,906 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+div.section::after {
+    display: block;
+    content: '';
+    clear: left;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+    overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    float: left;
+    width: 80%;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    float: left;
+    width: 20%;
+    border-left: none;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li p.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable ul {
+    margin-top: 0;
+    margin-bottom: 0;
+    list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+    padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+    padding: 2px;
+    border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+    min-width: 450px;
+    max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
+a.headerlink {
+    visibility: hidden;
+}
+
+a.brackets:before,
+span.brackets > a:before{
+    content: "[";
+}
+
+a.brackets:after,
+span.brackets > a:after {
+    content: "]";
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-default {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar,
+aside.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+    clear: right;
+    overflow-x: auto;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+div.admonition, div.topic, blockquote {
+    clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+aside.sidebar > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+    margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+    display: block;
+    content: '';
+    clear: both;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.align-center {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.align-default {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+th > :first-child,
+td > :first-child {
+    margin-top: 0px;
+}
+
+th > :last-child,
+td > :last-child {
+    margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure, figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption, figcaption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist {
+    margin: 1em 0;
+}
+
+table.hlist td {
+    vertical-align: top;
+}
+
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+	font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+.sig-name {
+	font-size: 1.1em;
+}
+
+code.descname {
+    font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+    background-color: transparent;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.sig-param.n {
+	font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+	font-family: unset;
+}
+
+.sig.c   .k, .sig.c   .kt,
+.sig.cpp .k, .sig.cpp .kt {
+	color: #0033B3;
+}
+
+.sig.c   .m,
+.sig.cpp .m {
+	color: #1750EB;
+}
+
+.sig.c   .s, .sig.c   .sc,
+.sig.cpp .s, .sig.cpp .sc {
+	color: #067D17;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
+    margin-top: 0px;
+}
+
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
+    margin-bottom: 0px;
+}
+
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+    margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+    margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+    margin-bottom: 0;
+}
+
+dl.footnote > dt,
+dl.citation > dt {
+    float: left;
+    margin-right: 0.5em;
+}
+
+dl.footnote > dd,
+dl.citation > dd {
+    margin-bottom: 0em;
+}
+
+dl.footnote > dd:after,
+dl.citation > dd:after {
+    content: "";
+    clear: both;
+}
+
+dl.field-list {
+    display: grid;
+    grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+    font-weight: bold;
+    word-break: break-word;
+    padding-left: 0.5em;
+    padding-right: 5px;
+}
+
+dl.field-list > dt:after {
+    content: ":";
+}
+
+dl.field-list > dd {
+    padding-left: 0.5em;
+    margin-top: 0em;
+    margin-left: 0em;
+    margin-bottom: 0em;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd > :first-child {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+    margin-bottom: 0;
+}
+
+dt:target, span.highlighted {
+    background-color: #fbe54e;
+}
+
+rect.highlighted {
+    fill: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+.classifier:before {
+    font-style: normal;
+    margin: 0 0.5em;
+    content: ":";
+    display: inline-block;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+pre, div[class*="highlight-"] {
+    clear: both;
+}
+
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+    white-space: nowrap;
+}
+
+div[class*="highlight-"] {
+    margin: 1em 0;
+}
+
+td.linenos pre {
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    display: block;
+}
+
+table.highlighttable tbody {
+    display: block;
+}
+
+table.highlighttable tr {
+    display: flex;
+}
+
+table.highlighttable td {
+    margin: 0;
+    padding: 0;
+}
+
+table.highlighttable td.linenos {
+    padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+    flex: 1;
+    overflow: hidden;
+}
+
+.highlight .hll {
+    display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+    margin: 0;
+}
+
+div.code-block-caption + div {
+    margin-top: 0;
+}
+
+div.code-block-caption {
+    margin-top: 1em;
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+table.highlighttable td.linenos,
+span.linenos,
+div.highlight span.gp {  /* gp: Generic.Prompt */
+  user-select: none;
+  -webkit-user-select: text; /* Safari fallback only */
+  -webkit-user-select: none; /* Chrome/Safari */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* IE10+ */
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    margin: 1em 0;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+span.eqno a.headerlink {
+    position: absolute;
+    z-index: 1;
+}
+
+div.math:hover a.headerlink {
+    visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/badge_only.css b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/badge_only.css
new file mode 100644
index 0000000000000000000000000000000000000000..e380325bc6e273d9142c2369883d2a4b2a069cf1
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/badge_only.css
@@ -0,0 +1 @@
+.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..6cb60000181dbd348963953ac8ac54afb46c63d5
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff2 b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..7059e23142aae3d8bad6067fc734a6cffec779c9
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff2 differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..f815f63f99da80ad2be69e4021023ec2981eaea0
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff2 b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..f2c76e5bda18a9842e24cd60d8787257da215ca7
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff2 differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.eot b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.eot differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.svg b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000000000000000000000000000000000000..855c845e538b65548118279537a04eab2ec6ef0d
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+<?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>
+<metadata>
+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
+ By ,,,
+Copyright Dave Gandy 2016. All rights reserved.
+</metadata>
+<defs>
+<font id="FontAwesome" horiz-adv-x="1536" >
+  <font-face 
+    font-family="FontAwesome"
+    font-weight="400"
+    font-stretch="normal"
+    units-per-em="1792"
+    panose-1="0 0 0 0 0 0 0 0 0 0"
+    ascent="1536"
+    descent="-256"
+    bbox="-1.02083 -256.962 2304.6 1537.02"
+    underline-thickness="0"
+    underline-position="0"
+    unicode-range="U+0020-F500"
+  />
+<missing-glyph horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".notdef" horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".null" horiz-adv-x="0" 
+ />
+    <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597" 
+ />
+    <glyph glyph-name="space" unicode=" " horiz-adv-x="448" 
+ />
+    <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1792" 
+d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+    <glyph glyph-name="music" unicode="&#xf001;" 
+d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
+t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664" 
+d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
+t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="envelope" unicode="&#xf003;" horiz-adv-x="1792" 
+d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
+t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
+M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792" 
+d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
+q-18 -18 -44 -18z" />
+    <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664" 
+d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
+l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="star_empty" unicode="&#xf006;" horiz-adv-x="1664" 
+d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
+l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280" 
+d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
+t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920" 
+d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
+q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
+t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
+q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
+t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="th_large" unicode="&#xf009;" horiz-adv-x="1664" 
+d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
+h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="th_list" unicode="&#xf00b;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ok" unicode="&#xf00c;" horiz-adv-x="1792" 
+d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+    <glyph glyph-name="remove" unicode="&#xf00d;" horiz-adv-x="1408" 
+d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
+t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+    <glyph glyph-name="zoom_in" unicode="&#xf00e;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
+q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
+t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="zoom_out" unicode="&#xf010;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
+M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
+" />
+    <glyph glyph-name="off" unicode="&#xf011;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
+t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+    <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792" 
+d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="cog" unicode="&#xf013;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
+q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
+l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
+q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+    <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408" 
+d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
+q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664" 
+d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
+l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+    <glyph glyph-name="file_alt" unicode="&#xf016;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+" />
+    <glyph glyph-name="time" unicode="&#xf017;" 
+d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920" 
+d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
+q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+    <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664" 
+d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
+q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+    <glyph glyph-name="download" unicode="&#xf01a;" 
+d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
+t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="upload" unicode="&#xf01b;" 
+d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
+t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="inbox" unicode="&#xf01c;" 
+d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
+q25 -61 25 -123z" />
+    <glyph glyph-name="play_circle" unicode="&#xf01d;" 
+d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="repeat" unicode="&#xf01e;" 
+d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
+l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+    <glyph glyph-name="refresh" unicode="&#xf021;" 
+d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
+q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
+q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792" 
+d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
+M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
+t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152" 
+d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792" 
+d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
+t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664" 
+d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
+t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
+t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+    <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+    <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
+t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
+t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+    <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408" 
+d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
+M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+    <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792" 
+d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
+M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+    <glyph glyph-name="tag" unicode="&#xf02b;" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664" 
+d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
+q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
+q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
+t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+    <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280" 
+d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664" 
+d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
+v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+    <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920" 
+d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
+q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664" 
+d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
+q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
+q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+    <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408" 
+d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
+q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
+t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
+t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+    <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024" 
+d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
+q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+    <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792" 
+d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
+t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
+q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+    <glyph glyph-name="text_width" unicode="&#xf035;" 
+d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
+t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
+t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
+t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+    <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
+h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792" 
+d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
+t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
+q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
+q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792" 
+d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792" 
+d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792" 
+d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
+q39 -17 39 -59z" />
+    <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920" 
+d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
+q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="pencil" unicode="&#xf040;" 
+d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
+q53 0 91 -38l235 -234q37 -39 37 -91z" />
+    <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024" 
+d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+    <glyph glyph-name="adjust" unicode="&#xf042;" 
+d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024" 
+d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
+q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+    <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792" 
+d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
+l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+    <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664" 
+d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
+q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
+t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664" 
+d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
+q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
+q24 -24 24 -57t-24 -57z" />
+    <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
+t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024" 
+d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
+    <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792" 
+d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
+q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664" 
+d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408" 
+d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+    <glyph glyph-name="pause" unicode="&#xf04c;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="stop" unicode="&#xf04d;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
+q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
+    <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538" 
+d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+    <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280" 
+d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280" 
+d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="plus_sign" unicode="&#xf055;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
+t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="minus_sign" unicode="&#xf056;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="remove_sign" unicode="&#xf057;" 
+d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
+q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_sign" unicode="&#xf058;" 
+d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="question_sign" unicode="&#xf059;" 
+d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
+q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="info_sign" unicode="&#xf05a;" 
+d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
+t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="screenshot" unicode="&#xf05b;" 
+d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
+q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
+q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="remove_circle" unicode="&#xf05c;" 
+d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
+t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_circle" unicode="&#xf05d;" 
+d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
+t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ban_circle" unicode="&#xf05e;" 
+d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
+t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+    <glyph glyph-name="arrow_left" unicode="&#xf060;" 
+d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
+t32.5 -90.5z" />
+    <glyph glyph-name="arrow_right" unicode="&#xf061;" 
+d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+    <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664" 
+d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
+q37 -39 37 -91z" />
+    <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664" 
+d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+    <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792" 
+d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
+t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+    <glyph glyph-name="resize_full" unicode="&#xf065;" 
+d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
+q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="resize_small" unicode="&#xf066;" 
+d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
+t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+    <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664" 
+d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
+q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+    <glyph glyph-name="exclamation_sign" unicode="&#xf06a;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
+q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+    <glyph glyph-name="gift" unicode="&#xf06b;" 
+d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
+q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
+t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792" 
+d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
+q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
+t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+    <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408" 
+d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
+q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+    <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792" 
+d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
+t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+    <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792" 
+d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
+q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
+q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
+" />
+    <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792" 
+d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
+q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+    <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408" 
+d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
+q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+    <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664" 
+d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
+M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
+q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
+h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792" 
+d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
+t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
+v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
+t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792" 
+d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
+q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="magnet" unicode="&#xf076;" 
+d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
+q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792" 
+d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792" 
+d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920" 
+d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
+zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
+" />
+    <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664" 
+d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
+t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664" 
+d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920" 
+d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
+t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768" 
+d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048" 
+d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+    <glyph glyph-name="twitter_sign" unicode="&#xf081;" 
+d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
+q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
+t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="facebook_sign" unicode="&#xf082;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792" 
+d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
+t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
+q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792" 
+d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
+l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
+t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+    <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920" 
+d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
+l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
+l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
+q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
+t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
+q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
+q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+    <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792" 
+d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
+q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
+q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+    <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
+t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
+q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
+q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;" 
+d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
+t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
+M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
+h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
+    <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896" 
+d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+    <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792" 
+d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
+q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
+q224 0 351 -124t127 -344z" />
+    <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664" 
+d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
+q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+    <glyph glyph-name="linkedin_sign" unicode="&#xf08c;" 
+d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
+q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152" 
+d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
+t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+    <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792" 
+d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="signin" unicode="&#xf090;" 
+d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
+q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664" 
+d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
+t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
+q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="github_sign" unicode="&#xf092;" 
+d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
+q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
+t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
+q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664" 
+d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
+t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+    <glyph glyph-name="lemon" unicode="&#xf094;" 
+d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
+q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
+q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
+q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
+    <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408" 
+d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
+q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
+t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+    <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408" 
+d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280" 
+d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
+q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="phone_sign" unicode="&#xf098;" 
+d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
+t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
+t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
+" />
+    <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664" 
+d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
+q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+    <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024" 
+d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+    <glyph glyph-name="github" unicode="&#xf09b;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
+q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
+t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
+q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
+M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
+    <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664" 
+d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
+t316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920" 
+d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
+q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+    <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408" 
+d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
+t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
+q187 -186 294 -425.5t120 -501.5z" />
+    <glyph glyph-name="hdd" unicode="&#xf0a0;" 
+d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
+h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
+l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+    <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792" 
+d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
+t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+    <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
+M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
+t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="certificate" unicode="&#xf0a3;" 
+d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
+l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
+l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+    <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
+q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
+q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
+t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792" 
+d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
+t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
+M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
+q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="hand_up" unicode="&#xf0a6;" 
+d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
+q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
+t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
+q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+    <glyph glyph-name="hand_down" unicode="&#xf0a7;" 
+d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
+t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
+q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
+q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+    <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_right" unicode="&#xf0a9;" 
+d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_up" unicode="&#xf0aa;" 
+d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_down" unicode="&#xf0ab;" 
+d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="globe" unicode="&#xf0ac;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
+q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
+q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
+q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
+t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
+q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
+q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
+t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
+t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
+q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
+q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
+q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
+t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
+q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
+q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+    <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1664" 
+d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
+t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+    <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792" 
+d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
+t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408" 
+d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+    <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792" 
+d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
+t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="fullscreen" unicode="&#xf0b2;" 
+d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
+l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
+" />
+    <glyph glyph-name="group" unicode="&#xf0c0;" horiz-adv-x="1920" 
+d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
+t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
+t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+    <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1664" 
+d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
+l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
+t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
+q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+    <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920" 
+d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
+" />
+    <glyph glyph-name="beaker" unicode="&#xf0c3;" horiz-adv-x="1664" 
+d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+    <glyph glyph-name="cut" unicode="&#xf0c4;" horiz-adv-x="1792" 
+d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
+q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
+q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
+q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
+q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+    <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="1792" 
+d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
+h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+    <glyph glyph-name="paper_clip" unicode="&#xf0c6;" horiz-adv-x="1408" 
+d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
+l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
+z" />
+    <glyph glyph-name="save" unicode="&#xf0c7;" 
+d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
+h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="sign_blank" unicode="&#xf0c8;" 
+d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="reorder" unicode="&#xf0c9;" 
+d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
+t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ul" unicode="&#xf0ca;" horiz-adv-x="1792" 
+d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
+M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="ol" unicode="&#xf0cb;" horiz-adv-x="1792" 
+d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
+q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
+t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
+q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792" 
+d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
+l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
+l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+    <glyph glyph-name="underline" unicode="&#xf0cd;" 
+d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
+q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
+q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
+q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+    <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664" 
+d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
+v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
+q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
+q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
+z" />
+    <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1664" 
+d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
+l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+    <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1792" 
+d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
+t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
+t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="pinterest" unicode="&#xf0d2;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
+q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
+q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="pinterest_sign" unicode="&#xf0d3;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
+t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
+t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="google_plus_sign" unicode="&#xf0d4;" 
+d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
+h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="google_plus" unicode="&#xf0d5;" horiz-adv-x="2304" 
+d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
+q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
+    <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920" 
+d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
+v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_down" unicode="&#xf0d7;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_up" unicode="&#xf0d8;" horiz-adv-x="1024" 
+d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="caret_left" unicode="&#xf0d9;" horiz-adv-x="640" 
+d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="caret_right" unicode="&#xf0da;" horiz-adv-x="640" 
+d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664" 
+d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="sort_down" unicode="&#xf0dd;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="sort_up" unicode="&#xf0de;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="envelope_alt" unicode="&#xf0e0;" horiz-adv-x="1792" 
+d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
+q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+    <glyph glyph-name="linkedin" unicode="&#xf0e1;" 
+d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
+q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+    <glyph glyph-name="undo" unicode="&#xf0e2;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+    <glyph glyph-name="legal" unicode="&#xf0e3;" horiz-adv-x="1792" 
+d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
+t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
+q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
+q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+    <glyph glyph-name="dashboard" unicode="&#xf0e4;" horiz-adv-x="1792" 
+d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
+t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
+t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
+q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="comment_alt" unicode="&#xf0e5;" horiz-adv-x="1792" 
+d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
+q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
+t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="comments_alt" unicode="&#xf0e6;" horiz-adv-x="1792" 
+d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
+t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
+t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
+q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+    <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896" 
+d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+    <glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792" 
+d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664" 
+d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
+q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
+q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+    <glyph glyph-name="paste" unicode="&#xf0ea;" horiz-adv-x="1792" 
+d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
+h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="light_bulb" unicode="&#xf0eb;" horiz-adv-x="1024" 
+d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
+q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
+q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
+t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+    <glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792" 
+d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
+q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="cloud_download" unicode="&#xf0ed;" horiz-adv-x="1920" 
+d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="cloud_upload" unicode="&#xf0ee;" horiz-adv-x="1920" 
+d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="user_md" unicode="&#xf0f0;" horiz-adv-x="1408" 
+d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
+t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
+t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
+t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
+t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792" 
+d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
+t66 -158z" />
+    <glyph glyph-name="bell_alt" unicode="&#xf0f3;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
+t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1920" 
+d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
+t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="food" unicode="&#xf0f5;" horiz-adv-x="1408" 
+d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
+t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="file_text_alt" unicode="&#xf0f6;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
+q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+    <glyph glyph-name="building" unicode="&#xf0f7;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5
+t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320
+v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1920" 
+d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152
+q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792" 
+d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32
+q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="fighter_jet" unicode="&#xf0fb;" horiz-adv-x="1920" 
+d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96
+q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" />
+    <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1664" 
+d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+    <glyph glyph-name="h_sign" unicode="&#xf0fd;" 
+d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="f0fe" unicode="&#xf0fe;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="double_angle_left" unicode="&#xf100;" horiz-adv-x="1024" 
+d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_right" unicode="&#xf101;" horiz-adv-x="1024" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23
+l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_up" unicode="&#xf102;" horiz-adv-x="1152" 
+d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393
+q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_down" unicode="&#xf103;" horiz-adv-x="1152" 
+d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_left" unicode="&#xf104;" horiz-adv-x="640" 
+d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_right" unicode="&#xf105;" horiz-adv-x="640" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_up" unicode="&#xf106;" horiz-adv-x="1152" 
+d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_down" unicode="&#xf107;" horiz-adv-x="1152" 
+d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920" 
+d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19
+t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920" 
+d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z
+M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+    <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152" 
+d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832
+q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="mobile_phone" unicode="&#xf10b;" horiz-adv-x="768" 
+d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136
+q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="circle_blank" unicode="&#xf10c;" 
+d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103
+t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="quote_left" unicode="&#xf10d;" horiz-adv-x="1664" 
+d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z
+M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="quote_right" unicode="&#xf10e;" horiz-adv-x="1664" 
+d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216
+v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1792" 
+d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z
+M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5
+q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="circle" unicode="&#xf111;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792" 
+d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19
+l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+    <glyph glyph-name="github_alt" unicode="&#xf113;" horiz-adv-x="1664" 
+d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320
+q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86
+t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218
+q0 -87 -27 -168q136 -160 136 -398z" />
+    <glyph glyph-name="folder_close_alt" unicode="&#xf114;" horiz-adv-x="1664" 
+d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320
+q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open_alt" unicode="&#xf115;" horiz-adv-x="1920" 
+d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68
+v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z
+" />
+    <glyph glyph-name="expand_alt" unicode="&#xf116;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="collapse_alt" unicode="&#xf117;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="smile" unicode="&#xf118;" 
+d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5
+t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="frown" unicode="&#xf119;" 
+d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204
+t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="meh" unicode="&#xf11a;" 
+d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="gamepad" unicode="&#xf11b;" horiz-adv-x="1920" 
+d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150
+t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+    <glyph glyph-name="keyboard" unicode="&#xf11c;" horiz-adv-x="1920" 
+d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16
+h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16
+h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96
+q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896
+h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="flag_alt" unicode="&#xf11d;" horiz-adv-x="1792" 
+d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9
+h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102
+q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="flag_checkered" unicode="&#xf11e;" horiz-adv-x="1792" 
+d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2
+q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266
+q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8
+q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1664" 
+d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1920" 
+d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5
+l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+    <glyph glyph-name="reply_all" unicode="&#xf122;" horiz-adv-x="1792" 
+d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1
+q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+    <glyph glyph-name="star_half_empty" unicode="&#xf123;" horiz-adv-x="1664" 
+d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5
+l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+    <glyph glyph-name="location_arrow" unicode="&#xf124;" horiz-adv-x="1408" 
+d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+    <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664" 
+d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="code_fork" unicode="&#xf126;" horiz-adv-x="1024" 
+d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5
+q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497
+q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="unlink" unicode="&#xf127;" horiz-adv-x="1664" 
+d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320
+q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18
+l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9
+t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="1024" 
+d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5
+t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+    <glyph glyph-name="_279" unicode="&#xf129;" horiz-adv-x="640" 
+d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192
+q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="640" 
+d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+    <glyph glyph-name="superscript" unicode="&#xf12b;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5
+t-65.5 -51.5t-30.5 -63h232v80h126z" />
+    <glyph glyph-name="subscript" unicode="&#xf12c;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73
+h232v80h126z" />
+    <glyph glyph-name="_283" unicode="&#xf12d;" horiz-adv-x="1920" 
+d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+    <glyph glyph-name="puzzle_piece" unicode="&#xf12e;" horiz-adv-x="1664" 
+d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5
+t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89
+q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117
+q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+    <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152" 
+d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5
+t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+    <glyph glyph-name="microphone_off" unicode="&#xf131;" horiz-adv-x="1408" 
+d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128
+q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23
+t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+    <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280" 
+d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150
+t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="calendar_empty" unicode="&#xf133;" horiz-adv-x="1664" 
+d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="fire_extinguisher" unicode="&#xf134;" horiz-adv-x="1408" 
+d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800
+q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113
+q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+    <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1664" 
+d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1
+q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+    <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1792" 
+d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+    <glyph glyph-name="chevron_sign_left" unicode="&#xf137;" 
+d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_right" unicode="&#xf138;" 
+d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_up" unicode="&#xf139;" 
+d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_down" unicode="&#xf13a;" 
+d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408" 
+d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+    <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1792" 
+d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+    <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792" 
+d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352
+q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19
+t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="unlock_alt" unicode="&#xf13e;" horiz-adv-x="1152" 
+d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181
+v-320h736z" />
+    <glyph glyph-name="bullseye" unicode="&#xf140;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150
+t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ellipsis_horizontal" unicode="&#xf141;" horiz-adv-x="1408" 
+d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ellipsis_vertical" unicode="&#xf142;" horiz-adv-x="384" 
+d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="_303" unicode="&#xf143;" 
+d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128
+q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="play_sign" unicode="&#xf144;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56
+q16 -8 32 -8q17 0 32 9z" />
+    <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1792" 
+d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136
+t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+    <glyph glyph-name="minus_sign_alt" unicode="&#xf146;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="check_minus" unicode="&#xf147;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5
+t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="level_up" unicode="&#xf148;" horiz-adv-x="1024" 
+d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+    <glyph glyph-name="level_down" unicode="&#xf149;" horiz-adv-x="1024" 
+d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+    <glyph glyph-name="check_sign" unicode="&#xf14a;" 
+d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5
+t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="edit_sign" unicode="&#xf14b;" 
+d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_312" unicode="&#xf14c;" 
+d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960
+q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="share_sign" unicode="&#xf14d;" 
+d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5
+t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="compass" unicode="&#xf14e;" 
+d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="collapse" unicode="&#xf150;" 
+d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="collapse_top" unicode="&#xf151;" 
+d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_317" unicode="&#xf152;" 
+d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1024" 
+d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9
+t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26
+l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+    <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1024" 
+d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7
+q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+    <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="1024" 
+d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43
+t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5
+t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50
+t53 -63.5t31.5 -76.5t13 -94z" />
+    <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898" 
+d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102
+q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1027" 
+d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61
+l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+    <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280" 
+d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128
+q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+    <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792" 
+d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23
+t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28
+q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1280" 
+d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164
+l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30
+t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+    <glyph glyph-name="file" unicode="&#xf15b;" 
+d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+    <glyph glyph-name="file_text" unicode="&#xf15c;" 
+d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+    <glyph glyph-name="sort_by_alphabet" unicode="&#xf15d;" horiz-adv-x="1664" 
+d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23
+v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162
+l230 -662h70z" />
+    <glyph glyph-name="_329" unicode="&#xf15e;" horiz-adv-x="1664" 
+d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150
+v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248
+v119h121z" />
+    <glyph glyph-name="sort_by_attributes" unicode="&#xf160;" horiz-adv-x="1792" 
+d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832
+q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_attributes_alt" unicode="&#xf161;" horiz-adv-x="1792" 
+d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192
+q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_order" unicode="&#xf162;" 
+d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23
+zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5
+t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+    <glyph glyph-name="sort_by_order_alt" unicode="&#xf163;" 
+d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9
+t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13
+q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+    <glyph glyph-name="_334" unicode="&#xf164;" horiz-adv-x="1664" 
+d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76
+q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5
+t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+    <glyph glyph-name="_335" unicode="&#xf165;" horiz-adv-x="1664" 
+d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135
+t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121
+t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+    <glyph glyph-name="youtube_sign" unicode="&#xf166;" 
+d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15
+q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38
+q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5
+q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38
+q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5
+h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube" unicode="&#xf167;" 
+d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73
+q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51
+q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99
+q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51
+q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+    <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408" 
+d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942
+q25 45 64 45h241q22 0 31 -15z" />
+    <glyph glyph-name="xing_sign" unicode="&#xf169;" 
+d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1
+l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube_play" unicode="&#xf16a;" horiz-adv-x="1792" 
+d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5
+l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136
+q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" />
+    <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1792" 
+d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+    <glyph glyph-name="stackexchange" unicode="&#xf16c;" 
+d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
+    <glyph glyph-name="instagram" unicode="&#xf16d;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270
+q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5
+t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317
+q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
+    <glyph glyph-name="flickr" unicode="&#xf16e;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150
+t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+    <glyph glyph-name="adn" unicode="&#xf170;" 
+d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f171" unicode="&#xf171;" horiz-adv-x="1408" 
+d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22
+t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18
+t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5
+t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+    <glyph glyph-name="bitbucket_sign" unicode="&#xf172;" 
+d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5
+t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z
+M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="1024" 
+d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14
+q78 2 134 29z" />
+    <glyph glyph-name="tumblr_sign" unicode="&#xf174;" 
+d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="long_arrow_down" unicode="&#xf175;" horiz-adv-x="768" 
+d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+    <glyph glyph-name="long_arrow_up" unicode="&#xf176;" horiz-adv-x="768" 
+d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+    <glyph glyph-name="long_arrow_left" unicode="&#xf177;" horiz-adv-x="1792" 
+d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="long_arrow_right" unicode="&#xf178;" horiz-adv-x="1792" 
+d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+    <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1408" 
+d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65
+q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+    <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664" 
+d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+    <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408" 
+d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30
+t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5
+h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+    <glyph glyph-name="linux" unicode="&#xf17c;" 
+d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z
+M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7
+q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15
+q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5
+t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19
+q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63
+q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92
+q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152
+q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4
+t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5
+t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43
+q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49
+t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54
+q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5
+t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5
+t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+    <glyph glyph-name="dribble" unicode="&#xf17d;" 
+d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81
+t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19
+q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6
+t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="skype" unicode="&#xf17e;" 
+d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5
+t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5
+q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80
+q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+    <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1280" 
+d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z
+M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324
+l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+    <glyph glyph-name="trello" unicode="&#xf181;" 
+d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408
+q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280" 
+d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43
+q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024" 
+d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z
+M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="gittip" unicode="&#xf184;" 
+d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="sun" unicode="&#xf185;" horiz-adv-x="1792" 
+d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4
+l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94
+q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+    <glyph glyph-name="_366" unicode="&#xf186;" 
+d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61
+t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+    <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1792" 
+d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536
+q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1664" 
+d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207
+q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19
+t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+    <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1920" 
+d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58
+t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6
+q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24
+q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2
+q39 5 64 -2.5t31 -16.5z" />
+    <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792" 
+d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12
+q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422
+q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178
+q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z
+M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+    <glyph glyph-name="renren" unicode="&#xf18b;" 
+d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495
+q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+    <glyph glyph-name="_372" unicode="&#xf18c;" horiz-adv-x="1408" 
+d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5
+t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56
+t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5
+t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+    <glyph glyph-name="stack_exchange" unicode="&#xf18d;" horiz-adv-x="1280" 
+d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z
+" />
+    <glyph glyph-name="_374" unicode="&#xf18e;" 
+d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="arrow_circle_alt_left" unicode="&#xf190;" 
+d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_376" unicode="&#xf191;" 
+d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="dot_circle_alt" unicode="&#xf192;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5
+t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_378" unicode="&#xf193;" horiz-adv-x="1664" 
+d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128
+q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+    <glyph glyph-name="vimeo_square" unicode="&#xf194;" 
+d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179
+q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_380" unicode="&#xf195;" horiz-adv-x="1152" 
+d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160
+q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="plus_square_o" unicode="&#xf196;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832
+q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_382" unicode="&#xf197;" horiz-adv-x="2176" 
+d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40
+t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29
+q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+    <glyph glyph-name="_383" unicode="&#xf198;" horiz-adv-x="1664" 
+d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9
+q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102
+t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+    <glyph glyph-name="_384" unicode="&#xf199;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69
+q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13
+t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+    <glyph glyph-name="_385" unicode="&#xf19a;" horiz-adv-x="1792" 
+d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5
+t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21
+t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286
+t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273
+t273 -182.5t331.5 -68z" />
+    <glyph glyph-name="_386" unicode="&#xf19b;" horiz-adv-x="1792" 
+d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+    <glyph glyph-name="_387" unicode="&#xf19c;" horiz-adv-x="2048" 
+d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64
+q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+    <glyph glyph-name="_388" unicode="&#xf19d;" horiz-adv-x="2304" 
+d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433
+q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+    <glyph glyph-name="_389" unicode="&#xf19e;" 
+d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0
+q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+    <glyph glyph-name="uniF1A0" unicode="&#xf1a0;" 
+d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5
+t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
+    <glyph glyph-name="f1a1" unicode="&#xf1a1;" horiz-adv-x="1792" 
+d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26
+t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37
+q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191
+t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_392" unicode="&#xf1a2;" 
+d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54
+q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83
+q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_393" unicode="&#xf1a3;" 
+d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150
+v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103
+t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f1a4" unicode="&#xf1a4;" horiz-adv-x="1920" 
+d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328
+v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+    <glyph glyph-name="_395" unicode="&#xf1a5;" 
+d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="_396" unicode="&#xf1a6;" horiz-adv-x="2048" 
+d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
+v-369h123z" />
+    <glyph glyph-name="_397" unicode="&#xf1a7;" 
+d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101
+v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_398" unicode="&#xf1a8;" horiz-adv-x="2038" 
+d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14
+q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24
+q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33
+q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5
+t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43
+q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5
+t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13
+t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+    <glyph glyph-name="_399" unicode="&#xf1a9;" 
+d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10
+q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14
+q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14
+t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44
+q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+    <glyph glyph-name="_400" unicode="&#xf1aa;" 
+d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z
+M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5
+t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5
+q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126
+t135.5 51q85 0 145 -60.5t60 -145.5z" />
+    <glyph glyph-name="f1ab" unicode="&#xf1ab;" 
+d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5
+q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28
+q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z
+M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11
+q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5
+q20 0 20 -21v-418z" />
+    <glyph glyph-name="_402" unicode="&#xf1ac;" horiz-adv-x="1792" 
+d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48
+l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23
+t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128
+q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128
+q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+    <glyph glyph-name="_403" unicode="&#xf1ad;" 
+d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9
+t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9
+t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9
+t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+    <glyph glyph-name="_404" unicode="&#xf1ae;" horiz-adv-x="1280" 
+d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152
+q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="uniF1B1" unicode="&#xf1b0;" horiz-adv-x="1664" 
+d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5
+q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819
+q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5
+t100.5 134t141.5 55.5z" />
+    <glyph glyph-name="_406" unicode="&#xf1b1;" horiz-adv-x="768" 
+d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+    <glyph glyph-name="_407" unicode="&#xf1b2;" horiz-adv-x="1792" 
+d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z
+" />
+    <glyph glyph-name="_408" unicode="&#xf1b3;" horiz-adv-x="2304" 
+d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67
+t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70
+v-400l434 -186q36 -16 57 -48t21 -70z" />
+    <glyph glyph-name="_409" unicode="&#xf1b4;" horiz-adv-x="2048" 
+d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658
+q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204
+q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+    <glyph glyph-name="_410" unicode="&#xf1b5;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5
+t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217
+t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+    <glyph glyph-name="_411" unicode="&#xf1b6;" horiz-adv-x="1792" 
+d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5
+q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89
+q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+    <glyph glyph-name="_412" unicode="&#xf1b7;" 
+d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5
+q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5
+q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z
+" />
+    <glyph glyph-name="_413" unicode="&#xf1b8;" horiz-adv-x="1792" 
+d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188
+l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5
+t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1
+q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+    <glyph glyph-name="_414" unicode="&#xf1b9;" horiz-adv-x="2048" 
+d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384
+q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5
+l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_415" unicode="&#xf1ba;" horiz-adv-x="2048" 
+d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5
+t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z
+M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+    <glyph glyph-name="_416" unicode="&#xf1bb;" 
+d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384
+q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+    <glyph glyph-name="_417" unicode="&#xf1bc;" 
+d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64
+q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37
+q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_418" unicode="&#xf1bd;" horiz-adv-x="1024" 
+d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+    <glyph glyph-name="_419" unicode="&#xf1be;" horiz-adv-x="2304" 
+d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11
+q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245
+q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785
+l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242
+q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236
+q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786
+q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+    <glyph glyph-name="uniF1C0" unicode="&#xf1c0;" 
+d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127
+t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5
+t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+    <glyph glyph-name="uniF1C1" unicode="&#xf1c1;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197
+q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8
+q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+    <glyph glyph-name="_422" unicode="&#xf1c2;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5
+t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" />
+    <glyph glyph-name="_423" unicode="&#xf1c3;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107
+h-290v-107h68l189 -272l-194 -283h-68z" />
+    <glyph glyph-name="_424" unicode="&#xf1c4;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+    <glyph glyph-name="_425" unicode="&#xf1c5;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+    <glyph glyph-name="_426" unicode="&#xf1c6;" 
+d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400
+v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79
+q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+    <glyph glyph-name="_427" unicode="&#xf1c7;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5
+q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+    <glyph glyph-name="_428" unicode="&#xf1c8;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+    <glyph glyph-name="_429" unicode="&#xf1c9;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243
+l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+    <glyph glyph-name="_430" unicode="&#xf1ca;" 
+d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406
+q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+    <glyph glyph-name="_431" unicode="&#xf1cb;" horiz-adv-x="1792" 
+d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
+q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+    <glyph glyph-name="_432" unicode="&#xf1cc;" horiz-adv-x="2048" 
+d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94
+q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55
+t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" />
+    <glyph glyph-name="_433" unicode="&#xf1cd;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194
+q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5
+t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+    <glyph glyph-name="_434" unicode="&#xf1ce;" horiz-adv-x="1792" 
+d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5
+t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
+    <glyph glyph-name="uniF1D0" unicode="&#xf1d0;" horiz-adv-x="1792" 
+d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41
+t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170
+t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136
+q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+    <glyph glyph-name="uniF1D1" unicode="&#xf1d1;" horiz-adv-x="1792" 
+d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251
+l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162
+q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33
+q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5
+t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF1D2" unicode="&#xf1d2;" 
+d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85
+q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392
+q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072
+q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_438" unicode="&#xf1d3;" horiz-adv-x="1792" 
+d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58
+q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47
+q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171
+v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+    <glyph glyph-name="_439" unicode="&#xf1d4;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF1D5" unicode="&#xf1d5;" horiz-adv-x="1280" 
+d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5
+t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153
+t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+    <glyph glyph-name="uniF1D6" unicode="&#xf1d6;" horiz-adv-x="1792" 
+d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5
+q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20
+t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5
+t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+    <glyph glyph-name="uniF1D7" unicode="&#xf1d7;" horiz-adv-x="2048" 
+d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25
+q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5
+q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109
+q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+    <glyph glyph-name="_443" unicode="&#xf1d8;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+    <glyph glyph-name="_444" unicode="&#xf1d9;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137
+l863 639l-478 -797z" />
+    <glyph glyph-name="_445" unicode="&#xf1da;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23
+t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_446" unicode="&#xf1db;" 
+d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_447" unicode="&#xf1dc;" horiz-adv-x="1792" 
+d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15
+t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2
+t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160
+q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5
+q0 -26 -12 -48t-36 -22z" />
+    <glyph glyph-name="_448" unicode="&#xf1dd;" horiz-adv-x="1280" 
+d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179
+q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+    <glyph glyph-name="_449" unicode="&#xf1de;" 
+d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256
+q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+    <glyph glyph-name="uniF1E0" unicode="&#xf1e0;" 
+d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5
+t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+    <glyph glyph-name="_451" unicode="&#xf1e1;" 
+d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5
+t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_452" unicode="&#xf1e2;" horiz-adv-x="1792" 
+d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5
+t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91
+q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9
+t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="_453" unicode="&#xf1e3;" horiz-adv-x="1792" 
+d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323
+l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+    <glyph glyph-name="_454" unicode="&#xf1e4;" horiz-adv-x="1792" 
+d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5
+t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+    <glyph glyph-name="_455" unicode="&#xf1e5;" horiz-adv-x="1792" 
+d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z
+M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_456" unicode="&#xf1e6;" horiz-adv-x="1792" 
+d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234
+l401 400q38 37 91 37t90 -37z" />
+    <glyph glyph-name="_457" unicode="&#xf1e7;" horiz-adv-x="1792" 
+d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5
+t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z
+M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7
+t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+    <glyph glyph-name="_458" unicode="&#xf1e8;" horiz-adv-x="1792" 
+d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+    <glyph glyph-name="_459" unicode="&#xf1e9;" 
+d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36
+q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5
+t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87
+q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+    <glyph glyph-name="_460" unicode="&#xf1ea;" horiz-adv-x="2048" 
+d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19
+t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+    <glyph glyph-name="_461" unicode="&#xf1eb;" horiz-adv-x="2048" 
+d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121
+q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z
+M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+    <glyph glyph-name="_462" unicode="&#xf1ec;" horiz-adv-x="1792" 
+d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5
+t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38
+h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_463" unicode="&#xf1ed;" 
+d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246
+q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598
+q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
+    <glyph glyph-name="_464" unicode="&#xf1ee;" horiz-adv-x="1792" 
+d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640
+q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
+    <glyph glyph-name="uniF1F0" unicode="&#xf1f0;" horiz-adv-x="2304" 
+d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27
+q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128
+q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_466" unicode="&#xf1f1;" horiz-adv-x="2304" 
+d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249
+q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z
+M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32
+h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4
+q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75
+q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14
+q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22
+q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12
+q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122
+h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5
+t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_467" unicode="&#xf1f2;" horiz-adv-x="2304" 
+d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42
+q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604
+v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569
+q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73
+t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+    <glyph glyph-name="f1f3" unicode="&#xf1f3;" horiz-adv-x="2304" 
+d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z
+M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260
+l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279
+v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040
+q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168
+q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5
+t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21
+h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5
+t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+    <glyph glyph-name="_469" unicode="&#xf1f4;" horiz-adv-x="2304" 
+d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16
+t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76
+q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59
+t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489
+l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66
+q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_470" unicode="&#xf1f5;" horiz-adv-x="2304" 
+d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109
+q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118
+q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151
+q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31
+q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_471" unicode="&#xf1f6;" horiz-adv-x="2048" 
+d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5
+l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5
+l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_472" unicode="&#xf1f7;" horiz-adv-x="2048" 
+d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128
+q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161
+q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_473" unicode="&#xf1f8;" horiz-adv-x="1408" 
+d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167
+q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_474" unicode="&#xf1f9;" 
+d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5
+t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5
+t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_475" unicode="&#xf1fa;" 
+d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53
+q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24
+t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61
+t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+    <glyph glyph-name="_476" unicode="&#xf1fb;" horiz-adv-x="1792" 
+d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10
+t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+    <glyph glyph-name="f1fc" unicode="&#xf1fc;" horiz-adv-x="1792" 
+d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5
+t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+    <glyph glyph-name="_478" unicode="&#xf1fd;" horiz-adv-x="1792" 
+d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5
+t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38
+t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448
+h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5
+q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+    <glyph glyph-name="_479" unicode="&#xf1fe;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+    <glyph glyph-name="_480" unicode="&#xf200;" horiz-adv-x="1792" 
+d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_481" unicode="&#xf201;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="_482" unicode="&#xf202;" horiz-adv-x="1792" 
+d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20
+q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50
+t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1
+q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+    <glyph glyph-name="_483" unicode="&#xf203;" 
+d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73
+q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110
+q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_484" unicode="&#xf204;" horiz-adv-x="2048" 
+d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5
+t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5
+t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+    <glyph glyph-name="_485" unicode="&#xf205;" horiz-adv-x="2048" 
+d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5
+t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+    <glyph glyph-name="_486" unicode="&#xf206;" horiz-adv-x="2304" 
+d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94
+q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469
+q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400
+q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="_487" unicode="&#xf207;" 
+d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5
+h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+    <glyph glyph-name="_488" unicode="&#xf208;" horiz-adv-x="2048" 
+d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327
+q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5
+q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+    <glyph glyph-name="_489" unicode="&#xf209;" horiz-adv-x="1280" 
+d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119
+t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5
+t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14
+q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88
+q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5
+t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+    <glyph glyph-name="_490" unicode="&#xf20a;" horiz-adv-x="2048" 
+d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206
+q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307
+t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14
+t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+    <glyph glyph-name="_491" unicode="&#xf20b;" 
+d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5
+t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_492" unicode="&#xf20c;" 
+d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55
+q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410
+q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+    <glyph glyph-name="_493" unicode="&#xf20d;" 
+d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+    <glyph glyph-name="_494" unicode="&#xf20e;" horiz-adv-x="2048" 
+d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335
+q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5
+q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438
+h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66
+l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946
+l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82
+zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+    <glyph glyph-name="f210" unicode="&#xf210;" 
+d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+    <glyph glyph-name="_496" unicode="&#xf211;" 
+d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384
+q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+    <glyph glyph-name="f212" unicode="&#xf212;" horiz-adv-x="2048" 
+d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021
+q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25
+q209 0 374 -102q172 107 374 102z" />
+    <glyph glyph-name="_498" unicode="&#xf213;" horiz-adv-x="2048" 
+d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101
+q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284
+q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+    <glyph glyph-name="_499" unicode="&#xf214;" 
+d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
+l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
+v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
+M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
+v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51
+h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5
+t-43 -34t-16.5 -53.5z" />
+    <glyph glyph-name="_500" unicode="&#xf215;" horiz-adv-x="2048" 
+d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832
+q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+    <glyph glyph-name="_501" unicode="&#xf216;" horiz-adv-x="2048" 
+d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5
+t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113
+t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5
+q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+    <glyph glyph-name="_502" unicode="&#xf217;" horiz-adv-x="1664" 
+d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_503" unicode="&#xf218;" horiz-adv-x="1664" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_504" unicode="&#xf219;" horiz-adv-x="2048" 
+d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20
+l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+    <glyph glyph-name="_505" unicode="&#xf21a;" horiz-adv-x="2048" 
+d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83
+q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314
+v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+    <glyph glyph-name="_506" unicode="&#xf21b;" 
+d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14
+t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5
+q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31
+t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+    <glyph glyph-name="_507" unicode="&#xf21c;" horiz-adv-x="2304" 
+d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5
+t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105
+l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226
+t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+    <glyph glyph-name="_508" unicode="&#xf21d;" 
+d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12
+q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384
+q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5
+t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_509" unicode="&#xf21e;" horiz-adv-x="1792" 
+d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221
+q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124
+t127 -344z" />
+    <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292
+q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+    <glyph glyph-name="_511" unicode="&#xf222;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5
+q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_512" unicode="&#xf223;" horiz-adv-x="1280" 
+d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5
+t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_513" unicode="&#xf224;" 
+d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_514" unicode="&#xf225;" horiz-adv-x="1792" 
+d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9
+t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_515" unicode="&#xf226;" horiz-adv-x="1792" 
+d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23
+t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391
+q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391
+q0 -226 -154 -391q103 -57 218 -57z" />
+    <glyph glyph-name="_516" unicode="&#xf227;" horiz-adv-x="1920" 
+d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230
+q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9
+t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128
+q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+    <glyph glyph-name="_517" unicode="&#xf228;" horiz-adv-x="2048" 
+d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23
+t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9
+t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5
+t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+    <glyph glyph-name="_518" unicode="&#xf229;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5
+t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_519" unicode="&#xf22a;" horiz-adv-x="1280" 
+d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22
+t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5
+t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_520" unicode="&#xf22b;" horiz-adv-x="2048" 
+d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5
+t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5
+t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_521" unicode="&#xf22c;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_522" unicode="&#xf22d;" horiz-adv-x="1280" 
+d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123
+t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
+    <glyph glyph-name="_523" unicode="&#xf22e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_524" unicode="&#xf22f;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_525" unicode="&#xf230;" 
+d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+    <glyph glyph-name="_526" unicode="&#xf231;" horiz-adv-x="1280" 
+d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5
+l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5
+q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+    <glyph glyph-name="_527" unicode="&#xf232;" 
+d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5
+t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233
+l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+    <glyph glyph-name="_528" unicode="&#xf233;" horiz-adv-x="1792" 
+d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216
+q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+    <glyph glyph-name="_529" unicode="&#xf234;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5
+t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+    <glyph glyph-name="_530" unicode="&#xf235;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136
+q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69
+t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+    <glyph glyph-name="_531" unicode="&#xf236;" horiz-adv-x="2048" 
+d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704
+q-26 0 -45 -19t-19 -45v-384h1152z" />
+    <glyph glyph-name="_532" unicode="&#xf237;" 
+d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+    <glyph glyph-name="_533" unicode="&#xf238;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56
+t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+    <glyph glyph-name="_534" unicode="&#xf239;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47
+t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+    <glyph glyph-name="_535" unicode="&#xf23a;" horiz-adv-x="1792" 
+d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116
+q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
+    <glyph glyph-name="_536" unicode="&#xf23b;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
+    <glyph glyph-name="_537" unicode="&#xf23c;" horiz-adv-x="2296" 
+d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5
+q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5
+q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42
+q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37
+q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5
+q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139
+q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8
+t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132
+q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132
+q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z
+M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86
+t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103
+q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4
+l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130
+t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150
+q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12
+q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
+    <glyph glyph-name="_538" unicode="&#xf23d;" horiz-adv-x="2304" 
+d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5
+t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5
+t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
+    <glyph glyph-name="_539" unicode="&#xf23e;" horiz-adv-x="1792" 
+d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348
+t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23
+t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512
+q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
+    <glyph glyph-name="_540" unicode="&#xf240;" horiz-adv-x="2304" 
+d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113
+v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="_541" unicode="&#xf241;" horiz-adv-x="2304" 
+d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_542" unicode="&#xf242;" horiz-adv-x="2304" 
+d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_543" unicode="&#xf243;" horiz-adv-x="2304" 
+d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_544" unicode="&#xf244;" horiz-adv-x="2304" 
+d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23
+v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_545" unicode="&#xf245;" horiz-adv-x="1280" 
+d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
+    <glyph glyph-name="_546" unicode="&#xf246;" horiz-adv-x="1024" 
+d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
+    <glyph glyph-name="_547" unicode="&#xf247;" horiz-adv-x="2048" 
+d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
+h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
+    <glyph glyph-name="_548" unicode="&#xf248;" horiz-adv-x="2304" 
+d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
+v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
+    <glyph glyph-name="_549" unicode="&#xf249;" 
+d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
+    <glyph glyph-name="_550" unicode="&#xf24a;" 
+d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="_551" unicode="&#xf24b;" horiz-adv-x="2304" 
+d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5
+t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88
+t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90
+t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_552" unicode="&#xf24c;" horiz-adv-x="2304" 
+d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294
+t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z
+M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_553" unicode="&#xf24d;" horiz-adv-x="1792" 
+d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113
+zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_554" unicode="&#xf24e;" horiz-adv-x="2304" 
+d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91
+t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5
+t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
+    <glyph glyph-name="_555" unicode="&#xf250;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5
+t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_556" unicode="&#xf251;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
+    <glyph glyph-name="_557" unicode="&#xf252;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
+    <glyph glyph-name="_558" unicode="&#xf253;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196
+h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_559" unicode="&#xf254;" 
+d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87
+t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9
+h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
+    <glyph glyph-name="_560" unicode="&#xf255;" 
+d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25
+q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27
+t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21
+q72 69 174 69z" />
+    <glyph glyph-name="_561" unicode="&#xf256;" horiz-adv-x="1792" 
+d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33
+t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52
+h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
+    <glyph glyph-name="_562" unicode="&#xf257;" horiz-adv-x="1792" 
+d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668
+q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17
+t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5
+t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5
+q0 -42 -23 -78t-61 -53l-310 -141h91z" />
+    <glyph glyph-name="_563" unicode="&#xf258;" horiz-adv-x="2048" 
+d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32
+q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68
+q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
+    <glyph glyph-name="_564" unicode="&#xf259;" horiz-adv-x="2048" 
+d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79
+t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24
+q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26
+l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" />
+    <glyph glyph-name="_565" unicode="&#xf25a;" horiz-adv-x="1792" 
+d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5
+q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5
+v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32
+v-384h32z" />
+    <glyph glyph-name="_566" unicode="&#xf25b;" 
+d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181
+v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46
+q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5
+q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308
+q0 -53 37.5 -90.5t90.5 -37.5h668z" />
+    <glyph glyph-name="_567" unicode="&#xf25c;" horiz-adv-x="1973" 
+d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5
+t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141
+q13 0 22 -8.5t10 -20.5z" />
+    <glyph glyph-name="_568" unicode="&#xf25d;" horiz-adv-x="1792" 
+d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109
+t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640
+q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_569" unicode="&#xf25e;" horiz-adv-x="1792" 
+d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78
+q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5
+t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376
+q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
+    <glyph glyph-name="f260" unicode="&#xf260;" horiz-adv-x="2048" 
+d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
+    <glyph glyph-name="f261" unicode="&#xf261;" horiz-adv-x="1792" 
+d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_572" unicode="&#xf262;" horiz-adv-x="2304" 
+d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57
+t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197
+t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5
+t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5
+t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5
+q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
+    <glyph glyph-name="f263" unicode="&#xf263;" horiz-adv-x="1280" 
+d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5
+t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94
+q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
+    <glyph glyph-name="_574" unicode="&#xf264;" 
+d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32
+q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5
+zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_575" unicode="&#xf265;" horiz-adv-x="1720" 
+d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33
+l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
+    <glyph glyph-name="_576" unicode="&#xf266;" horiz-adv-x="2304" 
+d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540
+q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81
+l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
+    <glyph glyph-name="_577" unicode="&#xf267;" horiz-adv-x="1792" 
+d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640
+q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5
+t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5
+t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5
+t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191
+t191 -286t71 -348z" />
+    <glyph glyph-name="_578" unicode="&#xf268;" horiz-adv-x="1792" 
+d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962
+q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
+    <glyph glyph-name="_579" unicode="&#xf269;" horiz-adv-x="1792" 
+d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5
+q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5
+q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
+    <glyph glyph-name="_580" unicode="&#xf26a;" horiz-adv-x="1792" 
+d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339
+q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z
+" />
+    <glyph glyph-name="_581" unicode="&#xf26b;" horiz-adv-x="1792" 
+d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606
+q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z
+M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
+    <glyph glyph-name="_582" unicode="&#xf26c;" horiz-adv-x="2048" 
+d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23
+v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_583" unicode="&#xf26d;" horiz-adv-x="1792" 
+d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34
+h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100
+q-68 175 -180 287z" />
+    <glyph glyph-name="_584" unicode="&#xf26e;" 
+d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6
+q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13
+q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249
+q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183
+q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46
+t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
+    <glyph glyph-name="_585" unicode="&#xf270;" horiz-adv-x="1792" 
+d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z
+M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30
+q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57
+t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133
+q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
+    <glyph glyph-name="_586" unicode="&#xf271;" horiz-adv-x="1792" 
+d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9
+h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224
+v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
+    <glyph glyph-name="_587" unicode="&#xf272;" horiz-adv-x="1792" 
+d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23
+t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_588" unicode="&#xf273;" horiz-adv-x="1792" 
+d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z
+M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_589" unicode="&#xf274;" horiz-adv-x="1792" 
+d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23
+t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_590" unicode="&#xf275;" horiz-adv-x="1792" 
+d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
+    <glyph glyph-name="_591" unicode="&#xf276;" horiz-adv-x="1024" 
+d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249
+q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
+    <glyph glyph-name="_592" unicode="&#xf277;" horiz-adv-x="1792" 
+d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768
+q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
+    <glyph glyph-name="_593" unicode="&#xf278;" horiz-adv-x="2048" 
+d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
+v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
+    <glyph glyph-name="_594" unicode="&#xf279;" horiz-adv-x="1792" 
+d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
+q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
+    <glyph glyph-name="_595" unicode="&#xf27a;" horiz-adv-x="1792" 
+d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37
+t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="_596" unicode="&#xf27b;" horiz-adv-x="1792" 
+d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5
+t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51
+t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
+    <glyph glyph-name="_597" unicode="&#xf27c;" horiz-adv-x="1024" 
+d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
+    <glyph glyph-name="_598" unicode="&#xf27d;" horiz-adv-x="1792" 
+d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246
+q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
+    <glyph glyph-name="f27e" unicode="&#xf27e;" 
+d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
+    <glyph glyph-name="uniF280" unicode="&#xf280;" 
+d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72
+h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275
+l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
+    <glyph glyph-name="uniF281" unicode="&#xf281;" horiz-adv-x="1792" 
+d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5
+l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44
+t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106
+q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
+    <glyph glyph-name="_602" unicode="&#xf282;" horiz-adv-x="1792" 
+d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53
+q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
+    <glyph glyph-name="_603" unicode="&#xf283;" horiz-adv-x="2304" 
+d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
+    <glyph glyph-name="_604" unicode="&#xf284;" horiz-adv-x="1792" 
+d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308
+t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20
+t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" />
+    <glyph glyph-name="uniF285" unicode="&#xf285;" horiz-adv-x="1792" 
+d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
+    <glyph glyph-name="uniF286" unicode="&#xf286;" horiz-adv-x="1792" 
+d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96
+q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5
+q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96
+q16 0 16 -16z" />
+    <glyph glyph-name="_607" unicode="&#xf287;" horiz-adv-x="2304" 
+d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96
+q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5
+t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
+    <glyph glyph-name="_608" unicode="&#xf288;" horiz-adv-x="1792" 
+d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348
+t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_609" unicode="&#xf289;" horiz-adv-x="2304" 
+d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22
+q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5
+q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13
+q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
+    <glyph glyph-name="_610" unicode="&#xf28a;" 
+d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83
+t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20
+q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5
+t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
+    <glyph glyph-name="_611" unicode="&#xf28b;" 
+d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103
+t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_612" unicode="&#xf28c;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
+    <glyph glyph-name="_613" unicode="&#xf28d;" 
+d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="_614" unicode="&#xf28e;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
+    <glyph glyph-name="_615" unicode="&#xf290;" horiz-adv-x="1792" 
+d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_616" unicode="&#xf291;" horiz-adv-x="2048" 
+d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5
+t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416
+q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441
+h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
+    <glyph glyph-name="_617" unicode="&#xf292;" horiz-adv-x="1792" 
+d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12
+q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311
+q15 0 25 -12q9 -12 6 -28z" />
+    <glyph glyph-name="_618" unicode="&#xf293;" 
+d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5
+t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
+    <glyph glyph-name="_619" unicode="&#xf294;" horiz-adv-x="1024" 
+d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
+    <glyph glyph-name="_620" unicode="&#xf295;" 
+d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5
+t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_621" unicode="&#xf296;" horiz-adv-x="1792" 
+d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
+    <glyph glyph-name="_622" unicode="&#xf297;" horiz-adv-x="1792" 
+d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111
+q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
+    <glyph glyph-name="_623" unicode="&#xf298;" 
+d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14
+t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
+    <glyph glyph-name="_624" unicode="&#xf299;" horiz-adv-x="1792" 
+d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57
+q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285
+q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
+    <glyph glyph-name="_625" unicode="&#xf29a;" horiz-adv-x="1792" 
+d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42
+q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298
+t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_626" unicode="&#xf29b;" 
+d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300
+l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z
+M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
+    <glyph glyph-name="_627" unicode="&#xf29c;" 
+d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5
+t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5
+t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5
+t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_628" unicode="&#xf29d;" horiz-adv-x="1408" 
+d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457
+q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521
+q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661
+q3 -1 7 1t7 4l3 2q11 9 11 17z" />
+    <glyph glyph-name="_629" unicode="&#xf29e;" horiz-adv-x="2304" 
+d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10
+t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5
+t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5
+h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96
+t9.5 -70.5z" />
+    <glyph glyph-name="uniF2A0" unicode="&#xf2a0;" horiz-adv-x="1408" 
+d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5
+q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127
+l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272
+t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249
+q-18 -19 -45 -19z" />
+    <glyph glyph-name="uniF2A1" unicode="&#xf2a1;" horiz-adv-x="2176" 
+d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136
+t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56
+t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56
+t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136
+t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="uniF2A2" unicode="&#xf2a2;" horiz-adv-x="1792" 
+d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z
+M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72
+t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45
+t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4
+q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
+    <glyph glyph-name="uniF2A3" unicode="&#xf2a3;" horiz-adv-x="2304" 
+d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55
+q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5
+q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101
+q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35
+q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5
+q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
+    <glyph glyph-name="uniF2A4" unicode="&#xf2a4;" horiz-adv-x="1792" 
+d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19
+t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74
+t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233
+l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
+    <glyph glyph-name="uniF2A5" unicode="&#xf2a5;" 
+d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2
+q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10
+q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2A6" unicode="&#xf2a6;" horiz-adv-x="1535" 
+d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5
+l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5
+q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9
+q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
+    <glyph glyph-name="uniF2A7" unicode="&#xf2a7;" horiz-adv-x="1664" 
+d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37
+t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
+l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148
+q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26
+l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
+    <glyph glyph-name="uniF2A8" unicode="&#xf2a8;" horiz-adv-x="1792" 
+d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5
+q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841
+q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5
+q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
+    <glyph glyph-name="uniF2A9" unicode="&#xf2a9;" horiz-adv-x="1280" 
+d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5
+q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z
+M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
+    <glyph glyph-name="uniF2AA" unicode="&#xf2aa;" 
+d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z
+M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5
+q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AB" unicode="&#xf2ab;" 
+d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114
+q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5
+t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="uniF2AC" unicode="&#xf2ac;" horiz-adv-x="1664" 
+d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35
+q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5
+t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
+    <glyph glyph-name="uniF2AD" unicode="&#xf2ad;" 
+d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115
+q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15
+t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AE" unicode="&#xf2ae;" horiz-adv-x="2304" 
+d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7
+q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158
+q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
+    <glyph glyph-name="uniF2B0" unicode="&#xf2b0;" 
+d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104
+q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108
+l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z
+M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
+    <glyph glyph-name="uniF2B1" unicode="&#xf2b1;" horiz-adv-x="1664" 
+d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5
+t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
+    <glyph glyph-name="uniF2B2" unicode="&#xf2b2;" horiz-adv-x="1792" 
+d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5
+t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114
+q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50
+q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5
+t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46
+q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5
+q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177
+t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
+    <glyph glyph-name="uniF2B3" unicode="&#xf2b3;" 
+d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110
+h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="uniF2B4" unicode="&#xf2b4;" 
+d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5
+q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B5" unicode="&#xf2b5;" horiz-adv-x="2304" 
+d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66
+l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180
+q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z
+M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421
+q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B6" unicode="&#xf2b6;" horiz-adv-x="1792" 
+d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107
+t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39
+q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" />
+    <glyph glyph-name="uniF2B7" unicode="&#xf2b7;" horiz-adv-x="1792" 
+d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5
+l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5
+h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94
+q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" />
+    <glyph glyph-name="uniF2B8" unicode="&#xf2b8;" 
+d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465
+l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161
+q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74
+q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" />
+    <glyph glyph-name="uniF2B9" unicode="&#xf2b9;" horiz-adv-x="1664" 
+d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576
+q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216
+q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="uniF2BA" unicode="&#xf2ba;" horiz-adv-x="1664" 
+d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5
+t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96
+q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216
+q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" />
+    <glyph glyph-name="uniF2BB" unicode="&#xf2bb;" horiz-adv-x="2048" 
+d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z
+M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568
+q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9
+h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BC" unicode="&#xf2bc;" horiz-adv-x="2048" 
+d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925
+q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568
+q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5
+t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113
+t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BD" unicode="&#xf2bd;" horiz-adv-x="1792" 
+d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5
+t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2BE" unicode="&#xf2be;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61
+t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z" />
+    <glyph glyph-name="uniF2C0" unicode="&#xf2c0;" 
+d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5
+t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145
+q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" />
+    <glyph glyph-name="uniF2C1" unicode="&#xf2c1;" horiz-adv-x="1280" 
+d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5
+t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352
+q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C2" unicode="&#xf2c2;" horiz-adv-x="2048" 
+d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56
+t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23
+v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728
+q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C3" unicode="&#xf2c3;" horiz-adv-x="2048" 
+d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z
+M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47
+h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C4" unicode="&#xf2c4;" horiz-adv-x="1792" 
+d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117
+q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5
+t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" />
+    <glyph glyph-name="uniF2C5" unicode="&#xf2c5;" horiz-adv-x="2304" 
+d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21
+t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46
+t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54
+t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29
+q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5
+t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314
+q2 -42 2 -64z" />
+    <glyph glyph-name="uniF2C6" unicode="&#xf2c6;" horiz-adv-x="1792" 
+d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2C7" unicode="&#xf2c7;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C8" unicode="&#xf2c8;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C9" unicode="&#xf2c9;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CA" unicode="&#xf2ca;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CB" unicode="&#xf2cb;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z
+M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
+    <glyph glyph-name="uniF2CC" unicode="&#xf2cc;" horiz-adv-x="1920" 
+d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41
+t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19
+t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19
+t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" />
+    <glyph glyph-name="uniF2CD" unicode="&#xf2cd;" horiz-adv-x="1792" 
+d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42
+q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9
+t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23
+t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" />
+    <glyph glyph-name="uniF2CE" unicode="&#xf2ce;" 
+d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5
+t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70
+q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20
+q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5
+t72.5 -263.5z" />
+    <glyph glyph-name="uniF2D0" unicode="&#xf2d0;" horiz-adv-x="1792" 
+d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D1" unicode="&#xf2d1;" horiz-adv-x="1792" 
+d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D2" unicode="&#xf2d2;" horiz-adv-x="2048" 
+d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="uniF2D3" unicode="&#xf2d3;" horiz-adv-x="1792" 
+d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10
+l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D4" unicode="&#xf2d4;" horiz-adv-x="1792" 
+d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D5" unicode="&#xf2d5;" horiz-adv-x="1792" 
+d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D6" unicode="&#xf2d6;" horiz-adv-x="1794" 
+d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12
+t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5
+t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5
+q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5
+q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34
+q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5
+t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D7" unicode="&#xf2d7;" 
+d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89
+q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5
+t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" />
+    <glyph glyph-name="uniF2D8" unicode="&#xf2d8;" 
+d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7
+t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5
+h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113
+v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D9" unicode="&#xf2d9;" horiz-adv-x="2176" 
+d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584
+q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5
+q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15
+q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82
+q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104
+t302 11t306.5 -97q220 -115 333 -336t87 -474z" />
+    <glyph glyph-name="uniF2DA" unicode="&#xf2da;" horiz-adv-x="1792" 
+d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178
+q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199
+t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297
+t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208
+t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" />
+    <glyph glyph-name="uniF2DB" unicode="&#xf2db;" 
+d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16
+q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28
+t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32
+q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16
+h48q16 0 16 -16z" />
+    <glyph glyph-name="uniF2DC" unicode="&#xf2dc;" horiz-adv-x="1664" 
+d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45
+t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33
+q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313
+l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106
+q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" />
+    <glyph glyph-name="uniF2DD" unicode="&#xf2dd;" horiz-adv-x="1792" 
+d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321
+q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" />
+    <glyph glyph-name="uniF2DE" unicode="&#xf2de;" horiz-adv-x="1792" 
+d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62
+t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71
+t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2E0" unicode="&#xf2e0;" horiz-adv-x="1920" 
+d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3
+t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53
+q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5
+q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5
+t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5
+q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z
+M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21
+q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16
+q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" />
+    <glyph glyph-name="uniF2E1" unicode="&#xf2e1;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E2" unicode="&#xf2e2;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E3" unicode="&#xf2e3;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E4" unicode="&#xf2e4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E5" unicode="&#xf2e5;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E6" unicode="&#xf2e6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E7" unicode="&#xf2e7;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_698" unicode="&#xf2e8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E9" unicode="&#xf2e9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EA" unicode="&#xf2ea;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EB" unicode="&#xf2eb;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EC" unicode="&#xf2ec;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2ED" unicode="&#xf2ed;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EE" unicode="&#xf2ee;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="lessequal" unicode="&#xf500;" horiz-adv-x="1792" 
+ />
+  </font>
+</defs></svg>
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.ttf b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.ttf differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.woff b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..400014a4b06eee3d0c0d54402a47ab2601b2862b
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.woff differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.woff2 b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/fontawesome-webfont.woff2 differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold-italic.woff b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold-italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..88ad05b9ff413055b4d4e89dd3eec1c193fa20c6
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold-italic.woff differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold-italic.woff2 b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..c4e3d804b57b625b16a36d767bfca6bbf63d414e
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold-italic.woff2 differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold.woff b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..c6dff51f063cc732fdb5fe786a8966de85f4ebec
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold.woff differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold.woff2 b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..bb195043cfc07fa52741c6144d7378b5ba8be4c5
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-bold.woff2 differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal-italic.woff b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal-italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..76114bc03362242c3325ecda6ce6d02bb737880f
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal-italic.woff differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal-italic.woff2 b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..3404f37e2e312757841abe20343588a7740768ca
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal-italic.woff2 differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal.woff b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal.woff
new file mode 100644
index 0000000000000000000000000000000000000000..ae1307ff5f4c48678621c240f8972d5a6e20b22c
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal.woff differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal.woff2 b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..3bf9843328a6359b6bd06e50010319c63da0d717
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/fonts/lato-normal.woff2 differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/css/theme.css b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/theme.css
new file mode 100644
index 0000000000000000000000000000000000000000..0d9ae7e1a45b82198c53548383a570d924993371
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/css/theme.css
@@ -0,0 +1,4 @@
+html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/custom.css b/VimbaX/doc/VmbCPP_Function_Reference/_static/custom.css
new file mode 100644
index 0000000000000000000000000000000000000000..253f08d4161357c64af867f6f9e091a12b22e1e8
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/custom.css
@@ -0,0 +1,6247 @@
+html {
+  box-sizing: border-box;
+}
+*,
+:after,
+:before {
+  box-sizing: inherit;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+  display: block;
+}
+audio,
+canvas,
+video {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+}
+[hidden],
+audio:not([controls]) {
+  display: none;
+}
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+html {
+  font-size: 100%;
+  -webkit-text-size-adjust: 100%;
+  -ms-text-size-adjust: 100%;
+}
+body {
+  margin: 0;
+}
+a:active,
+a:hover {
+  outline: 0;
+}
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+b,
+strong {
+  font-weight: 700;
+}
+blockquote {
+  margin: 0;
+}
+dfn {
+  font-style: italic;
+}
+ins {
+  background: #ff9;
+  text-decoration: none;
+}
+ins,
+mark {
+  color: #000;
+}
+mark {
+  background: #ff0;
+  font-style: italic;
+  font-weight: 700;
+}
+.rst-content code,
+.rst-content tt,
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, serif;
+  _font-family: courier new, monospace;
+  font-size: 1em;
+}
+pre {
+  white-space: pre;
+}
+q {
+  quotes: none;
+}
+q:after,
+q:before {
+  content: "";
+  content: none;
+}
+small {
+  font-size: 85%;
+}
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+sup {
+  top: -0.5em;
+}
+sub {
+  bottom: -0.25em;
+}
+dl,
+ol,
+ul {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  list-style-image: none;
+}
+li {
+  list-style: none;
+}
+dd {
+  margin: 0;
+}
+img {
+  border: 0;
+  -ms-interpolation-mode: bicubic;
+  vertical-align: middle;
+  max-width: 100%;
+}
+svg:not(:root) {
+  overflow: hidden;
+}
+figure,
+form {
+  margin: 0;
+}
+label {
+  cursor: pointer;
+}
+button,
+input,
+select,
+textarea {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+}
+button,
+input {
+  line-height: normal;
+}
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  cursor: pointer;
+  -webkit-appearance: button;
+  *overflow: visible;
+}
+button[disabled],
+input[disabled] {
+  cursor: default;
+}
+input[type="search"] {
+  -webkit-appearance: textfield;
+  -moz-box-sizing: content-box;
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+}
+textarea {
+  resize: vertical;
+}
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+td {
+  vertical-align: top;
+}
+.chromeframe {
+  margin: 0.2em 0;
+  background: #ccc;
+  color: #000;
+  padding: 0.2em 0;
+}
+.ir {
+  display: block;
+  border: 0;
+  text-indent: -999em;
+  overflow: hidden;
+  background-color: transparent;
+  background-repeat: no-repeat;
+  text-align: left;
+  direction: ltr;
+  *line-height: 0;
+}
+.ir br {
+  display: none;
+}
+.hidden {
+  display: none !important;
+  visibility: hidden;
+}
+.visuallyhidden {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+}
+.visuallyhidden.focusable:active,
+.visuallyhidden.focusable:focus {
+  clip: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  position: static;
+  width: auto;
+}
+.invisible {
+  visibility: hidden;
+}
+.relative {
+  position: relative;
+}
+big,
+small {
+  font-size: 100%;
+}
+@media print {
+  body,
+  html,
+  section {
+    background: none !important;
+  }
+  * {
+    box-shadow: none !important;
+    text-shadow: none !important;
+    filter: none !important;
+    -ms-filter: none !important;
+  }
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+  .ir a:after,
+  a[href^="#"]:after,
+  a[href^="javascript:"]:after {
+    content: "";
+  }
+  blockquote,
+  pre {
+    page-break-inside: avoid;
+  }
+  thead {
+    display: table-header-group;
+  }
+  img,
+  tr {
+    page-break-inside: avoid;
+  }
+  img {
+    max-width: 100% !important;
+  }
+  @page {
+    margin: 0.5cm;
+  }
+  .rst-content .toctree-wrapper > p.caption,
+  h2,
+  h3,
+  p {
+    orphans: 3;
+    widows: 3;
+  }
+  .rst-content .toctree-wrapper > p.caption,
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+}
+.btn,
+.fa:before,
+.icon:before,
+.rst-content .admonition,
+.rst-content .admonition-title:before,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .code-block-caption .headerlink:before,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning,
+.rst-content code.download span:first-child:before,
+.rst-content dl dt .headerlink:before,
+.rst-content h1 .headerlink:before,
+.rst-content h2 .headerlink:before,
+.rst-content h3 .headerlink:before,
+.rst-content h4 .headerlink:before,
+.rst-content h5 .headerlink:before,
+.rst-content h6 .headerlink:before,
+.rst-content p.caption .headerlink:before,
+.rst-content table > caption .headerlink:before,
+.rst-content tt.download span:first-child:before,
+.wy-alert,
+.wy-dropdown .caret:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,
+.wy-menu-vertical li.current > a,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a,
+.wy-menu-vertical li.on a span.toctree-expand:before,
+.wy-menu-vertical li span.toctree-expand:before,
+.wy-nav-top a,
+.wy-side-nav-search .wy-dropdown > a,
+.wy-side-nav-search > a,
+input[type="color"],
+input[type="date"],
+input[type="datetime-local"],
+input[type="datetime"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"],
+select,
+textarea {
+  -webkit-font-smoothing: antialiased;
+}
+.clearfix {
+  *zoom: 1;
+}
+.clearfix:after,
+.clearfix:before {
+  display: table;
+  content: "";
+}
+.clearfix:after {
+  clear: both;
+} /*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+@font-face {
+  font-family: FontAwesome;
+  src: url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);
+  src: url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0)
+      format("embedded-opentype"),
+    url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e)
+      format("woff2"),
+    url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad)
+      format("woff"),
+    url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9)
+      format("truetype"),
+    url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular)
+      format("svg");
+  font-weight: 400;
+  font-style: normal;
+}
+.fa,
+.icon,
+.rst-content .admonition-title,
+.rst-content .code-block-caption .headerlink,
+.rst-content code.download span:first-child,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink,
+.rst-content tt.download span:first-child,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li span.toctree-expand {
+  display: inline-block;
+  font: normal normal normal 14px/1 FontAwesome;
+  font-size: inherit;
+  text-rendering: auto;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.fa-lg {
+  font-size: 1.33333em;
+  line-height: 0.75em;
+  vertical-align: -15%;
+}
+.fa-2x {
+  font-size: 2em;
+}
+.fa-3x {
+  font-size: 3em;
+}
+.fa-4x {
+  font-size: 4em;
+}
+.fa-5x {
+  font-size: 5em;
+}
+.fa-fw {
+  width: 1.28571em;
+  text-align: center;
+}
+.fa-ul {
+  padding-left: 0;
+  margin-left: 2.14286em;
+  list-style-type: none;
+}
+.fa-ul > li {
+  position: relative;
+}
+.fa-li {
+  position: absolute;
+  left: -2.14286em;
+  width: 2.14286em;
+  top: 0.14286em;
+  text-align: center;
+}
+.fa-li.fa-lg {
+  left: -1.85714em;
+}
+.fa-border {
+  padding: 0.2em 0.25em 0.15em;
+  border: 0.08em solid #eee;
+  border-radius: 0.1em;
+}
+.fa-pull-left {
+  float: left;
+}
+.fa-pull-right {
+  float: right;
+}
+.fa-pull-left.icon,
+.fa.fa-pull-left,
+.rst-content .code-block-caption .fa-pull-left.headerlink,
+.rst-content .fa-pull-left.admonition-title,
+.rst-content code.download span.fa-pull-left:first-child,
+.rst-content dl dt .fa-pull-left.headerlink,
+.rst-content h1 .fa-pull-left.headerlink,
+.rst-content h2 .fa-pull-left.headerlink,
+.rst-content h3 .fa-pull-left.headerlink,
+.rst-content h4 .fa-pull-left.headerlink,
+.rst-content h5 .fa-pull-left.headerlink,
+.rst-content h6 .fa-pull-left.headerlink,
+.rst-content p.caption .fa-pull-left.headerlink,
+.rst-content table > caption .fa-pull-left.headerlink,
+.rst-content tt.download span.fa-pull-left:first-child,
+.wy-menu-vertical li.current > a span.fa-pull-left.toctree-expand,
+.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,
+.wy-menu-vertical li span.fa-pull-left.toctree-expand {
+  margin-right: 0.3em;
+}
+.fa-pull-right.icon,
+.fa.fa-pull-right,
+.rst-content .code-block-caption .fa-pull-right.headerlink,
+.rst-content .fa-pull-right.admonition-title,
+.rst-content code.download span.fa-pull-right:first-child,
+.rst-content dl dt .fa-pull-right.headerlink,
+.rst-content h1 .fa-pull-right.headerlink,
+.rst-content h2 .fa-pull-right.headerlink,
+.rst-content h3 .fa-pull-right.headerlink,
+.rst-content h4 .fa-pull-right.headerlink,
+.rst-content h5 .fa-pull-right.headerlink,
+.rst-content h6 .fa-pull-right.headerlink,
+.rst-content p.caption .fa-pull-right.headerlink,
+.rst-content table > caption .fa-pull-right.headerlink,
+.rst-content tt.download span.fa-pull-right:first-child,
+.wy-menu-vertical li.current > a span.fa-pull-right.toctree-expand,
+.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,
+.wy-menu-vertical li span.fa-pull-right.toctree-expand {
+  margin-left: 0.3em;
+}
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+.fa.pull-left,
+.pull-left.icon,
+.rst-content .code-block-caption .pull-left.headerlink,
+.rst-content .pull-left.admonition-title,
+.rst-content code.download span.pull-left:first-child,
+.rst-content dl dt .pull-left.headerlink,
+.rst-content h1 .pull-left.headerlink,
+.rst-content h2 .pull-left.headerlink,
+.rst-content h3 .pull-left.headerlink,
+.rst-content h4 .pull-left.headerlink,
+.rst-content h5 .pull-left.headerlink,
+.rst-content h6 .pull-left.headerlink,
+.rst-content p.caption .pull-left.headerlink,
+.rst-content table > caption .pull-left.headerlink,
+.rst-content tt.download span.pull-left:first-child,
+.wy-menu-vertical li.current > a span.pull-left.toctree-expand,
+.wy-menu-vertical li.on a span.pull-left.toctree-expand,
+.wy-menu-vertical li span.pull-left.toctree-expand {
+  margin-right: 0.3em;
+}
+.fa.pull-right,
+.pull-right.icon,
+.rst-content .code-block-caption .pull-right.headerlink,
+.rst-content .pull-right.admonition-title,
+.rst-content code.download span.pull-right:first-child,
+.rst-content dl dt .pull-right.headerlink,
+.rst-content h1 .pull-right.headerlink,
+.rst-content h2 .pull-right.headerlink,
+.rst-content h3 .pull-right.headerlink,
+.rst-content h4 .pull-right.headerlink,
+.rst-content h5 .pull-right.headerlink,
+.rst-content h6 .pull-right.headerlink,
+.rst-content p.caption .pull-right.headerlink,
+.rst-content table > caption .pull-right.headerlink,
+.rst-content tt.download span.pull-right:first-child,
+.wy-menu-vertical li.current > a span.pull-right.toctree-expand,
+.wy-menu-vertical li.on a span.pull-right.toctree-expand,
+.wy-menu-vertical li span.pull-right.toctree-expand {
+  margin-left: 0.3em;
+}
+.fa-spin {
+  -webkit-animation: fa-spin 2s linear infinite;
+  animation: fa-spin 2s linear infinite;
+}
+.fa-pulse {
+  -webkit-animation: fa-spin 1s steps(8) infinite;
+  animation: fa-spin 1s steps(8) infinite;
+}
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+.fa-rotate-90 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+  -webkit-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.fa-rotate-180 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+  -webkit-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.fa-rotate-270 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+  -webkit-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+  -webkit-transform: scaleX(-1);
+  -ms-transform: scaleX(-1);
+  transform: scaleX(-1);
+}
+.fa-flip-vertical {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+  -webkit-transform: scaleY(-1);
+  -ms-transform: scaleY(-1);
+  transform: scaleY(-1);
+}
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical,
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270 {
+  filter: none;
+}
+.fa-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.fa-stack-1x {
+  line-height: inherit;
+}
+.fa-stack-2x {
+  font-size: 2em;
+}
+.fa-inverse {
+  color: #fff;
+}
+.fa-glass:before {
+  content: "";
+}
+.fa-music:before {
+  content: "";
+}
+.fa-search:before,
+.icon-search:before {
+  content: "";
+}
+.fa-envelope-o:before {
+  content: "";
+}
+.fa-heart:before {
+  content: "";
+}
+.fa-star:before {
+  content: "";
+}
+.fa-star-o:before {
+  content: "";
+}
+.fa-user:before {
+  content: "";
+}
+.fa-film:before {
+  content: "";
+}
+.fa-th-large:before {
+  content: "";
+}
+.fa-th:before {
+  content: "";
+}
+.fa-th-list:before {
+  content: "";
+}
+.fa-check:before {
+  content: "";
+}
+.fa-close:before,
+.fa-remove:before,
+.fa-times:before {
+  content: "";
+}
+.fa-search-plus:before {
+  content: "";
+}
+.fa-search-minus:before {
+  content: "";
+}
+.fa-power-off:before {
+  content: "";
+}
+.fa-signal:before {
+  content: "";
+}
+.fa-cog:before,
+.fa-gear:before {
+  content: "";
+}
+.fa-trash-o:before {
+  content: "";
+}
+.fa-home:before,
+.icon-home:before {
+  content: "";
+}
+.fa-file-o:before {
+  content: "";
+}
+.fa-clock-o:before {
+  content: "";
+}
+.fa-road:before {
+  content: "";
+}
+.fa-download:before,
+.rst-content code.download span:first-child:before,
+.rst-content tt.download span:first-child:before {
+  content: "";
+}
+.fa-arrow-circle-o-down:before {
+  content: "";
+}
+.fa-arrow-circle-o-up:before {
+  content: "";
+}
+.fa-inbox:before {
+  content: "";
+}
+.fa-play-circle-o:before {
+  content: "";
+}
+.fa-repeat:before,
+.fa-rotate-right:before {
+  content: "";
+}
+.fa-refresh:before {
+  content: "";
+}
+.fa-list-alt:before {
+  content: "";
+}
+.fa-lock:before {
+  content: "";
+}
+.fa-flag:before {
+  content: "";
+}
+.fa-headphones:before {
+  content: "";
+}
+.fa-volume-off:before {
+  content: "";
+}
+.fa-volume-down:before {
+  content: "";
+}
+.fa-volume-up:before {
+  content: "";
+}
+.fa-qrcode:before {
+  content: "";
+}
+.fa-barcode:before {
+  content: "";
+}
+.fa-tag:before {
+  content: "";
+}
+.fa-tags:before {
+  content: "";
+}
+.fa-book:before,
+.icon-book:before {
+  content: "";
+}
+.fa-bookmark:before {
+  content: "";
+}
+.fa-print:before {
+  content: "";
+}
+.fa-camera:before {
+  content: "";
+}
+.fa-font:before {
+  content: "";
+}
+.fa-bold:before {
+  content: "";
+}
+.fa-italic:before {
+  content: "";
+}
+.fa-text-height:before {
+  content: "";
+}
+.fa-text-width:before {
+  content: "";
+}
+.fa-align-left:before {
+  content: "";
+}
+.fa-align-center:before {
+  content: "";
+}
+.fa-align-right:before {
+  content: "";
+}
+.fa-align-justify:before {
+  content: "";
+}
+.fa-list:before {
+  content: "";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+  content: "";
+}
+.fa-indent:before {
+  content: "";
+}
+.fa-video-camera:before {
+  content: "";
+}
+.fa-image:before,
+.fa-photo:before,
+.fa-picture-o:before {
+  content: "";
+}
+.fa-pencil:before {
+  content: "";
+}
+.fa-map-marker:before {
+  content: "";
+}
+.fa-adjust:before {
+  content: "";
+}
+.fa-tint:before {
+  content: "";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+  content: "";
+}
+.fa-share-square-o:before {
+  content: "";
+}
+.fa-check-square-o:before {
+  content: "";
+}
+.fa-arrows:before {
+  content: "";
+}
+.fa-step-backward:before {
+  content: "";
+}
+.fa-fast-backward:before {
+  content: "";
+}
+.fa-backward:before {
+  content: "";
+}
+.fa-play:before {
+  content: "";
+}
+.fa-pause:before {
+  content: "";
+}
+.fa-stop:before {
+  content: "";
+}
+.fa-forward:before {
+  content: "";
+}
+.fa-fast-forward:before {
+  content: "";
+}
+.fa-step-forward:before {
+  content: "";
+}
+.fa-eject:before {
+  content: "";
+}
+.fa-chevron-left:before {
+  content: "";
+}
+.fa-chevron-right:before {
+  content: "";
+}
+.fa-plus-circle:before {
+  content: "";
+}
+.fa-minus-circle:before {
+  content: "";
+}
+.fa-times-circle:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before {
+  content: "";
+}
+.fa-check-circle:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before {
+  content: "";
+}
+.fa-question-circle:before {
+  content: "";
+}
+.fa-info-circle:before {
+  content: "";
+}
+.fa-crosshairs:before {
+  content: "";
+}
+.fa-times-circle-o:before {
+  content: "";
+}
+.fa-check-circle-o:before {
+  content: "";
+}
+.fa-ban:before {
+  content: "";
+}
+.fa-arrow-left:before {
+  content: "";
+}
+.fa-arrow-right:before {
+  content: "";
+}
+.fa-arrow-up:before {
+  content: "";
+}
+.fa-arrow-down:before {
+  content: "";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+  content: "";
+}
+.fa-expand:before {
+  content: "";
+}
+.fa-compress:before {
+  content: "";
+}
+.fa-plus:before {
+  content: "";
+}
+.fa-minus:before {
+  content: "";
+}
+.fa-asterisk:before {
+  content: "";
+}
+.fa-exclamation-circle:before,
+.rst-content .admonition-title:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before {
+  content: "";
+}
+.fa-gift:before {
+  content: "";
+}
+.fa-leaf:before {
+  content: "";
+}
+.fa-fire:before,
+.icon-fire:before {
+  content: "";
+}
+.fa-eye:before {
+  content: "";
+}
+.fa-eye-slash:before {
+  content: "";
+}
+.fa-exclamation-triangle:before,
+.fa-warning:before {
+  content: "";
+}
+.fa-plane:before {
+  content: "";
+}
+.fa-calendar:before {
+  content: "";
+}
+.fa-random:before {
+  content: "";
+}
+.fa-comment:before {
+  content: "";
+}
+.fa-magnet:before {
+  content: "";
+}
+.fa-chevron-up:before {
+  content: "";
+}
+.fa-chevron-down:before {
+  content: "";
+}
+.fa-retweet:before {
+  content: "";
+}
+.fa-shopping-cart:before {
+  content: "";
+}
+.fa-folder:before {
+  content: "";
+}
+.fa-folder-open:before {
+  content: "";
+}
+.fa-arrows-v:before {
+  content: "";
+}
+.fa-arrows-h:before {
+  content: "";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+  content: "";
+}
+.fa-twitter-square:before {
+  content: "";
+}
+.fa-facebook-square:before {
+  content: "";
+}
+.fa-camera-retro:before {
+  content: "";
+}
+.fa-key:before {
+  content: "";
+}
+.fa-cogs:before,
+.fa-gears:before {
+  content: "";
+}
+.fa-comments:before {
+  content: "";
+}
+.fa-thumbs-o-up:before {
+  content: "";
+}
+.fa-thumbs-o-down:before {
+  content: "";
+}
+.fa-star-half:before {
+  content: "";
+}
+.fa-heart-o:before {
+  content: "";
+}
+.fa-sign-out:before {
+  content: "";
+}
+.fa-linkedin-square:before {
+  content: "";
+}
+.fa-thumb-tack:before {
+  content: "";
+}
+.fa-external-link:before {
+  content: "";
+}
+.fa-sign-in:before {
+  content: "";
+}
+.fa-trophy:before {
+  content: "";
+}
+.fa-github-square:before {
+  content: "";
+}
+.fa-upload:before {
+  content: "";
+}
+.fa-lemon-o:before {
+  content: "";
+}
+.fa-phone:before {
+  content: "";
+}
+.fa-square-o:before {
+  content: "";
+}
+.fa-bookmark-o:before {
+  content: "";
+}
+.fa-phone-square:before {
+  content: "";
+}
+.fa-twitter:before {
+  content: "";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+  content: "";
+}
+.fa-github:before,
+.icon-github:before {
+  content: "";
+}
+.fa-unlock:before {
+  content: "";
+}
+.fa-credit-card:before {
+  content: "";
+}
+.fa-feed:before,
+.fa-rss:before {
+  content: "";
+}
+.fa-hdd-o:before {
+  content: "";
+}
+.fa-bullhorn:before {
+  content: "";
+}
+.fa-bell:before {
+  content: "";
+}
+.fa-certificate:before {
+  content: "";
+}
+.fa-hand-o-right:before {
+  content: "";
+}
+.fa-hand-o-left:before {
+  content: "";
+}
+.fa-hand-o-up:before {
+  content: "";
+}
+.fa-hand-o-down:before {
+  content: "";
+}
+.fa-arrow-circle-left:before,
+.icon-circle-arrow-left:before {
+  content: "";
+}
+.fa-arrow-circle-right:before,
+.icon-circle-arrow-right:before {
+  content: "";
+}
+.fa-arrow-circle-up:before {
+  content: "";
+}
+.fa-arrow-circle-down:before {
+  content: "";
+}
+.fa-globe:before {
+  content: "";
+}
+.fa-wrench:before {
+  content: "";
+}
+.fa-tasks:before {
+  content: "";
+}
+.fa-filter:before {
+  content: "";
+}
+.fa-briefcase:before {
+  content: "";
+}
+.fa-arrows-alt:before {
+  content: "";
+}
+.fa-group:before,
+.fa-users:before {
+  content: "";
+}
+.fa-chain:before,
+.fa-link:before,
+.icon-link:before {
+  content: "";
+}
+.fa-cloud:before {
+  content: "";
+}
+.fa-flask:before {
+  content: "";
+}
+.fa-cut:before,
+.fa-scissors:before {
+  content: "";
+}
+.fa-copy:before,
+.fa-files-o:before {
+  content: "";
+}
+.fa-paperclip:before {
+  content: "";
+}
+.fa-floppy-o:before,
+.fa-save:before {
+  content: "";
+}
+.fa-square:before {
+  content: "";
+}
+.fa-bars:before,
+.fa-navicon:before,
+.fa-reorder:before {
+  content: "";
+}
+.fa-list-ul:before {
+  content: "";
+}
+.fa-list-ol:before {
+  content: "";
+}
+.fa-strikethrough:before {
+  content: "";
+}
+.fa-underline:before {
+  content: "";
+}
+.fa-table:before {
+  content: "";
+}
+.fa-magic:before {
+  content: "";
+}
+.fa-truck:before {
+  content: "";
+}
+.fa-pinterest:before {
+  content: "";
+}
+.fa-pinterest-square:before {
+  content: "";
+}
+.fa-google-plus-square:before {
+  content: "";
+}
+.fa-google-plus:before {
+  content: "";
+}
+.fa-money:before {
+  content: "";
+}
+.fa-caret-down:before,
+.icon-caret-down:before,
+.wy-dropdown .caret:before {
+  content: "";
+}
+.fa-caret-up:before {
+  content: "";
+}
+.fa-caret-left:before {
+  content: "";
+}
+.fa-caret-right:before {
+  content: "";
+}
+.fa-columns:before {
+  content: "";
+}
+.fa-sort:before,
+.fa-unsorted:before {
+  content: "";
+}
+.fa-sort-desc:before,
+.fa-sort-down:before {
+  content: "";
+}
+.fa-sort-asc:before,
+.fa-sort-up:before {
+  content: "";
+}
+.fa-envelope:before {
+  content: "";
+}
+.fa-linkedin:before {
+  content: "";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+  content: "";
+}
+.fa-gavel:before,
+.fa-legal:before {
+  content: "";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+  content: "";
+}
+.fa-comment-o:before {
+  content: "";
+}
+.fa-comments-o:before {
+  content: "";
+}
+.fa-bolt:before,
+.fa-flash:before {
+  content: "";
+}
+.fa-sitemap:before {
+  content: "";
+}
+.fa-umbrella:before {
+  content: "";
+}
+.fa-clipboard:before,
+.fa-paste:before {
+  content: "";
+}
+.fa-lightbulb-o:before {
+  content: "";
+}
+.fa-exchange:before {
+  content: "";
+}
+.fa-cloud-download:before {
+  content: "";
+}
+.fa-cloud-upload:before {
+  content: "";
+}
+.fa-user-md:before {
+  content: "";
+}
+.fa-stethoscope:before {
+  content: "";
+}
+.fa-suitcase:before {
+  content: "";
+}
+.fa-bell-o:before {
+  content: "";
+}
+.fa-coffee:before {
+  content: "";
+}
+.fa-cutlery:before {
+  content: "";
+}
+.fa-file-text-o:before {
+  content: "";
+}
+.fa-building-o:before {
+  content: "";
+}
+.fa-hospital-o:before {
+  content: "";
+}
+.fa-ambulance:before {
+  content: "";
+}
+.fa-medkit:before {
+  content: "";
+}
+.fa-fighter-jet:before {
+  content: "";
+}
+.fa-beer:before {
+  content: "";
+}
+.fa-h-square:before {
+  content: "";
+}
+.fa-plus-square:before {
+  content: "";
+}
+.fa-angle-double-left:before {
+  content: "";
+}
+.fa-angle-double-right:before {
+  content: "";
+}
+.fa-angle-double-up:before {
+  content: "";
+}
+.fa-angle-double-down:before {
+  content: "";
+}
+.fa-angle-left:before {
+  content: "";
+}
+.fa-angle-right:before {
+  content: "";
+}
+.fa-angle-up:before {
+  content: "";
+}
+.fa-angle-down:before {
+  content: "";
+}
+.fa-desktop:before {
+  content: "";
+}
+.fa-laptop:before {
+  content: "";
+}
+.fa-tablet:before {
+  content: "";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+  content: "";
+}
+.fa-circle-o:before {
+  content: "";
+}
+.fa-quote-left:before {
+  content: "";
+}
+.fa-quote-right:before {
+  content: "";
+}
+.fa-spinner:before {
+  content: "";
+}
+.fa-circle:before {
+  content: "";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+  content: "";
+}
+.fa-github-alt:before {
+  content: "";
+}
+.fa-folder-o:before {
+  content: "";
+}
+.fa-folder-open-o:before {
+  content: "";
+}
+.fa-smile-o:before {
+  content: "";
+}
+.fa-frown-o:before {
+  content: "";
+}
+.fa-meh-o:before {
+  content: "";
+}
+.fa-gamepad:before {
+  content: "";
+}
+.fa-keyboard-o:before {
+  content: "";
+}
+.fa-flag-o:before {
+  content: "";
+}
+.fa-flag-checkered:before {
+  content: "";
+}
+.fa-terminal:before {
+  content: "";
+}
+.fa-code:before {
+  content: "";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+  content: "";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+  content: "";
+}
+.fa-location-arrow:before {
+  content: "";
+}
+.fa-crop:before {
+  content: "";
+}
+.fa-code-fork:before {
+  content: "";
+}
+.fa-chain-broken:before,
+.fa-unlink:before {
+  content: "";
+}
+.fa-question:before {
+  content: "";
+}
+.fa-info:before {
+  content: "";
+}
+.fa-exclamation:before {
+  content: "";
+}
+.fa-superscript:before {
+  content: "";
+}
+.fa-subscript:before {
+  content: "";
+}
+.fa-eraser:before {
+  content: "";
+}
+.fa-puzzle-piece:before {
+  content: "";
+}
+.fa-microphone:before {
+  content: "";
+}
+.fa-microphone-slash:before {
+  content: "";
+}
+.fa-shield:before {
+  content: "";
+}
+.fa-calendar-o:before {
+  content: "";
+}
+.fa-fire-extinguisher:before {
+  content: "";
+}
+.fa-rocket:before {
+  content: "";
+}
+.fa-maxcdn:before {
+  content: "";
+}
+.fa-chevron-circle-left:before {
+  content: "";
+}
+.fa-chevron-circle-right:before {
+  content: "";
+}
+.fa-chevron-circle-up:before {
+  content: "";
+}
+.fa-chevron-circle-down:before {
+  content: "";
+}
+.fa-html5:before {
+  content: "";
+}
+.fa-css3:before {
+  content: "";
+}
+.fa-anchor:before {
+  content: "";
+}
+.fa-unlock-alt:before {
+  content: "";
+}
+.fa-bullseye:before {
+  content: "";
+}
+.fa-ellipsis-h:before {
+  content: "";
+}
+.fa-ellipsis-v:before {
+  content: "";
+}
+.fa-rss-square:before {
+  content: "";
+}
+.fa-play-circle:before {
+  content: "";
+}
+.fa-ticket:before {
+  content: "";
+}
+.fa-minus-square:before {
+  content: "";
+}
+.fa-minus-square-o:before,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a span.toctree-expand:before {
+  content: "";
+}
+.fa-level-up:before {
+  content: "";
+}
+.fa-level-down:before {
+  content: "";
+}
+.fa-check-square:before {
+  content: "";
+}
+.fa-pencil-square:before {
+  content: "";
+}
+.fa-external-link-square:before {
+  content: "";
+}
+.fa-share-square:before {
+  content: "";
+}
+.fa-compass:before {
+  content: "";
+}
+.fa-caret-square-o-down:before,
+.fa-toggle-down:before {
+  content: "";
+}
+.fa-caret-square-o-up:before,
+.fa-toggle-up:before {
+  content: "";
+}
+.fa-caret-square-o-right:before,
+.fa-toggle-right:before {
+  content: "";
+}
+.fa-eur:before,
+.fa-euro:before {
+  content: "";
+}
+.fa-gbp:before {
+  content: "";
+}
+.fa-dollar:before,
+.fa-usd:before {
+  content: "";
+}
+.fa-inr:before,
+.fa-rupee:before {
+  content: "";
+}
+.fa-cny:before,
+.fa-jpy:before,
+.fa-rmb:before,
+.fa-yen:before {
+  content: "";
+}
+.fa-rouble:before,
+.fa-rub:before,
+.fa-ruble:before {
+  content: "";
+}
+.fa-krw:before,
+.fa-won:before {
+  content: "";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+  content: "";
+}
+.fa-file:before {
+  content: "";
+}
+.fa-file-text:before {
+  content: "";
+}
+.fa-sort-alpha-asc:before {
+  content: "";
+}
+.fa-sort-alpha-desc:before {
+  content: "";
+}
+.fa-sort-amount-asc:before {
+  content: "";
+}
+.fa-sort-amount-desc:before {
+  content: "";
+}
+.fa-sort-numeric-asc:before {
+  content: "";
+}
+.fa-sort-numeric-desc:before {
+  content: "";
+}
+.fa-thumbs-up:before {
+  content: "";
+}
+.fa-thumbs-down:before {
+  content: "";
+}
+.fa-youtube-square:before {
+  content: "";
+}
+.fa-youtube:before {
+  content: "";
+}
+.fa-xing:before {
+  content: "";
+}
+.fa-xing-square:before {
+  content: "";
+}
+.fa-youtube-play:before {
+  content: "";
+}
+.fa-dropbox:before {
+  content: "";
+}
+.fa-stack-overflow:before {
+  content: "";
+}
+.fa-instagram:before {
+  content: "";
+}
+.fa-flickr:before {
+  content: "";
+}
+.fa-adn:before {
+  content: "";
+}
+.fa-bitbucket:before,
+.icon-bitbucket:before {
+  content: "";
+}
+.fa-bitbucket-square:before {
+  content: "";
+}
+.fa-tumblr:before {
+  content: "";
+}
+.fa-tumblr-square:before {
+  content: "";
+}
+.fa-long-arrow-down:before {
+  content: "";
+}
+.fa-long-arrow-up:before {
+  content: "";
+}
+.fa-long-arrow-left:before {
+  content: "";
+}
+.fa-long-arrow-right:before {
+  content: "";
+}
+.fa-apple:before {
+  content: "";
+}
+.fa-windows:before {
+  content: "";
+}
+.fa-android:before {
+  content: "";
+}
+.fa-linux:before {
+  content: "";
+}
+.fa-dribbble:before {
+  content: "";
+}
+.fa-skype:before {
+  content: "";
+}
+.fa-foursquare:before {
+  content: "";
+}
+.fa-trello:before {
+  content: "";
+}
+.fa-female:before {
+  content: "";
+}
+.fa-male:before {
+  content: "";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+  content: "";
+}
+.fa-sun-o:before {
+  content: "";
+}
+.fa-moon-o:before {
+  content: "";
+}
+.fa-archive:before {
+  content: "";
+}
+.fa-bug:before {
+  content: "";
+}
+.fa-vk:before {
+  content: "";
+}
+.fa-weibo:before {
+  content: "";
+}
+.fa-renren:before {
+  content: "";
+}
+.fa-pagelines:before {
+  content: "";
+}
+.fa-stack-exchange:before {
+  content: "";
+}
+.fa-arrow-circle-o-right:before {
+  content: "";
+}
+.fa-arrow-circle-o-left:before {
+  content: "";
+}
+.fa-caret-square-o-left:before,
+.fa-toggle-left:before {
+  content: "";
+}
+.fa-dot-circle-o:before {
+  content: "";
+}
+.fa-wheelchair:before {
+  content: "";
+}
+.fa-vimeo-square:before {
+  content: "";
+}
+.fa-try:before,
+.fa-turkish-lira:before {
+  content: "";
+}
+.fa-plus-square-o:before,
+.wy-menu-vertical li span.toctree-expand:before {
+  content: "";
+}
+.fa-space-shuttle:before {
+  content: "";
+}
+.fa-slack:before {
+  content: "";
+}
+.fa-envelope-square:before {
+  content: "";
+}
+.fa-wordpress:before {
+  content: "";
+}
+.fa-openid:before {
+  content: "";
+}
+.fa-bank:before,
+.fa-institution:before,
+.fa-university:before {
+  content: "";
+}
+.fa-graduation-cap:before,
+.fa-mortar-board:before {
+  content: "";
+}
+.fa-yahoo:before {
+  content: "";
+}
+.fa-google:before {
+  content: "";
+}
+.fa-reddit:before {
+  content: "";
+}
+.fa-reddit-square:before {
+  content: "";
+}
+.fa-stumbleupon-circle:before {
+  content: "";
+}
+.fa-stumbleupon:before {
+  content: "";
+}
+.fa-delicious:before {
+  content: "";
+}
+.fa-digg:before {
+  content: "";
+}
+.fa-pied-piper-pp:before {
+  content: "";
+}
+.fa-pied-piper-alt:before {
+  content: "";
+}
+.fa-drupal:before {
+  content: "";
+}
+.fa-joomla:before {
+  content: "";
+}
+.fa-language:before {
+  content: "";
+}
+.fa-fax:before {
+  content: "";
+}
+.fa-building:before {
+  content: "";
+}
+.fa-child:before {
+  content: "";
+}
+.fa-paw:before {
+  content: "";
+}
+.fa-spoon:before {
+  content: "";
+}
+.fa-cube:before {
+  content: "";
+}
+.fa-cubes:before {
+  content: "";
+}
+.fa-behance:before {
+  content: "";
+}
+.fa-behance-square:before {
+  content: "";
+}
+.fa-steam:before {
+  content: "";
+}
+.fa-steam-square:before {
+  content: "";
+}
+.fa-recycle:before {
+  content: "";
+}
+.fa-automobile:before,
+.fa-car:before {
+  content: "";
+}
+.fa-cab:before,
+.fa-taxi:before {
+  content: "";
+}
+.fa-tree:before {
+  content: "";
+}
+.fa-spotify:before {
+  content: "";
+}
+.fa-deviantart:before {
+  content: "";
+}
+.fa-soundcloud:before {
+  content: "";
+}
+.fa-database:before {
+  content: "";
+}
+.fa-file-pdf-o:before {
+  content: "";
+}
+.fa-file-word-o:before {
+  content: "";
+}
+.fa-file-excel-o:before {
+  content: "";
+}
+.fa-file-powerpoint-o:before {
+  content: "";
+}
+.fa-file-image-o:before,
+.fa-file-photo-o:before,
+.fa-file-picture-o:before {
+  content: "";
+}
+.fa-file-archive-o:before,
+.fa-file-zip-o:before {
+  content: "";
+}
+.fa-file-audio-o:before,
+.fa-file-sound-o:before {
+  content: "";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+  content: "";
+}
+.fa-file-code-o:before {
+  content: "";
+}
+.fa-vine:before {
+  content: "";
+}
+.fa-codepen:before {
+  content: "";
+}
+.fa-jsfiddle:before {
+  content: "";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-ring:before,
+.fa-life-saver:before,
+.fa-support:before {
+  content: "";
+}
+.fa-circle-o-notch:before {
+  content: "";
+}
+.fa-ra:before,
+.fa-rebel:before,
+.fa-resistance:before {
+  content: "";
+}
+.fa-empire:before,
+.fa-ge:before {
+  content: "";
+}
+.fa-git-square:before {
+  content: "";
+}
+.fa-git:before {
+  content: "";
+}
+.fa-hacker-news:before,
+.fa-y-combinator-square:before,
+.fa-yc-square:before {
+  content: "";
+}
+.fa-tencent-weibo:before {
+  content: "";
+}
+.fa-qq:before {
+  content: "";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+  content: "";
+}
+.fa-paper-plane:before,
+.fa-send:before {
+  content: "";
+}
+.fa-paper-plane-o:before,
+.fa-send-o:before {
+  content: "";
+}
+.fa-history:before {
+  content: "";
+}
+.fa-circle-thin:before {
+  content: "";
+}
+.fa-header:before {
+  content: "";
+}
+.fa-paragraph:before {
+  content: "";
+}
+.fa-sliders:before {
+  content: "";
+}
+.fa-share-alt:before {
+  content: "";
+}
+.fa-share-alt-square:before {
+  content: "";
+}
+.fa-bomb:before {
+  content: "";
+}
+.fa-futbol-o:before,
+.fa-soccer-ball-o:before {
+  content: "";
+}
+.fa-tty:before {
+  content: "";
+}
+.fa-binoculars:before {
+  content: "";
+}
+.fa-plug:before {
+  content: "";
+}
+.fa-slideshare:before {
+  content: "";
+}
+.fa-twitch:before {
+  content: "";
+}
+.fa-yelp:before {
+  content: "";
+}
+.fa-newspaper-o:before {
+  content: "";
+}
+.fa-wifi:before {
+  content: "";
+}
+.fa-calculator:before {
+  content: "";
+}
+.fa-paypal:before {
+  content: "";
+}
+.fa-google-wallet:before {
+  content: "";
+}
+.fa-cc-visa:before {
+  content: "";
+}
+.fa-cc-mastercard:before {
+  content: "";
+}
+.fa-cc-discover:before {
+  content: "";
+}
+.fa-cc-amex:before {
+  content: "";
+}
+.fa-cc-paypal:before {
+  content: "";
+}
+.fa-cc-stripe:before {
+  content: "";
+}
+.fa-bell-slash:before {
+  content: "";
+}
+.fa-bell-slash-o:before {
+  content: "";
+}
+.fa-trash:before {
+  content: "";
+}
+.fa-copyright:before {
+  content: "";
+}
+.fa-at:before {
+  content: "";
+}
+.fa-eyedropper:before {
+  content: "";
+}
+.fa-paint-brush:before {
+  content: "";
+}
+.fa-birthday-cake:before {
+  content: "";
+}
+.fa-area-chart:before {
+  content: "";
+}
+.fa-pie-chart:before {
+  content: "";
+}
+.fa-line-chart:before {
+  content: "";
+}
+.fa-lastfm:before {
+  content: "";
+}
+.fa-lastfm-square:before {
+  content: "";
+}
+.fa-toggle-off:before {
+  content: "";
+}
+.fa-toggle-on:before {
+  content: "";
+}
+.fa-bicycle:before {
+  content: "";
+}
+.fa-bus:before {
+  content: "";
+}
+.fa-ioxhost:before {
+  content: "";
+}
+.fa-angellist:before {
+  content: "";
+}
+.fa-cc:before {
+  content: "";
+}
+.fa-ils:before,
+.fa-shekel:before,
+.fa-sheqel:before {
+  content: "";
+}
+.fa-meanpath:before {
+  content: "";
+}
+.fa-buysellads:before {
+  content: "";
+}
+.fa-connectdevelop:before {
+  content: "";
+}
+.fa-dashcube:before {
+  content: "";
+}
+.fa-forumbee:before {
+  content: "";
+}
+.fa-leanpub:before {
+  content: "";
+}
+.fa-sellsy:before {
+  content: "";
+}
+.fa-shirtsinbulk:before {
+  content: "";
+}
+.fa-simplybuilt:before {
+  content: "";
+}
+.fa-skyatlas:before {
+  content: "";
+}
+.fa-cart-plus:before {
+  content: "";
+}
+.fa-cart-arrow-down:before {
+  content: "";
+}
+.fa-diamond:before {
+  content: "";
+}
+.fa-ship:before {
+  content: "";
+}
+.fa-user-secret:before {
+  content: "";
+}
+.fa-motorcycle:before {
+  content: "";
+}
+.fa-street-view:before {
+  content: "";
+}
+.fa-heartbeat:before {
+  content: "";
+}
+.fa-venus:before {
+  content: "";
+}
+.fa-mars:before {
+  content: "";
+}
+.fa-mercury:before {
+  content: "";
+}
+.fa-intersex:before,
+.fa-transgender:before {
+  content: "";
+}
+.fa-transgender-alt:before {
+  content: "";
+}
+.fa-venus-double:before {
+  content: "";
+}
+.fa-mars-double:before {
+  content: "";
+}
+.fa-venus-mars:before {
+  content: "";
+}
+.fa-mars-stroke:before {
+  content: "";
+}
+.fa-mars-stroke-v:before {
+  content: "";
+}
+.fa-mars-stroke-h:before {
+  content: "";
+}
+.fa-neuter:before {
+  content: "";
+}
+.fa-genderless:before {
+  content: "";
+}
+.fa-facebook-official:before {
+  content: "";
+}
+.fa-pinterest-p:before {
+  content: "";
+}
+.fa-whatsapp:before {
+  content: "";
+}
+.fa-server:before {
+  content: "";
+}
+.fa-user-plus:before {
+  content: "";
+}
+.fa-user-times:before {
+  content: "";
+}
+.fa-bed:before,
+.fa-hotel:before {
+  content: "";
+}
+.fa-viacoin:before {
+  content: "";
+}
+.fa-train:before {
+  content: "";
+}
+.fa-subway:before {
+  content: "";
+}
+.fa-medium:before {
+  content: "";
+}
+.fa-y-combinator:before,
+.fa-yc:before {
+  content: "";
+}
+.fa-optin-monster:before {
+  content: "";
+}
+.fa-opencart:before {
+  content: "";
+}
+.fa-expeditedssl:before {
+  content: "";
+}
+.fa-battery-4:before,
+.fa-battery-full:before,
+.fa-battery:before {
+  content: "";
+}
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+  content: "";
+}
+.fa-battery-2:before,
+.fa-battery-half:before {
+  content: "";
+}
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+  content: "";
+}
+.fa-battery-0:before,
+.fa-battery-empty:before {
+  content: "";
+}
+.fa-mouse-pointer:before {
+  content: "";
+}
+.fa-i-cursor:before {
+  content: "";
+}
+.fa-object-group:before {
+  content: "";
+}
+.fa-object-ungroup:before {
+  content: "";
+}
+.fa-sticky-note:before {
+  content: "";
+}
+.fa-sticky-note-o:before {
+  content: "";
+}
+.fa-cc-jcb:before {
+  content: "";
+}
+.fa-cc-diners-club:before {
+  content: "";
+}
+.fa-clone:before {
+  content: "";
+}
+.fa-balance-scale:before {
+  content: "";
+}
+.fa-hourglass-o:before {
+  content: "";
+}
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+  content: "";
+}
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+  content: "";
+}
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+  content: "";
+}
+.fa-hourglass:before {
+  content: "";
+}
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+  content: "";
+}
+.fa-hand-paper-o:before,
+.fa-hand-stop-o:before {
+  content: "";
+}
+.fa-hand-scissors-o:before {
+  content: "";
+}
+.fa-hand-lizard-o:before {
+  content: "";
+}
+.fa-hand-spock-o:before {
+  content: "";
+}
+.fa-hand-pointer-o:before {
+  content: "";
+}
+.fa-hand-peace-o:before {
+  content: "";
+}
+.fa-trademark:before {
+  content: "";
+}
+.fa-registered:before {
+  content: "";
+}
+.fa-creative-commons:before {
+  content: "";
+}
+.fa-gg:before {
+  content: "";
+}
+.fa-gg-circle:before {
+  content: "";
+}
+.fa-tripadvisor:before {
+  content: "";
+}
+.fa-odnoklassniki:before {
+  content: "";
+}
+.fa-odnoklassniki-square:before {
+  content: "";
+}
+.fa-get-pocket:before {
+  content: "";
+}
+.fa-wikipedia-w:before {
+  content: "";
+}
+.fa-safari:before {
+  content: "";
+}
+.fa-chrome:before {
+  content: "";
+}
+.fa-firefox:before {
+  content: "";
+}
+.fa-opera:before {
+  content: "";
+}
+.fa-internet-explorer:before {
+  content: "";
+}
+.fa-television:before,
+.fa-tv:before {
+  content: "";
+}
+.fa-contao:before {
+  content: "";
+}
+.fa-500px:before {
+  content: "";
+}
+.fa-amazon:before {
+  content: "";
+}
+.fa-calendar-plus-o:before {
+  content: "";
+}
+.fa-calendar-minus-o:before {
+  content: "";
+}
+.fa-calendar-times-o:before {
+  content: "";
+}
+.fa-calendar-check-o:before {
+  content: "";
+}
+.fa-industry:before {
+  content: "";
+}
+.fa-map-pin:before {
+  content: "";
+}
+.fa-map-signs:before {
+  content: "";
+}
+.fa-map-o:before {
+  content: "";
+}
+.fa-map:before {
+  content: "";
+}
+.fa-commenting:before {
+  content: "";
+}
+.fa-commenting-o:before {
+  content: "";
+}
+.fa-houzz:before {
+  content: "";
+}
+.fa-vimeo:before {
+  content: "";
+}
+.fa-black-tie:before {
+  content: "";
+}
+.fa-fonticons:before {
+  content: "";
+}
+.fa-reddit-alien:before {
+  content: "";
+}
+.fa-edge:before {
+  content: "";
+}
+.fa-credit-card-alt:before {
+  content: "";
+}
+.fa-codiepie:before {
+  content: "";
+}
+.fa-modx:before {
+  content: "";
+}
+.fa-fort-awesome:before {
+  content: "";
+}
+.fa-usb:before {
+  content: "";
+}
+.fa-product-hunt:before {
+  content: "";
+}
+.fa-mixcloud:before {
+  content: "";
+}
+.fa-scribd:before {
+  content: "";
+}
+.fa-pause-circle:before {
+  content: "";
+}
+.fa-pause-circle-o:before {
+  content: "";
+}
+.fa-stop-circle:before {
+  content: "";
+}
+.fa-stop-circle-o:before {
+  content: "";
+}
+.fa-shopping-bag:before {
+  content: "";
+}
+.fa-shopping-basket:before {
+  content: "";
+}
+.fa-hashtag:before {
+  content: "";
+}
+.fa-bluetooth:before {
+  content: "";
+}
+.fa-bluetooth-b:before {
+  content: "";
+}
+.fa-percent:before {
+  content: "";
+}
+.fa-gitlab:before,
+.icon-gitlab:before {
+  content: "";
+}
+.fa-wpbeginner:before {
+  content: "";
+}
+.fa-wpforms:before {
+  content: "";
+}
+.fa-envira:before {
+  content: "";
+}
+.fa-universal-access:before {
+  content: "";
+}
+.fa-wheelchair-alt:before {
+  content: "";
+}
+.fa-question-circle-o:before {
+  content: "";
+}
+.fa-blind:before {
+  content: "";
+}
+.fa-audio-description:before {
+  content: "";
+}
+.fa-volume-control-phone:before {
+  content: "";
+}
+.fa-braille:before {
+  content: "";
+}
+.fa-assistive-listening-systems:before {
+  content: "";
+}
+.fa-american-sign-language-interpreting:before,
+.fa-asl-interpreting:before {
+  content: "";
+}
+.fa-deaf:before,
+.fa-deafness:before,
+.fa-hard-of-hearing:before {
+  content: "";
+}
+.fa-glide:before {
+  content: "";
+}
+.fa-glide-g:before {
+  content: "";
+}
+.fa-sign-language:before,
+.fa-signing:before {
+  content: "";
+}
+.fa-low-vision:before {
+  content: "";
+}
+.fa-viadeo:before {
+  content: "";
+}
+.fa-viadeo-square:before {
+  content: "";
+}
+.fa-snapchat:before {
+  content: "";
+}
+.fa-snapchat-ghost:before {
+  content: "";
+}
+.fa-snapchat-square:before {
+  content: "";
+}
+.fa-pied-piper:before {
+  content: "";
+}
+.fa-first-order:before {
+  content: "";
+}
+.fa-yoast:before {
+  content: "";
+}
+.fa-themeisle:before {
+  content: "";
+}
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+  content: "";
+}
+.fa-fa:before,
+.fa-font-awesome:before {
+  content: "";
+}
+.fa-handshake-o:before {
+  content: "";
+}
+.fa-envelope-open:before {
+  content: "";
+}
+.fa-envelope-open-o:before {
+  content: "";
+}
+.fa-linode:before {
+  content: "";
+}
+.fa-address-book:before {
+  content: "";
+}
+.fa-address-book-o:before {
+  content: "";
+}
+.fa-address-card:before,
+.fa-vcard:before {
+  content: "";
+}
+.fa-address-card-o:before,
+.fa-vcard-o:before {
+  content: "";
+}
+.fa-user-circle:before {
+  content: "";
+}
+.fa-user-circle-o:before {
+  content: "";
+}
+.fa-user-o:before {
+  content: "";
+}
+.fa-id-badge:before {
+  content: "";
+}
+.fa-drivers-license:before,
+.fa-id-card:before {
+  content: "";
+}
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+  content: "";
+}
+.fa-quora:before {
+  content: "";
+}
+.fa-free-code-camp:before {
+  content: "";
+}
+.fa-telegram:before {
+  content: "";
+}
+.fa-thermometer-4:before,
+.fa-thermometer-full:before,
+.fa-thermometer:before {
+  content: "";
+}
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+  content: "";
+}
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+  content: "";
+}
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+  content: "";
+}
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+  content: "";
+}
+.fa-shower:before {
+  content: "";
+}
+.fa-bath:before,
+.fa-bathtub:before,
+.fa-s15:before {
+  content: "";
+}
+.fa-podcast:before {
+  content: "";
+}
+.fa-window-maximize:before {
+  content: "";
+}
+.fa-window-minimize:before {
+  content: "";
+}
+.fa-window-restore:before {
+  content: "";
+}
+.fa-times-rectangle:before,
+.fa-window-close:before {
+  content: "";
+}
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+  content: "";
+}
+.fa-bandcamp:before {
+  content: "";
+}
+.fa-grav:before {
+  content: "";
+}
+.fa-etsy:before {
+  content: "";
+}
+.fa-imdb:before {
+  content: "";
+}
+.fa-ravelry:before {
+  content: "";
+}
+.fa-eercast:before {
+  content: "";
+}
+.fa-microchip:before {
+  content: "";
+}
+.fa-snowflake-o:before {
+  content: "";
+}
+.fa-superpowers:before {
+  content: "";
+}
+.fa-wpexplorer:before {
+  content: "";
+}
+.fa-meetup:before {
+  content: "";
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
+.fa,
+.icon,
+.rst-content .admonition-title,
+.rst-content .code-block-caption .headerlink,
+.rst-content code.download span:first-child,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink,
+.rst-content tt.download span:first-child,
+.wy-dropdown .caret,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li span.toctree-expand {
+  font-family: inherit;
+}
+.fa:before,
+.icon:before,
+.rst-content .admonition-title:before,
+.rst-content .code-block-caption .headerlink:before,
+.rst-content code.download span:first-child:before,
+.rst-content dl dt .headerlink:before,
+.rst-content h1 .headerlink:before,
+.rst-content h2 .headerlink:before,
+.rst-content h3 .headerlink:before,
+.rst-content h4 .headerlink:before,
+.rst-content h5 .headerlink:before,
+.rst-content h6 .headerlink:before,
+.rst-content p.caption .headerlink:before,
+.rst-content table > caption .headerlink:before,
+.rst-content tt.download span:first-child:before,
+.wy-dropdown .caret:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a span.toctree-expand:before,
+.wy-menu-vertical li span.toctree-expand:before {
+  font-family: FontAwesome;
+  display: inline-block;
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1;
+  text-decoration: inherit;
+}
+.rst-content .code-block-caption a .headerlink,
+.rst-content a .admonition-title,
+.rst-content code.download a span:first-child,
+.rst-content dl dt a .headerlink,
+.rst-content h1 a .headerlink,
+.rst-content h2 a .headerlink,
+.rst-content h3 a .headerlink,
+.rst-content h4 a .headerlink,
+.rst-content h5 a .headerlink,
+.rst-content h6 a .headerlink,
+.rst-content p.caption a .headerlink,
+.rst-content table > caption a .headerlink,
+.rst-content tt.download a span:first-child,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li a span.toctree-expand,
+a .fa,
+a .icon,
+a .rst-content .admonition-title,
+a .rst-content .code-block-caption .headerlink,
+a .rst-content code.download span:first-child,
+a .rst-content dl dt .headerlink,
+a .rst-content h1 .headerlink,
+a .rst-content h2 .headerlink,
+a .rst-content h3 .headerlink,
+a .rst-content h4 .headerlink,
+a .rst-content h5 .headerlink,
+a .rst-content h6 .headerlink,
+a .rst-content p.caption .headerlink,
+a .rst-content table > caption .headerlink,
+a .rst-content tt.download span:first-child,
+a .wy-menu-vertical li span.toctree-expand {
+  display: inline-block;
+  text-decoration: inherit;
+}
+.btn .fa,
+.btn .icon,
+.btn .rst-content .admonition-title,
+.btn .rst-content .code-block-caption .headerlink,
+.btn .rst-content code.download span:first-child,
+.btn .rst-content dl dt .headerlink,
+.btn .rst-content h1 .headerlink,
+.btn .rst-content h2 .headerlink,
+.btn .rst-content h3 .headerlink,
+.btn .rst-content h4 .headerlink,
+.btn .rst-content h5 .headerlink,
+.btn .rst-content h6 .headerlink,
+.btn .rst-content p.caption .headerlink,
+.btn .rst-content table > caption .headerlink,
+.btn .rst-content tt.download span:first-child,
+.btn .wy-menu-vertical li.current > a span.toctree-expand,
+.btn .wy-menu-vertical li.on a span.toctree-expand,
+.btn .wy-menu-vertical li span.toctree-expand,
+.nav .fa,
+.nav .icon,
+.nav .rst-content .admonition-title,
+.nav .rst-content .code-block-caption .headerlink,
+.nav .rst-content code.download span:first-child,
+.nav .rst-content dl dt .headerlink,
+.nav .rst-content h1 .headerlink,
+.nav .rst-content h2 .headerlink,
+.nav .rst-content h3 .headerlink,
+.nav .rst-content h4 .headerlink,
+.nav .rst-content h5 .headerlink,
+.nav .rst-content h6 .headerlink,
+.nav .rst-content p.caption .headerlink,
+.nav .rst-content table > caption .headerlink,
+.nav .rst-content tt.download span:first-child,
+.nav .wy-menu-vertical li.current > a span.toctree-expand,
+.nav .wy-menu-vertical li.on a span.toctree-expand,
+.nav .wy-menu-vertical li span.toctree-expand,
+.rst-content .btn .admonition-title,
+.rst-content .code-block-caption .btn .headerlink,
+.rst-content .code-block-caption .nav .headerlink,
+.rst-content .nav .admonition-title,
+.rst-content code.download .btn span:first-child,
+.rst-content code.download .nav span:first-child,
+.rst-content dl dt .btn .headerlink,
+.rst-content dl dt .nav .headerlink,
+.rst-content h1 .btn .headerlink,
+.rst-content h1 .nav .headerlink,
+.rst-content h2 .btn .headerlink,
+.rst-content h2 .nav .headerlink,
+.rst-content h3 .btn .headerlink,
+.rst-content h3 .nav .headerlink,
+.rst-content h4 .btn .headerlink,
+.rst-content h4 .nav .headerlink,
+.rst-content h5 .btn .headerlink,
+.rst-content h5 .nav .headerlink,
+.rst-content h6 .btn .headerlink,
+.rst-content h6 .nav .headerlink,
+.rst-content p.caption .btn .headerlink,
+.rst-content p.caption .nav .headerlink,
+.rst-content table > caption .btn .headerlink,
+.rst-content table > caption .nav .headerlink,
+.rst-content tt.download .btn span:first-child,
+.rst-content tt.download .nav span:first-child,
+.wy-menu-vertical li .btn span.toctree-expand,
+.wy-menu-vertical li.current > a .btn span.toctree-expand,
+.wy-menu-vertical li.current > a .nav span.toctree-expand,
+.wy-menu-vertical li .nav span.toctree-expand,
+.wy-menu-vertical li.on a .btn span.toctree-expand,
+.wy-menu-vertical li.on a .nav span.toctree-expand {
+  display: inline;
+}
+.btn .fa-large.icon,
+.btn .fa.fa-large,
+.btn .rst-content .code-block-caption .fa-large.headerlink,
+.btn .rst-content .fa-large.admonition-title,
+.btn .rst-content code.download span.fa-large:first-child,
+.btn .rst-content dl dt .fa-large.headerlink,
+.btn .rst-content h1 .fa-large.headerlink,
+.btn .rst-content h2 .fa-large.headerlink,
+.btn .rst-content h3 .fa-large.headerlink,
+.btn .rst-content h4 .fa-large.headerlink,
+.btn .rst-content h5 .fa-large.headerlink,
+.btn .rst-content h6 .fa-large.headerlink,
+.btn .rst-content p.caption .fa-large.headerlink,
+.btn .rst-content table > caption .fa-large.headerlink,
+.btn .rst-content tt.download span.fa-large:first-child,
+.btn .wy-menu-vertical li span.fa-large.toctree-expand,
+.nav .fa-large.icon,
+.nav .fa.fa-large,
+.nav .rst-content .code-block-caption .fa-large.headerlink,
+.nav .rst-content .fa-large.admonition-title,
+.nav .rst-content code.download span.fa-large:first-child,
+.nav .rst-content dl dt .fa-large.headerlink,
+.nav .rst-content h1 .fa-large.headerlink,
+.nav .rst-content h2 .fa-large.headerlink,
+.nav .rst-content h3 .fa-large.headerlink,
+.nav .rst-content h4 .fa-large.headerlink,
+.nav .rst-content h5 .fa-large.headerlink,
+.nav .rst-content h6 .fa-large.headerlink,
+.nav .rst-content p.caption .fa-large.headerlink,
+.nav .rst-content table > caption .fa-large.headerlink,
+.nav .rst-content tt.download span.fa-large:first-child,
+.nav .wy-menu-vertical li span.fa-large.toctree-expand,
+.rst-content .btn .fa-large.admonition-title,
+.rst-content .code-block-caption .btn .fa-large.headerlink,
+.rst-content .code-block-caption .nav .fa-large.headerlink,
+.rst-content .nav .fa-large.admonition-title,
+.rst-content code.download .btn span.fa-large:first-child,
+.rst-content code.download .nav span.fa-large:first-child,
+.rst-content dl dt .btn .fa-large.headerlink,
+.rst-content dl dt .nav .fa-large.headerlink,
+.rst-content h1 .btn .fa-large.headerlink,
+.rst-content h1 .nav .fa-large.headerlink,
+.rst-content h2 .btn .fa-large.headerlink,
+.rst-content h2 .nav .fa-large.headerlink,
+.rst-content h3 .btn .fa-large.headerlink,
+.rst-content h3 .nav .fa-large.headerlink,
+.rst-content h4 .btn .fa-large.headerlink,
+.rst-content h4 .nav .fa-large.headerlink,
+.rst-content h5 .btn .fa-large.headerlink,
+.rst-content h5 .nav .fa-large.headerlink,
+.rst-content h6 .btn .fa-large.headerlink,
+.rst-content h6 .nav .fa-large.headerlink,
+.rst-content p.caption .btn .fa-large.headerlink,
+.rst-content p.caption .nav .fa-large.headerlink,
+.rst-content table > caption .btn .fa-large.headerlink,
+.rst-content table > caption .nav .fa-large.headerlink,
+.rst-content tt.download .btn span.fa-large:first-child,
+.rst-content tt.download .nav span.fa-large:first-child,
+.wy-menu-vertical li .btn span.fa-large.toctree-expand,
+.wy-menu-vertical li .nav span.fa-large.toctree-expand {
+  line-height: 0.9em;
+}
+.btn .fa-spin.icon,
+.btn .fa.fa-spin,
+.btn .rst-content .code-block-caption .fa-spin.headerlink,
+.btn .rst-content .fa-spin.admonition-title,
+.btn .rst-content code.download span.fa-spin:first-child,
+.btn .rst-content dl dt .fa-spin.headerlink,
+.btn .rst-content h1 .fa-spin.headerlink,
+.btn .rst-content h2 .fa-spin.headerlink,
+.btn .rst-content h3 .fa-spin.headerlink,
+.btn .rst-content h4 .fa-spin.headerlink,
+.btn .rst-content h5 .fa-spin.headerlink,
+.btn .rst-content h6 .fa-spin.headerlink,
+.btn .rst-content p.caption .fa-spin.headerlink,
+.btn .rst-content table > caption .fa-spin.headerlink,
+.btn .rst-content tt.download span.fa-spin:first-child,
+.btn .wy-menu-vertical li span.fa-spin.toctree-expand,
+.nav .fa-spin.icon,
+.nav .fa.fa-spin,
+.nav .rst-content .code-block-caption .fa-spin.headerlink,
+.nav .rst-content .fa-spin.admonition-title,
+.nav .rst-content code.download span.fa-spin:first-child,
+.nav .rst-content dl dt .fa-spin.headerlink,
+.nav .rst-content h1 .fa-spin.headerlink,
+.nav .rst-content h2 .fa-spin.headerlink,
+.nav .rst-content h3 .fa-spin.headerlink,
+.nav .rst-content h4 .fa-spin.headerlink,
+.nav .rst-content h5 .fa-spin.headerlink,
+.nav .rst-content h6 .fa-spin.headerlink,
+.nav .rst-content p.caption .fa-spin.headerlink,
+.nav .rst-content table > caption .fa-spin.headerlink,
+.nav .rst-content tt.download span.fa-spin:first-child,
+.nav .wy-menu-vertical li span.fa-spin.toctree-expand,
+.rst-content .btn .fa-spin.admonition-title,
+.rst-content .code-block-caption .btn .fa-spin.headerlink,
+.rst-content .code-block-caption .nav .fa-spin.headerlink,
+.rst-content .nav .fa-spin.admonition-title,
+.rst-content code.download .btn span.fa-spin:first-child,
+.rst-content code.download .nav span.fa-spin:first-child,
+.rst-content dl dt .btn .fa-spin.headerlink,
+.rst-content dl dt .nav .fa-spin.headerlink,
+.rst-content h1 .btn .fa-spin.headerlink,
+.rst-content h1 .nav .fa-spin.headerlink,
+.rst-content h2 .btn .fa-spin.headerlink,
+.rst-content h2 .nav .fa-spin.headerlink,
+.rst-content h3 .btn .fa-spin.headerlink,
+.rst-content h3 .nav .fa-spin.headerlink,
+.rst-content h4 .btn .fa-spin.headerlink,
+.rst-content h4 .nav .fa-spin.headerlink,
+.rst-content h5 .btn .fa-spin.headerlink,
+.rst-content h5 .nav .fa-spin.headerlink,
+.rst-content h6 .btn .fa-spin.headerlink,
+.rst-content h6 .nav .fa-spin.headerlink,
+.rst-content p.caption .btn .fa-spin.headerlink,
+.rst-content p.caption .nav .fa-spin.headerlink,
+.rst-content table > caption .btn .fa-spin.headerlink,
+.rst-content table > caption .nav .fa-spin.headerlink,
+.rst-content tt.download .btn span.fa-spin:first-child,
+.rst-content tt.download .nav span.fa-spin:first-child,
+.wy-menu-vertical li .btn span.fa-spin.toctree-expand,
+.wy-menu-vertical li .nav span.fa-spin.toctree-expand {
+  display: inline-block;
+}
+.btn.fa:before,
+.btn.icon:before,
+.rst-content .btn.admonition-title:before,
+.rst-content .code-block-caption .btn.headerlink:before,
+.rst-content code.download span.btn:first-child:before,
+.rst-content dl dt .btn.headerlink:before,
+.rst-content h1 .btn.headerlink:before,
+.rst-content h2 .btn.headerlink:before,
+.rst-content h3 .btn.headerlink:before,
+.rst-content h4 .btn.headerlink:before,
+.rst-content h5 .btn.headerlink:before,
+.rst-content h6 .btn.headerlink:before,
+.rst-content p.caption .btn.headerlink:before,
+.rst-content table > caption .btn.headerlink:before,
+.rst-content tt.download span.btn:first-child:before,
+.wy-menu-vertical li span.btn.toctree-expand:before {
+  opacity: 0.5;
+  -webkit-transition: opacity 0.05s ease-in;
+  -moz-transition: opacity 0.05s ease-in;
+  transition: opacity 0.05s ease-in;
+}
+.btn.fa:hover:before,
+.btn.icon:hover:before,
+.rst-content .btn.admonition-title:hover:before,
+.rst-content .code-block-caption .btn.headerlink:hover:before,
+.rst-content code.download span.btn:first-child:hover:before,
+.rst-content dl dt .btn.headerlink:hover:before,
+.rst-content h1 .btn.headerlink:hover:before,
+.rst-content h2 .btn.headerlink:hover:before,
+.rst-content h3 .btn.headerlink:hover:before,
+.rst-content h4 .btn.headerlink:hover:before,
+.rst-content h5 .btn.headerlink:hover:before,
+.rst-content h6 .btn.headerlink:hover:before,
+.rst-content p.caption .btn.headerlink:hover:before,
+.rst-content table > caption .btn.headerlink:hover:before,
+.rst-content tt.download span.btn:first-child:hover:before,
+.wy-menu-vertical li span.btn.toctree-expand:hover:before {
+  opacity: 1;
+}
+.btn-mini .fa:before,
+.btn-mini .icon:before,
+.btn-mini .rst-content .admonition-title:before,
+.btn-mini .rst-content .code-block-caption .headerlink:before,
+.btn-mini .rst-content code.download span:first-child:before,
+.btn-mini .rst-content dl dt .headerlink:before,
+.btn-mini .rst-content h1 .headerlink:before,
+.btn-mini .rst-content h2 .headerlink:before,
+.btn-mini .rst-content h3 .headerlink:before,
+.btn-mini .rst-content h4 .headerlink:before,
+.btn-mini .rst-content h5 .headerlink:before,
+.btn-mini .rst-content h6 .headerlink:before,
+.btn-mini .rst-content p.caption .headerlink:before,
+.btn-mini .rst-content table > caption .headerlink:before,
+.btn-mini .rst-content tt.download span:first-child:before,
+.btn-mini .wy-menu-vertical li span.toctree-expand:before,
+.rst-content .btn-mini .admonition-title:before,
+.rst-content .code-block-caption .btn-mini .headerlink:before,
+.rst-content code.download .btn-mini span:first-child:before,
+.rst-content dl dt .btn-mini .headerlink:before,
+.rst-content h1 .btn-mini .headerlink:before,
+.rst-content h2 .btn-mini .headerlink:before,
+.rst-content h3 .btn-mini .headerlink:before,
+.rst-content h4 .btn-mini .headerlink:before,
+.rst-content h5 .btn-mini .headerlink:before,
+.rst-content h6 .btn-mini .headerlink:before,
+.rst-content p.caption .btn-mini .headerlink:before,
+.rst-content table > caption .btn-mini .headerlink:before,
+.rst-content tt.download .btn-mini span:first-child:before,
+.wy-menu-vertical li .btn-mini span.toctree-expand:before {
+  font-size: 14px;
+  vertical-align: -15%;
+}
+.rst-content .admonition,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning,
+.wy-alert {
+  padding: 12px;
+  line-height: 24px;
+  margin-bottom: 24px;
+  background: #F2F2F2;
+}
+.rst-content .admonition-title,
+.wy-alert-title {
+  font-weight: 700;
+  display: block;
+  color: #fff;
+  background: #1D4F9C;
+  padding: 6px 12px;
+  margin: -12px -12px 12px;
+}
+.rst-content .danger,
+.rst-content .error,
+.rst-content .wy-alert-danger.admonition,
+.rst-content .wy-alert-danger.admonition-todo,
+.rst-content .wy-alert-danger.attention,
+.rst-content .wy-alert-danger.caution,
+.rst-content .wy-alert-danger.hint,
+.rst-content .wy-alert-danger.important,
+.rst-content .wy-alert-danger.note,
+.rst-content .wy-alert-danger.seealso,
+.rst-content .wy-alert-danger.tip,
+.rst-content .wy-alert-danger.warning,
+.wy-alert.wy-alert-danger {
+  background: #fdf3f2;
+}
+.rst-content .danger .admonition-title,
+.rst-content .danger .wy-alert-title,
+.rst-content .error .admonition-title,
+.rst-content .error .wy-alert-title,
+.rst-content .wy-alert-danger.admonition-todo .admonition-title,
+.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-danger.admonition .admonition-title,
+.rst-content .wy-alert-danger.admonition .wy-alert-title,
+.rst-content .wy-alert-danger.attention .admonition-title,
+.rst-content .wy-alert-danger.attention .wy-alert-title,
+.rst-content .wy-alert-danger.caution .admonition-title,
+.rst-content .wy-alert-danger.caution .wy-alert-title,
+.rst-content .wy-alert-danger.hint .admonition-title,
+.rst-content .wy-alert-danger.hint .wy-alert-title,
+.rst-content .wy-alert-danger.important .admonition-title,
+.rst-content .wy-alert-danger.important .wy-alert-title,
+.rst-content .wy-alert-danger.note .admonition-title,
+.rst-content .wy-alert-danger.note .wy-alert-title,
+.rst-content .wy-alert-danger.seealso .admonition-title,
+.rst-content .wy-alert-danger.seealso .wy-alert-title,
+.rst-content .wy-alert-danger.tip .admonition-title,
+.rst-content .wy-alert-danger.tip .wy-alert-title,
+.rst-content .wy-alert-danger.warning .admonition-title,
+.rst-content .wy-alert-danger.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-danger .admonition-title,
+.wy-alert.wy-alert-danger .rst-content .admonition-title,
+.wy-alert.wy-alert-danger .wy-alert-title {
+  background: #f29f97;
+}
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .warning,
+.rst-content .wy-alert-warning.admonition,
+.rst-content .wy-alert-warning.danger,
+.rst-content .wy-alert-warning.error,
+.rst-content .wy-alert-warning.hint,
+.rst-content .wy-alert-warning.important,
+.rst-content .wy-alert-warning.note,
+.rst-content .wy-alert-warning.seealso,
+.rst-content .wy-alert-warning.tip,
+.wy-alert.wy-alert-warning {
+  background: #ffedcc;
+}
+.rst-content .admonition-todo .admonition-title,
+.rst-content .admonition-todo .wy-alert-title,
+.rst-content .attention .admonition-title,
+.rst-content .attention .wy-alert-title,
+.rst-content .caution .admonition-title,
+.rst-content .caution .wy-alert-title,
+.rst-content .warning .admonition-title,
+.rst-content .warning .wy-alert-title,
+.rst-content .wy-alert-warning.admonition .admonition-title,
+.rst-content .wy-alert-warning.admonition .wy-alert-title,
+.rst-content .wy-alert-warning.danger .admonition-title,
+.rst-content .wy-alert-warning.danger .wy-alert-title,
+.rst-content .wy-alert-warning.error .admonition-title,
+.rst-content .wy-alert-warning.error .wy-alert-title,
+.rst-content .wy-alert-warning.hint .admonition-title,
+.rst-content .wy-alert-warning.hint .wy-alert-title,
+.rst-content .wy-alert-waseealsorning.important .admonition-title,
+.rst-content .wy-alert-warning.important .wy-alert-title,
+.rst-content .wy-alert-warning.note .admonition-title,
+.rst-content .wy-alert-warning.note .wy-alert-title,
+.rst-content .wy-alert-warning.seealso .admonition-title,
+.rst-content .wy-alert-warning.seealso .wy-alert-title,
+.rst-content .wy-alert-warning.tip .admonition-title,
+.rst-content .wy-alert-warning.tip .wy-alert-title,
+.rst-content .wy-alert.wy-alert-warning .admonition-title,
+.wy-alert.wy-alert-warning .rst-content .admonition-title,
+.wy-alert.wy-alert-warning .wy-alert-title {
+  background: #f0b37e;
+}
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .wy-alert-info.admonition,
+.rst-content .wy-alert-info.admonition-todo,
+.rst-content .wy-alert-info.attention,
+.rst-content .wy-alert-info.caution,
+.rst-content .wy-alert-info.danger,
+.rst-content .wy-alert-info.error,
+.rst-content .wy-alert-info.hint,
+.rst-content .wy-alert-info.important,
+.rst-content .wy-alert-info.tip,
+.rst-content .wy-alert-info.warning,
+.wy-alert.wy-alert-info {
+  background: #F2F2F2;
+}
+.rst-content .note .wy-alert-title,
+.rst-content .note .admonition-title {
+  background: #1D4F9C;
+}
+.rst-content .seealso .admonition-title,
+.rst-content .seealso .wy-alert-title,
+.rst-content .wy-alert-info.admonition-todo .admonition-title,
+.rst-content .wy-alert-info.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-info.admonition .admonition-title,
+.rst-content .wy-alert-info.admonition .wy-alert-title,
+.rst-content .wy-alert-info.attention .admonition-title,
+.rst-content .wy-alert-info.attention .wy-alert-title,
+.rst-content .wy-alert-info.caution .admonition-title,
+.rst-content .wy-alert-info.caution .wy-alert-title,
+.rst-content .wy-alert-info.danger .admonition-title,
+.rst-content .wy-alert-info.danger .wy-alert-title,
+.rst-content .wy-alert-info.error .admonition-title,
+.rst-content .wy-alert-info.error .wy-alert-title,
+.rst-content .wy-alert-info.hint .admonition-title,
+.rst-content .wy-alert-info.hint .wy-alert-title,
+.rst-content .wy-alert-info.important .admonition-title,
+.rst-content .wy-alert-info.important .wy-alert-title,
+.rst-content .wy-alert-info.tip .admonition-title,
+.rst-content .wy-alert-info.tip .wy-alert-title,
+.rst-content .wy-alert-info.warning .admonition-title,
+.rst-content .wy-alert-info.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-info .admonition-title,
+.wy-alert.wy-alert-info .rst-content .admonition-title,
+.wy-alert.wy-alert-info .wy-alert-title {
+  background: #999999;
+}
+.rst-content .hint,
+.rst-content .important,
+.rst-content .tip,
+.rst-content .wy-alert-success.admonition,
+.rst-content .wy-alert-success.admonition-todo,
+.rst-content .wy-alert-success.attention,
+.rst-content .wy-alert-success.caution,
+.rst-content .wy-alert-success.danger,
+.rst-content .wy-alert-success.error,
+.rst-content .wy-alert-success.note,
+.rst-content .wy-alert-success.seealso,
+.rst-content .wy-alert-success.warning,
+.wy-alert.wy-alert-success {
+  background: #F2F2F2;
+}
+.rst-content .hint .admonition-title,
+.rst-content .hint .wy-alert-title,
+.rst-content .important .admonition-title,
+.rst-content .important .wy-alert-title,
+.rst-content .tip .admonition-title,
+.rst-content .tip .wy-alert-title,
+.rst-content .wy-alert-success.admonition-todo .admonition-title,
+.rst-content .wy-alert-success.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-success.admonition .admonition-title,
+.rst-content .wy-alert-success.admonition .wy-alert-title,
+.rst-content .wy-alert-success.attention .admonition-title,
+.rst-content .wy-alert-success.attention .wy-alert-title,
+.rst-content .wy-alert-success.caution .admonition-title,
+.rst-content .wy-alert-success.caution .wy-alert-title,
+.rst-content .wy-alert-success.danger .admonition-title,
+.rst-content .wy-alert-success.danger .wy-alert-title,
+.rst-content .wy-alert-success.error .admonition-title,
+.rst-content .wy-alert-success.error .wy-alert-title,
+.rst-content .wy-alert-success.note .admonition-title,
+.rst-content .wy-alert-success.note .wy-alert-title,
+.rst-content .wy-alert-success.seealso .admonition-title,
+.rst-content .wy-alert-success.seealso .wy-alert-title,
+.rst-content .wy-alert-success.warning .admonition-title,
+.rst-content .wy-alert-success.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-success .admonition-title,
+.wy-alert.wy-alert-success .rst-content .admonition-title,
+.wy-alert.wy-alert-success .wy-alert-title {
+  background: #7F8DC4;
+}
+.rst-content .wy-alert-neutral.admonition,
+.rst-content .wy-alert-neutral.admonition-todo,
+.rst-content .wy-alert-neutral.attention,
+.rst-content .wy-alert-neutral.caution,
+.rst-content .wy-alert-neutral.danger,
+.rst-content .wy-alert-neutral.error,
+.rst-content .wy-alert-neutral.hint,
+.rst-content .wy-alert-neutral.important,
+.rst-content .wy-alert-neutral.note,
+.rst-content .wy-alert-neutral.seealso,
+.rst-content .wy-alert-neutral.tip,
+.rst-content .wy-alert-neutral.warning,
+.wy-alert.wy-alert-neutral {
+  background: #f3f6f6;
+}
+.rst-content .wy-alert-neutral.admonition-todo .admonition-title,
+.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-neutral.admonition .admonition-title,
+.rst-content .wy-alert-neutral.admonition .wy-alert-title,
+.rst-content .wy-alert-neutral.attention .admonition-title,
+.rst-content .wy-alert-neutral.attention .wy-alert-title,
+.rst-content .wy-alert-neutral.caution .admonition-title,
+.rst-content .wy-alert-neutral.caution .wy-alert-title,
+.rst-content .wy-alert-neutral.danger .admonition-title,
+.rst-content .wy-alert-neutral.danger .wy-alert-title,
+.rst-content .wy-alert-neutral.error .admonition-title,
+.rst-content .wy-alert-neutral.error .wy-alert-title,
+.rst-content .wy-alert-neutral.hint .admonition-title,
+.rst-content .wy-alert-neutral.hint .wy-alert-title,
+.rst-content .wy-alert-neutral.important .admonition-title,
+.rst-content .wy-alert-neutral.important .wy-alert-title,
+.rst-content .wy-alert-neutral.note .admonition-title,
+.rst-content .wy-alert-neutral.note .wy-alert-title,
+.rst-content .wy-alert-neutral.seealso .admonition-title,
+.rst-content .wy-alert-neutral.seealso .wy-alert-title,
+.rst-content .wy-alert-neutral.tip .admonition-title,
+.rst-content .wy-alert-neutral.tip .wy-alert-title,
+.rst-content .wy-alert-neutral.warning .admonition-title,
+.rst-content .wy-alert-neutral.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-neutral .admonition-title,
+.wy-alert.wy-alert-neutral .rst-content .admonition-title,
+.wy-alert.wy-alert-neutral .wy-alert-title {
+  color: #404040;
+  background: #e1e4e5;
+}
+.rst-content .wy-alert-neutral.admonition-todo a,
+.rst-content .wy-alert-neutral.admonition a,
+.rst-content .wy-alert-neutral.attention a,
+.rst-content .wy-alert-neutral.caution a,
+.rst-content .wy-alert-neutral.danger a,
+.rst-content .wy-alert-neutral.error a,
+.rst-content .wy-alert-neutral.hint a,
+.rst-content .wy-alert-neutral.important a,
+.rst-content .wy-alert-neutral.note a,
+.rst-content .wy-alert-neutral.seealso a,
+.rst-content .wy-alert-neutral.tip a,
+.rst-content .wy-alert-neutral.warning a,
+.wy-alert.wy-alert-neutral a {
+  color: #2980b9;
+}
+.rst-content .admonition-todo p:last-child,
+.rst-content .admonition p:last-child,
+.rst-content .attention p:last-child,
+.rst-content .caution p:last-child,
+.rst-content .danger p:last-child,
+.rst-content .error p:last-child,
+.rst-content .hint p:last-child,
+.rst-content .important p:last-child,
+.rst-content .note p:last-child,
+.rst-content .seealso p:last-child,
+.rst-content .tip p:last-child,
+.rst-content .warning p:last-child,
+.wy-alert p:last-child {
+  margin-bottom: 0;
+}
+.wy-tray-container {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 600;
+}
+.wy-tray-container li {
+  display: block;
+  width: 300px;
+  background: transparent;
+  color: #fff;
+  text-align: center;
+  box-shadow: 0 5px 5px 0 rgba(0, 0, 0, 0.1);
+  padding: 0 24px;
+  min-width: 20%;
+  opacity: 0;
+  height: 0;
+  line-height: 56px;
+  overflow: hidden;
+  -webkit-transition: all 0.3s ease-in;
+  -moz-transition: all 0.3s ease-in;
+  transition: all 0.3s ease-in;
+}
+.wy-tray-container li.wy-tray-item-success {
+  background: #27ae60;
+}
+.wy-tray-container li.wy-tray-item-info {
+  background: #2980b9;
+}
+.wy-tray-container li.wy-tray-item-warning {
+  background: #e67e22;
+}
+.wy-tray-container li.wy-tray-item-danger {
+  background: #e74c3c;
+}
+.wy-tray-container li.on {
+  opacity: 1;
+  height: 56px;
+}
+@media screen and (max-width: 768px) {
+  .wy-tray-container {
+    bottom: auto;
+    top: 0;
+    width: 100%;
+  }
+  .wy-tray-container li {
+    width: 100%;
+  }
+}
+button {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+  cursor: pointer;
+  line-height: normal;
+  -webkit-appearance: button;
+  *overflow: visible;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+button[disabled] {
+  cursor: default;
+}
+.btn {
+  display: inline-block;
+  border-radius: 2px;
+  line-height: normal;
+  white-space: nowrap;
+  text-align: center;
+  cursor: pointer;
+  font-size: 100%;
+  padding: 6px 12px 8px;
+  color: #fff;
+  border: 1px solid rgba(0, 0, 0, 0.1);
+  background-color: #27ae60;
+  text-decoration: none;
+  font-weight: 400;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  box-shadow: inset 0 1px 2px -1px hsla(0, 0%, 100%, 0.5),
+    inset 0 -2px 0 0 rgba(0, 0, 0, 0.1);
+  outline-none: false;
+  vertical-align: middle;
+  *display: inline;
+  zoom: 1;
+  -webkit-user-drag: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  -webkit-transition: all 0.1s linear;
+  -moz-transition: all 0.1s linear;
+  transition: all 0.1s linear;
+}
+.btn-hover {
+  background: #2e8ece;
+  color: #fff;
+}
+.btn:hover {
+  background: #2cc36b;
+  color: #fff;
+}
+.btn:focus {
+  background: #2cc36b;
+  outline: 0;
+}
+.btn:active {
+  box-shadow: inset 0 -1px 0 0 rgba(0, 0, 0, 0.05),
+    inset 0 2px 0 0 rgba(0, 0, 0, 0.1);
+  padding: 8px 12px 6px;
+}
+.btn:visited {
+  color: #fff;
+}
+.btn-disabled,
+.btn-disabled:active,
+.btn-disabled:focus,
+.btn-disabled:hover,
+.btn:disabled {
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  filter: alpha(opacity=40);
+  opacity: 0.4;
+  cursor: not-allowed;
+  box-shadow: none;
+}
+.btn::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+.btn-small {
+  font-size: 80%;
+}
+.btn-info {
+  background-color: #2980b9 !important;
+}
+.btn-info:hover {
+  background-color: #2e8ece !important;
+}
+.btn-neutral {
+  background-color: #f3f6f6 !important;
+  color: #404040 !important;
+}
+.btn-neutral:hover {
+  background-color: #e5ebeb !important;
+  color: #404040;
+}
+.btn-neutral:visited {
+  color: #404040 !important;
+}
+.btn-success {
+  background-color: #27ae60 !important;
+}
+.btn-success:hover {
+  background-color: #295 !important;
+}
+.btn-danger {
+  background-color: #e74c3c !important;
+}
+.btn-danger:hover {
+  background-color: #ea6153 !important;
+}
+.btn-warning {
+  background-color: #e67e22 !important;
+}
+.btn-warning:hover {
+  background-color: #e98b39 !important;
+}
+.btn-invert {
+  background-color: #222;
+}
+.btn-invert:hover {
+  background-color: #2f2f2f !important;
+}
+.btn-link {
+  background-color: transparent !important;
+  color: #2980b9;
+  box-shadow: none;
+  border-color: transparent !important;
+}
+.btn-link:active,
+.btn-link:hover {
+  background-color: transparent !important;
+  color: #409ad5 !important;
+  box-shadow: none;
+}
+.btn-link:visited {
+  color: #2980b9;
+}
+.wy-btn-group .btn,
+.wy-control .btn {
+  vertical-align: middle;
+}
+.wy-btn-group {
+  margin-bottom: 24px;
+  *zoom: 1;
+}
+.wy-btn-group:after,
+.wy-btn-group:before {
+  display: table;
+  content: "";
+}
+.wy-btn-group:after {
+  clear: both;
+}
+.wy-dropdown {
+  position: relative;
+  display: inline-block;
+}
+.wy-dropdown-active .wy-dropdown-menu {
+  display: block;
+}
+.wy-dropdown-menu {
+  position: absolute;
+  left: 0;
+  display: none;
+  float: left;
+  top: 100%;
+  min-width: 100%;
+  background: #fcfcfc;
+  z-index: 100;
+  border: 1px solid #cfd7dd;
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
+  padding: 12px;
+}
+.wy-dropdown-menu > dd > a {
+  display: block;
+  clear: both;
+  color: #404040;
+  white-space: nowrap;
+  font-size: 90%;
+  padding: 0 12px;
+  cursor: pointer;
+}
+.wy-dropdown-menu > dd > a:hover {
+  background: #000000;
+  color: #fff;
+}
+.wy-dropdown-menu > dd.divider {
+  border-top: 1px solid #cfd7dd;
+  margin: 6px 0;
+}
+.wy-dropdown-menu > dd.search {
+  padding-bottom: 12px;
+}
+.wy-dropdown-menu > dd.search input[type="search"] {
+  width: 100%;
+}
+.wy-dropdown-menu > dd.call-to-action {
+  background: #e3e3e3;
+  text-transform: uppercase;
+  font-weight: 500;
+  font-size: 80%;
+}
+.wy-dropdown-menu > dd.call-to-action:hover {
+  background: #e3e3e3;
+}
+.wy-dropdown-menu > dd.call-to-action .btn {
+  color: #fff;
+}
+.wy-dropdown.wy-dropdown-up .wy-dropdown-menu {
+  bottom: 100%;
+  top: auto;
+  left: auto;
+  right: 0;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu {
+  background: #fcfcfc;
+  margin-top: 2px;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a {
+  padding: 6px 12px;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover {
+  background: #000000;
+  color: #fff;
+}
+.wy-dropdown.wy-dropdown-left .wy-dropdown-menu {
+  right: 0;
+  left: auto;
+  text-align: right;
+}
+.wy-dropdown-arrow:before {
+  content: " ";
+  border-bottom: 5px solid #f5f5f5;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
+  position: absolute;
+  display: block;
+  top: -4px;
+  left: 50%;
+  margin-left: -3px;
+}
+.wy-dropdown-arrow.wy-dropdown-arrow-left:before {
+  left: 11px;
+}
+.wy-form-stacked select {
+  display: block;
+}
+.wy-form-aligned .wy-help-inline,
+.wy-form-aligned input,
+.wy-form-aligned label,
+.wy-form-aligned select,
+.wy-form-aligned textarea {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+  vertical-align: middle;
+}
+.wy-form-aligned .wy-control-group > label {
+  display: inline-block;
+  vertical-align: middle;
+  width: 10em;
+  margin: 6px 12px 0 0;
+  float: left;
+}
+.wy-form-aligned .wy-control {
+  float: left;
+}
+.wy-form-aligned .wy-control label {
+  display: block;
+}
+.wy-form-aligned .wy-control select {
+  margin-top: 6px;
+}
+fieldset {
+  margin: 0;
+}
+fieldset,
+legend {
+  border: 0;
+  padding: 0;
+}
+legend {
+  width: 100%;
+  white-space: normal;
+  margin-bottom: 24px;
+  font-size: 150%;
+  *margin-left: -7px;
+}
+label,
+legend {
+  display: block;
+}
+label {
+  margin: 0 0 0.3125em;
+  color: #333;
+  font-size: 90%;
+}
+input,
+select,
+textarea {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+}
+.wy-control-group {
+  margin-bottom: 24px;
+  max-width: 1200px;
+  margin-left: auto;
+  margin-right: auto;
+  *zoom: 1;
+}
+.wy-control-group:after,
+.wy-control-group:before {
+  display: table;
+  content: "";
+}
+.wy-control-group:after {
+  clear: both;
+}
+.wy-control-group.wy-control-group-required > label:after {
+  content: " *";
+  color: #e74c3c;
+}
+.wy-control-group .wy-form-full,
+.wy-control-group .wy-form-halves,
+.wy-control-group .wy-form-thirds {
+  padding-bottom: 12px;
+}
+.wy-control-group .wy-form-full input[type="color"],
+.wy-control-group .wy-form-full input[type="date"],
+.wy-control-group .wy-form-full input[type="datetime-local"],
+.wy-control-group .wy-form-full input[type="datetime"],
+.wy-control-group .wy-form-full input[type="email"],
+.wy-control-group .wy-form-full input[type="month"],
+.wy-control-group .wy-form-full input[type="number"],
+.wy-control-group .wy-form-full input[type="password"],
+.wy-control-group .wy-form-full input[type="search"],
+.wy-control-group .wy-form-full input[type="tel"],
+.wy-control-group .wy-form-full input[type="text"],
+.wy-control-group .wy-form-full input[type="time"],
+.wy-control-group .wy-form-full input[type="url"],
+.wy-control-group .wy-form-full input[type="week"],
+.wy-control-group .wy-form-full select,
+.wy-control-group .wy-form-halves input[type="color"],
+.wy-control-group .wy-form-halves input[type="date"],
+.wy-control-group .wy-form-halves input[type="datetime-local"],
+.wy-control-group .wy-form-halves input[type="datetime"],
+.wy-control-group .wy-form-halves input[type="email"],
+.wy-control-group .wy-form-halves input[type="month"],
+.wy-control-group .wy-form-halves input[type="number"],
+.wy-control-group .wy-form-halves input[type="password"],
+.wy-control-group .wy-form-halves input[type="search"],
+.wy-control-group .wy-form-halves input[type="tel"],
+.wy-control-group .wy-form-halves input[type="text"],
+.wy-control-group .wy-form-halves input[type="time"],
+.wy-control-group .wy-form-halves input[type="url"],
+.wy-control-group .wy-form-halves input[type="week"],
+.wy-control-group .wy-form-halves select,
+.wy-control-group .wy-form-thirds input[type="color"],
+.wy-control-group .wy-form-thirds input[type="date"],
+.wy-control-group .wy-form-thirds input[type="datetime-local"],
+.wy-control-group .wy-form-thirds input[type="datetime"],
+.wy-control-group .wy-form-thirds input[type="email"],
+.wy-control-group .wy-form-thirds input[type="month"],
+.wy-control-group .wy-form-thirds input[type="number"],
+.wy-control-group .wy-form-thirds input[type="password"],
+.wy-control-group .wy-form-thirds input[type="search"],
+.wy-control-group .wy-form-thirds input[type="tel"],
+.wy-control-group .wy-form-thirds input[type="text"],
+.wy-control-group .wy-form-thirds input[type="time"],
+.wy-control-group .wy-form-thirds input[type="url"],
+.wy-control-group .wy-form-thirds input[type="week"],
+.wy-control-group .wy-form-thirds select {
+  width: 100%;
+}
+.wy-control-group .wy-form-full {
+  float: left;
+  display: block;
+  width: 100%;
+  margin-right: 0;
+}
+.wy-control-group .wy-form-full:last-child {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-halves {
+  float: left;
+  display: block;
+  margin-right: 2.35765%;
+  width: 48.82117%;
+}
+.wy-control-group .wy-form-halves:last-child,
+.wy-control-group .wy-form-halves:nth-of-type(2n) {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-halves:nth-of-type(odd) {
+  clear: left;
+}
+.wy-control-group .wy-form-thirds {
+  float: left;
+  display: block;
+  margin-right: 2.35765%;
+  width: 31.76157%;
+}
+.wy-control-group .wy-form-thirds:last-child,
+.wy-control-group .wy-form-thirds:nth-of-type(3n) {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-thirds:nth-of-type(3n + 1) {
+  clear: left;
+}
+.wy-control-group.wy-control-group-no-input .wy-control,
+.wy-control-no-input {
+  margin: 6px 0 0;
+  font-size: 90%;
+}
+.wy-control-no-input {
+  display: inline-block;
+}
+.wy-control-group.fluid-input input[type="color"],
+.wy-control-group.fluid-input input[type="date"],
+.wy-control-group.fluid-input input[type="datetime-local"],
+.wy-control-group.fluid-input input[type="datetime"],
+.wy-control-group.fluid-input input[type="email"],
+.wy-control-group.fluid-input input[type="month"],
+.wy-control-group.fluid-input input[type="number"],
+.wy-control-group.fluid-input input[type="password"],
+.wy-control-group.fluid-input input[type="search"],
+.wy-control-group.fluid-input input[type="tel"],
+.wy-control-group.fluid-input input[type="text"],
+.wy-control-group.fluid-input input[type="time"],
+.wy-control-group.fluid-input input[type="url"],
+.wy-control-group.fluid-input input[type="week"] {
+  width: 100%;
+}
+.wy-form-message-inline {
+  padding-left: 0.3em;
+  color: #666;
+  font-size: 90%;
+}
+.wy-form-message {
+  display: block;
+  color: #999;
+  font-size: 70%;
+  margin-top: 0.3125em;
+  font-style: italic;
+}
+.wy-form-message p {
+  font-size: inherit;
+  font-style: italic;
+  margin-bottom: 6px;
+}
+.wy-form-message p:last-child {
+  margin-bottom: 0;
+}
+input {
+  line-height: normal;
+}
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button;
+  cursor: pointer;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  *overflow: visible;
+}
+input[type="color"],
+input[type="date"],
+input[type="datetime-local"],
+input[type="datetime"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"] {
+  -webkit-appearance: none;
+  padding: 6px;
+  display: inline-block;
+  border: 1px solid #ccc;
+  font-size: 80%;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  box-shadow: inset 0 1px 3px #ddd;
+  border-radius: 0;
+  -webkit-transition: border 0.3s linear;
+  -moz-transition: border 0.3s linear;
+  transition: border 0.3s linear;
+}
+input[type="datetime-local"] {
+  padding: 0.34375em 0.625em;
+}
+input[disabled] {
+  cursor: default;
+}
+input[type="checkbox"],
+input[type="radio"] {
+  padding: 0;
+  margin-right: 0.3125em;
+  *height: 13px;
+  *width: 13px;
+}
+input[type="checkbox"],
+input[type="radio"],
+input[type="search"] {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+input[type="color"]:focus,
+input[type="date"]:focus,
+input[type="datetime-local"]:focus,
+input[type="datetime"]:focus,
+input[type="email"]:focus,
+input[type="month"]:focus,
+input[type="number"]:focus,
+input[type="password"]:focus,
+input[type="search"]:focus,
+input[type="tel"]:focus,
+input[type="text"]:focus,
+input[type="time"]:focus,
+input[type="url"]:focus,
+input[type="week"]:focus {
+  outline: 0;
+  outline: thin dotted\9;
+  border-color: #333;
+}
+input.no-focus:focus {
+  border-color: #ccc !important;
+}
+input[type="checkbox"]:focus,
+input[type="file"]:focus,
+input[type="radio"]:focus {
+  outline: thin dotted #333;
+  outline: 1px auto #129fea;
+}
+input[type="color"][disabled],
+input[type="date"][disabled],
+input[type="datetime-local"][disabled],
+input[type="datetime"][disabled],
+input[type="email"][disabled],
+input[type="month"][disabled],
+input[type="number"][disabled],
+input[type="password"][disabled],
+input[type="search"][disabled],
+input[type="tel"][disabled],
+input[type="text"][disabled],
+input[type="time"][disabled],
+input[type="url"][disabled],
+input[type="week"][disabled] {
+  cursor: not-allowed;
+  background-color: #fafafa;
+}
+input:focus:invalid,
+select:focus:invalid,
+textarea:focus:invalid {
+  color: #e74c3c;
+  border: 1px solid #e74c3c;
+}
+input:focus:invalid:focus,
+select:focus:invalid:focus,
+textarea:focus:invalid:focus {
+  border-color: #e74c3c;
+}
+input[type="checkbox"]:focus:invalid:focus,
+input[type="file"]:focus:invalid:focus,
+input[type="radio"]:focus:invalid:focus {
+  outline-color: #e74c3c;
+}
+input.wy-input-large {
+  padding: 12px;
+  font-size: 100%;
+}
+textarea {
+  overflow: auto;
+  vertical-align: top;
+  width: 100%;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+}
+select,
+textarea {
+  padding: 0.5em 0.625em;
+  display: inline-block;
+  border: 1px solid #ccc;
+  font-size: 80%;
+  box-shadow: inset 0 1px 3px #ddd;
+  -webkit-transition: border 0.3s linear;
+  -moz-transition: border 0.3s linear;
+  transition: border 0.3s linear;
+}
+select {
+  border: 1px solid #ccc;
+  background-color: #fff;
+}
+select[multiple] {
+  height: auto;
+}
+select:focus,
+textarea:focus {
+  outline: 0;
+}
+input[readonly],
+select[disabled],
+select[readonly],
+textarea[disabled],
+textarea[readonly] {
+  cursor: not-allowed;
+  background-color: #fafafa;
+}
+input[type="checkbox"][disabled],
+input[type="radio"][disabled] {
+  cursor: not-allowed;
+}
+.wy-checkbox,
+.wy-radio {
+  margin: 6px 0;
+  color: #404040;
+  display: block;
+}
+.wy-checkbox input,
+.wy-radio input {
+  vertical-align: baseline;
+}
+.wy-form-message-inline {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+  vertical-align: middle;
+}
+.wy-input-prefix,
+.wy-input-suffix {
+  white-space: nowrap;
+  padding: 6px;
+}
+.wy-input-prefix .wy-input-context,
+.wy-input-suffix .wy-input-context {
+  line-height: 27px;
+  padding: 0 8px;
+  display: inline-block;
+  font-size: 80%;
+  background-color: #f3f6f6;
+  border: 1px solid #ccc;
+  color: #999;
+}
+.wy-input-suffix .wy-input-context {
+  border-left: 0;
+}
+.wy-input-prefix .wy-input-context {
+  border-right: 0;
+}
+.wy-switch {
+  position: relative;
+  display: block;
+  height: 24px;
+  margin-top: 12px;
+  cursor: pointer;
+}
+.wy-switch:before {
+  left: 0;
+  top: 0;
+  width: 36px;
+  height: 12px;
+  background: #ccc;
+}
+.wy-switch:after,
+.wy-switch:before {
+  position: absolute;
+  content: "";
+  display: block;
+  border-radius: 4px;
+  -webkit-transition: all 0.2s ease-in-out;
+  -moz-transition: all 0.2s ease-in-out;
+  transition: all 0.2s ease-in-out;
+}
+.wy-switch:after {
+  width: 18px;
+  height: 18px;
+  background: #999;
+  left: -3px;
+  top: -3px;
+}
+.wy-switch span {
+  position: absolute;
+  left: 48px;
+  display: block;
+  font-size: 12px;
+  color: #ccc;
+  line-height: 1;
+}
+.wy-switch.active:before {
+  background: #1e8449;
+}
+.wy-switch.active:after {
+  left: 24px;
+  background: #27ae60;
+}
+.wy-switch.disabled {
+  cursor: not-allowed;
+  opacity: 0.8;
+}
+.wy-control-group.wy-control-group-error .wy-form-message,
+.wy-control-group.wy-control-group-error > label {
+  color: #e74c3c;
+}
+.wy-control-group.wy-control-group-error input[type="color"],
+.wy-control-group.wy-control-group-error input[type="date"],
+.wy-control-group.wy-control-group-error input[type="datetime-local"],
+.wy-control-group.wy-control-group-error input[type="datetime"],
+.wy-control-group.wy-control-group-error input[type="email"],
+.wy-control-group.wy-control-group-error input[type="month"],
+.wy-control-group.wy-control-group-error input[type="number"],
+.wy-control-group.wy-control-group-error input[type="password"],
+.wy-control-group.wy-control-group-error input[type="search"],
+.wy-control-group.wy-control-group-error input[type="tel"],
+.wy-control-group.wy-control-group-error input[type="text"],
+.wy-control-group.wy-control-group-error input[type="time"],
+.wy-control-group.wy-control-group-error input[type="url"],
+.wy-control-group.wy-control-group-error input[type="week"],
+.wy-control-group.wy-control-group-error textarea {
+  border: 1px solid #e74c3c;
+}
+.wy-inline-validate {
+  white-space: nowrap;
+}
+.wy-inline-validate .wy-input-context {
+  padding: 0.5em 0.625em;
+  display: inline-block;
+  font-size: 80%;
+}
+.wy-inline-validate.wy-inline-validate-success .wy-input-context {
+  color: #27ae60;
+}
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context {
+  color: #e74c3c;
+}
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context {
+  color: #e67e22;
+}
+.wy-inline-validate.wy-inline-validate-info .wy-input-context {
+  color: #2980b9;
+}
+.rotate-90 {
+  -webkit-transform: rotate(90deg);
+  -moz-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  -o-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.rotate-180 {
+  -webkit-transform: rotate(180deg);
+  -moz-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  -o-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.rotate-270 {
+  -webkit-transform: rotate(270deg);
+  -moz-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  -o-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.mirror {
+  -webkit-transform: scaleX(-1);
+  -moz-transform: scaleX(-1);
+  -ms-transform: scaleX(-1);
+  -o-transform: scaleX(-1);
+  transform: scaleX(-1);
+}
+.mirror.rotate-90 {
+  -webkit-transform: scaleX(-1) rotate(90deg);
+  -moz-transform: scaleX(-1) rotate(90deg);
+  -ms-transform: scaleX(-1) rotate(90deg);
+  -o-transform: scaleX(-1) rotate(90deg);
+  transform: scaleX(-1) rotate(90deg);
+}
+.mirror.rotate-180 {
+  -webkit-transform: scaleX(-1) rotate(180deg);
+  -moz-transform: scaleX(-1) rotate(180deg);
+  -ms-transform: scaleX(-1) rotate(180deg);
+  -o-transform: scaleX(-1) rotate(180deg);
+  transform: scaleX(-1) rotate(180deg);
+}
+.mirror.rotate-270 {
+  -webkit-transform: scaleX(-1) rotate(270deg);
+  -moz-transform: scaleX(-1) rotate(270deg);
+  -ms-transform: scaleX(-1) rotate(270deg);
+  -o-transform: scaleX(-1) rotate(270deg);
+  transform: scaleX(-1) rotate(270deg);
+}
+@media only screen and (max-width: 480px) {
+  .wy-form button[type="submit"] {
+    margin: 0.7em 0 0;
+  }
+  .wy-form input[type="color"],
+  .wy-form input[type="date"],
+  .wy-form input[type="datetime-local"],
+  .wy-form input[type="datetime"],
+  .wy-form input[type="email"],
+  .wy-form input[type="month"],
+  .wy-form input[type="number"],
+  .wy-form input[type="password"],
+  .wy-form input[type="search"],
+  .wy-form input[type="tel"],
+  .wy-form input[type="text"],
+  .wy-form input[type="time"],
+  .wy-form input[type="url"],
+  .wy-form input[type="week"],
+  .wy-form label {
+    margin-bottom: 0.3em;
+    display: block;
+  }
+  .wy-form input[type="color"],
+  .wy-form input[type="date"],
+  .wy-form input[type="datetime-local"],
+  .wy-form input[type="datetime"],
+  .wy-form input[type="email"],
+  .wy-form input[type="month"],
+  .wy-form input[type="number"],
+  .wy-form input[type="password"],
+  .wy-form input[type="search"],
+  .wy-form input[type="tel"],
+  .wy-form input[type="time"],
+  .wy-form input[type="url"],
+  .wy-form input[type="week"] {
+    margin-bottom: 0;
+  }
+  .wy-form-aligned .wy-control-group label {
+    margin-bottom: 0.3em;
+    text-align: left;
+    display: block;
+    width: 100%;
+  }
+  .wy-form-aligned .wy-control {
+    margin: 1.5em 0 0;
+  }
+  .wy-form-message,
+  .wy-form-message-inline,
+  .wy-form .wy-help-inline {
+    display: block;
+    font-size: 80%;
+    padding: 6px 0;
+  }
+}
+@media screen and (max-width: 768px) {
+  .tablet-hide {
+    display: none;
+  }
+}
+@media screen and (max-width: 480px) {
+  .mobile-hide {
+    display: none;
+  }
+}
+.float-left {
+  float: left;
+}
+.float-right {
+  float: right;
+}
+.full-width {
+  width: 100%;
+}
+.rst-content table.docutils,
+.rst-content table.field-list,
+.wy-table {
+  border-collapse: collapse;
+  border-spacing: 0;
+  empty-cells: show;
+  margin-bottom: 24px;
+}
+.rst-content table.docutils caption,
+.rst-content table.field-list caption,
+.wy-table caption {
+  color: #000;
+  font-style: italic;
+  font-size: 85%;
+  padding: 1em 0;
+  text-align: center;
+}
+.rst-content table.docutils td,
+.rst-content table.docutils th,
+.rst-content table.field-list td,
+.rst-content table.field-list th,
+.wy-table td,
+.wy-table th {
+  font-size: 90%;
+  margin: 0;
+  overflow: visible;
+  padding: 8px 16px;
+}
+.rst-content table.docutils td:first-child,
+.rst-content table.docutils th:first-child,
+.rst-content table.field-list td:first-child,
+.rst-content table.field-list th:first-child,
+.wy-table td:first-child,
+.wy-table th:first-child {
+  border-left-width: 0;
+}
+.rst-content table.docutils thead,
+.rst-content table.field-list thead,
+.wy-table thead {
+  color: #000;
+  text-align: left;
+  vertical-align: bottom;
+  white-space: nowrap;
+}
+.rst-content table.docutils thead th,
+.rst-content table.field-list thead th,
+.wy-table thead th {
+  font-weight: 700;
+  border-bottom: 2px solid #e1e4e5;
+}
+.rst-content table.docutils td,
+.rst-content table.field-list td,
+.wy-table td {
+  background-color: transparent;
+  vertical-align: middle;
+}
+.rst-content table.docutils td p,
+.rst-content table.field-list td p,
+.wy-table td p {
+  line-height: 18px;
+}
+.rst-content table.docutils td p:last-child,
+.rst-content table.field-list td p:last-child,
+.wy-table td p:last-child {
+  margin-bottom: 0;
+}
+.rst-content table.docutils .wy-table-cell-min,
+.rst-content table.field-list .wy-table-cell-min,
+.wy-table .wy-table-cell-min {
+  width: 1%;
+  padding-right: 0;
+}
+.rst-content table.docutils .wy-table-cell-min input[type="checkbox"],
+.rst-content table.field-list .wy-table-cell-min input[type="checkbox"],
+.wy-table .wy-table-cell-min input[type="checkbox"] {
+  margin: 0;
+}
+.wy-table-secondary {
+  color: grey;
+  font-size: 90%;
+}
+.wy-table-tertiary {
+  color: grey;
+  font-size: 80%;
+}
+.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,
+.wy-table-backed,
+.wy-table-odd td,
+.wy-table-striped tr:nth-child(2n-1) td {
+  background-color: #f3f6f6;
+}
+.rst-content table.docutils,
+.wy-table-bordered-all {
+  border: 1px solid #e1e4e5;
+}
+.rst-content table.docutils td,
+.wy-table-bordered-all td {
+  border-bottom: 1px solid #e1e4e5;
+  border-left: 1px solid #e1e4e5;
+}
+.rst-content table.docutils tbody > tr:last-child td,
+.wy-table-bordered-all tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-bordered {
+  border: 1px solid #e1e4e5;
+}
+.wy-table-bordered-rows td {
+  border-bottom: 1px solid #e1e4e5;
+}
+.wy-table-bordered-rows tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-horizontal td,
+.wy-table-horizontal th {
+  border-width: 0 0 1px;
+  border-bottom: 1px solid #e1e4e5;
+}
+.wy-table-horizontal tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-responsive {
+  margin-bottom: 24px;
+  max-width: 100%;
+  overflow: auto;
+}
+.wy-table-responsive table {
+  margin-bottom: 0 !important;
+}
+.wy-table-responsive table td,
+.wy-table-responsive table th {
+  white-space: nowrap;
+}
+a {
+  color: #2980b9;
+  text-decoration: none;
+  cursor: pointer;
+}
+a:hover {
+  color: #3091d1;
+}
+a:visited {
+  color: #2980b9;
+}
+html {
+  height: 100%;
+}
+body,
+html {
+  overflow-x: hidden;
+}
+body {
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  font-weight: 400;
+  color: #404040;
+  min-height: 100%;
+  background: #edf0f2;
+}
+.wy-text-left {
+  text-align: left;
+}
+.wy-text-center {
+  text-align: center;
+}
+.wy-text-right {
+  text-align: right;
+}
+.wy-text-large {
+  font-size: 120%;
+}
+.wy-text-normal {
+  font-size: 100%;
+}
+.wy-text-small,
+small {
+  font-size: 80%;
+}
+.wy-text-strike {
+  text-decoration: line-through;
+}
+.wy-text-warning {
+  color: #e67e22 !important;
+}
+a.wy-text-warning:hover {
+  color: #eb9950 !important;
+}
+.wy-text-info {
+  color: #2980b9 !important;
+}
+a.wy-text-info:hover {
+  color: #409ad5 !important;
+}
+.wy-text-success {
+  color: #27ae60 !important;
+}
+a.wy-text-success:hover {
+  color: #36d278 !important;
+}
+.wy-text-danger {
+  color: #e74c3c !important;
+}
+a.wy-text-danger:hover {
+  color: #ed7669 !important;
+}
+.wy-text-neutral {
+  color: #404040 !important;
+}
+a.wy-text-neutral:hover {
+  color: #595959 !important;
+}
+.rst-content .toctree-wrapper > p.caption,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+legend {
+  margin-top: 0;
+  font-weight: 700;
+  font-family: Helvetica, Arial, sans-serif, ff-tisa-web-pro, Georgia;
+}
+p {
+  line-height: 24px;
+  font-size: 16px;
+  margin: 0 0 24px;
+}
+h1 {
+  font-size: 175%;
+}
+.rst-content .toctree-wrapper > p.caption,
+h2 {
+  font-size: 150%;
+}
+h3 {
+  font-size: 125%;
+}
+h4 {
+  font-size: 115%;
+}
+h5 {
+  font-size: 110%;
+}
+h6 {
+  font-size: 100%;
+}
+hr {
+  display: block;
+  height: 1px;
+  border: 0;
+  border-top: 1px solid #e1e4e5;
+  margin: 24px 0;
+  padding: 0;
+}
+.rst-content code,
+.rst-content tt,
+code {
+  white-space: nowrap;
+  max-width: 100%;
+  background: #fff;
+  border: 1px solid #e1e4e5;
+  font-size: 75%;
+  padding: 0 5px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  color: #E60000;
+  overflow-x: auto;
+}
+.rst-content tt.code-large,
+code.code-large {
+  font-size: 90%;
+}
+.rst-content .section ul,
+.rst-content .toctree-wrapper ul,
+.wy-plain-list-disc,
+article ul {
+  list-style: disc;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content .section ul li,
+.rst-content .toctree-wrapper ul li,
+.wy-plain-list-disc li,
+article ul li {
+  list-style: disc;
+  margin-left: 24px;
+}
+.rst-content .section ul li p:last-child,
+.rst-content .section ul li ul,
+.rst-content .toctree-wrapper ul li p:last-child,
+.rst-content .toctree-wrapper ul li ul,
+.wy-plain-list-disc li p:last-child,
+.wy-plain-list-disc li ul,
+article ul li p:last-child,
+article ul li ul {
+  margin-bottom: 0;
+}
+.rst-content .section ul li li,
+.rst-content .toctree-wrapper ul li li,
+.wy-plain-list-disc li li,
+article ul li li {
+  list-style: circle;
+}
+.rst-content .section ul li li li,
+.rst-content .toctree-wrapper ul li li li,
+.wy-plain-list-disc li li li,
+article ul li li li {
+  list-style: square;
+}
+.rst-content .section ul li ol li,
+.rst-content .toctree-wrapper ul li ol li,
+.wy-plain-list-disc li ol li,
+article ul li ol li {
+  list-style: decimal;
+}
+.rst-content .section ol,
+.rst-content ol.arabic,
+.wy-plain-list-decimal,
+article ol {
+  list-style: decimal;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content .section ol li,
+.rst-content ol.arabic li,
+.wy-plain-list-decimal li,
+article ol li {
+  list-style: decimal;
+  margin-left: 24px;
+}
+.rst-content .section ol li p:last-child,
+.rst-content .section ol li ul,
+.rst-content ol.arabic li p:last-child,
+.rst-content ol.arabic li ul,
+.wy-plain-list-decimal li p:last-child,
+.wy-plain-list-decimal li ul,
+article ol li p:last-child,
+article ol li ul {
+  margin-bottom: 0;
+}
+.rst-content .section ol li ul li,
+.rst-content ol.arabic li ul li,
+.wy-plain-list-decimal li ul li,
+article ol li ul li {
+  list-style: disc;
+}
+.wy-breadcrumbs {
+  *zoom: 1;
+}
+.wy-breadcrumbs:after,
+.wy-breadcrumbs:before {
+  display: table;
+  content: "";
+}
+.wy-breadcrumbs:after {
+  clear: both;
+}
+.wy-breadcrumbs li {
+  display: inline-block;
+}
+.wy-breadcrumbs li.wy-breadcrumbs-aside {
+  float: right;
+}
+.wy-breadcrumbs li a {
+  display: inline-block;
+  padding: 5px;
+}
+
+.wy-breadcrumbs li a:before {
+  font-weight: bold;
+  color: #000000;
+  content: "//";
+}
+.wy-breadcrumbs li a:first-child {
+  padding-left: 0;
+}
+
+.rst-content .wy-breadcrumbs li tt,
+.wy-breadcrumbs li .rst-content tt,
+.wy-breadcrumbs li code {
+  padding: 5px;
+  border: none;
+  background: none;
+}
+.rst-content .wy-breadcrumbs li tt.literal,
+.wy-breadcrumbs li .rst-content tt.literal,
+.wy-breadcrumbs li code.literal {
+  color: #E60000;
+}
+.wy-breadcrumbs-extra {
+  margin-bottom: 0;
+  color: #b3b3b3;
+  font-size: 80%;
+  display: inline-block;
+}
+@media screen and (max-width: 480px) {
+  .wy-breadcrumbs-extra,
+  .wy-breadcrumbs li.wy-breadcrumbs-aside {
+    display: none;
+  }
+}
+@media print {
+  .wy-breadcrumbs li.wy-breadcrumbs-aside {
+    display: none;
+  }
+}
+html {
+  font-size: 16px;
+}
+.wy-affix {
+  position: fixed;
+  top: 1.618em;
+}
+.wy-menu a:hover {
+  text-decoration: none;
+}
+.wy-menu-horiz {
+  *zoom: 1;
+}
+.wy-menu-horiz:after,
+.wy-menu-horiz:before {
+  display: table;
+  content: "";
+}
+.wy-menu-horiz:after {
+  clear: both;
+}
+.wy-menu-horiz li,
+.wy-menu-horiz ul {
+  display: inline-block;
+}
+.wy-menu-horiz li:hover {
+  background: hsla(0, 0%, 100%, 0.1);
+}
+.wy-menu-horiz li.divide-left {
+  border-left: 1px solid #404040;
+}
+.wy-menu-horiz li.divide-right {
+  border-right: 1px solid #404040;
+}
+.wy-menu-horiz a {
+  height: 32px;
+  display: inline-block;
+  line-height: 32px;
+  padding: 0 16px;
+}
+.wy-menu-vertical {
+  width: 300px;
+}
+.wy-menu-vertical header,
+.wy-menu-vertical p.caption::before {
+    font-weight: normal;
+    letter-spacing: .1rem;
+    color: #E60000;
+    font-size: 120%;
+    content: "// ";
+  }
+.wy-menu-vertical p.caption {
+  color: #ffffff;
+  height: 32px;
+  line-height: 32px;
+  padding: 0 1.618em;
+  margin: 12px 0 0;
+  display: block;
+  font-weight: 400;
+  text-transform: uppercase;
+  font-size: 85%;
+  white-space: nowrap;
+}
+.wy-menu-vertical ul {
+  margin-bottom: 0;
+}
+.wy-menu-vertical li.divide-top {
+  border-top: 1px solid #404040;
+}
+.wy-menu-vertical li.divide-bottom {
+  border-bottom: 1px solid #404040;
+}
+.wy-menu-vertical li.current {
+  background: #e3e3e3;
+}
+.wy-menu-vertical li.current a {
+  color: grey;
+  border-right: 1px solid #c9c9c9;
+  padding: 0.4045em 2.427em;
+}
+.wy-menu-vertical li.current a:hover {
+  background: #d6d6d6;
+}
+.rst-content .wy-menu-vertical li tt,
+.wy-menu-vertical li .rst-content tt,
+.wy-menu-vertical li code {
+  border: none;
+  background: inherit;
+  color: inherit;
+  padding-left: 0;
+  padding-right: 0;
+}
+.wy-menu-vertical li span.toctree-expand {
+  display: block;
+  float: left;
+  margin-left: -1.2em;
+  font-size: 0.8em;
+  line-height: 1.6em;
+  color: #4d4d4d;
+}
+.wy-menu-vertical li.current > a,
+.wy-menu-vertical li.on a {
+  color: #404040;
+  font-weight: 700;
+  position: relative;
+  background: #fcfcfc;
+  border: none;
+  padding: 0.4045em 1.618em;
+}
+.wy-menu-vertical li.current > a:hover,
+.wy-menu-vertical li.on a:hover {
+  background: #fcfcfc;
+}
+.wy-menu-vertical li.current > a:hover span.toctree-expand,
+.wy-menu-vertical li.on a:hover span.toctree-expand {
+  color: grey;
+}
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand {
+  display: block;
+  font-size: 0.8em;
+  line-height: 1.6em;
+  color: #333;
+}
+.wy-menu-vertical li.toctree-l1.current > a {
+  border-bottom: 1px solid #c9c9c9;
+  border-top: 1px solid #c9c9c9;
+}
+.wy-menu-vertical .toctree-l1.current .toctree-l2 > ul,
+.wy-menu-vertical .toctree-l2.current .toctree-l3 > ul,
+.wy-menu-vertical .toctree-l3.current .toctree-l4 > ul,
+.wy-menu-vertical .toctree-l4.current .toctree-l5 > ul,
+.wy-menu-vertical .toctree-l5.current .toctree-l6 > ul,
+.wy-menu-vertical .toctree-l6.current .toctree-l7 > ul,
+.wy-menu-vertical .toctree-l7.current .toctree-l8 > ul,
+.wy-menu-vertical .toctree-l8.current .toctree-l9 > ul,
+.wy-menu-vertical .toctree-l9.current .toctree-l10 > ul,
+.wy-menu-vertical .toctree-l10.current .toctree-l11 > ul {
+  display: none;
+}
+.wy-menu-vertical .toctree-l1.current .current.toctree-l2 > ul,
+.wy-menu-vertical .toctree-l2.current .current.toctree-l3 > ul,
+.wy-menu-vertical .toctree-l3.current .current.toctree-l4 > ul,
+.wy-menu-vertical .toctree-l4.current .current.toctree-l5 > ul,
+.wy-menu-vertical .toctree-l5.current .current.toctree-l6 > ul,
+.wy-menu-vertical .toctree-l6.current .current.toctree-l7 > ul,
+.wy-menu-vertical .toctree-l7.current .current.toctree-l8 > ul,
+.wy-menu-vertical .toctree-l8.current .current.toctree-l9 > ul,
+.wy-menu-vertical .toctree-l9.current .current.toctree-l10 > ul,
+.wy-menu-vertical .toctree-l10.current .current.toctree-l11 > ul {
+  display: block;
+}
+.wy-menu-vertical li.toctree-l3,
+.wy-menu-vertical li.toctree-l4 {
+  font-size: 0.9em;
+}
+.wy-menu-vertical li.toctree-l2 a,
+.wy-menu-vertical li.toctree-l3 a,
+.wy-menu-vertical li.toctree-l4 a,
+.wy-menu-vertical li.toctree-l5 a,
+.wy-menu-vertical li.toctree-l6 a,
+.wy-menu-vertical li.toctree-l7 a,
+.wy-menu-vertical li.toctree-l8 a,
+.wy-menu-vertical li.toctree-l9 a,
+.wy-menu-vertical li.toctree-l10 a {
+  color: #404040;
+}
+.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand {
+  color: grey;
+}
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a,
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a,
+.wy-menu-vertical li.toctree-l4.current li.toctree-l5 > a,
+.wy-menu-vertical li.toctree-l5.current li.toctree-l6 > a,
+.wy-menu-vertical li.toctree-l6.current li.toctree-l7 > a,
+.wy-menu-vertical li.toctree-l7.current li.toctree-l8 > a,
+.wy-menu-vertical li.toctree-l8.current li.toctree-l9 > a,
+.wy-menu-vertical li.toctree-l9.current li.toctree-l10 > a,
+.wy-menu-vertical li.toctree-l10.current li.toctree-l11 > a {
+  display: block;
+}
+.wy-menu-vertical li.toctree-l2.current > a {
+  padding: 0.4045em 2.427em;
+}
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a,
+.wy-menu-vertical li.toctree-l3.current > a {
+  padding: 0.4045em 4.045em;
+}
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a,
+.wy-menu-vertical li.toctree-l4.current > a {
+  padding: 0.4045em 5.663em;
+}
+.wy-menu-vertical li.toctree-l4.current li.toctree-l5 > a,
+.wy-menu-vertical li.toctree-l5.current > a {
+  padding: 0.4045em 7.281em;
+}
+.wy-menu-vertical li.toctree-l5.current li.toctree-l6 > a,
+.wy-menu-vertical li.toctree-l6.current > a {
+  padding: 0.4045em 8.899em;
+}
+.wy-menu-vertical li.toctree-l6.current li.toctree-l7 > a,
+.wy-menu-vertical li.toctree-l7.current > a {
+  padding: 0.4045em 10.517em;
+}
+.wy-menu-vertical li.toctree-l7.current li.toctree-l8 > a,
+.wy-menu-vertical li.toctree-l8.current > a {
+  padding: 0.4045em 12.135em;
+}
+.wy-menu-vertical li.toctree-l8.current li.toctree-l9 > a,
+.wy-menu-vertical li.toctree-l9.current > a {
+  padding: 0.4045em 13.753em;
+}
+.wy-menu-vertical li.toctree-l9.current li.toctree-l10 > a,
+.wy-menu-vertical li.toctree-l10.current > a {
+  padding: 0.4045em 15.371em;
+}
+.wy-menu-vertical li.toctree-l10.current li.toctree-l11 > a {
+  padding: 0.4045em 16.989em;
+}
+.wy-menu-vertical li.toctree-l2.current > a,
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a {
+  background: #c9c9c9;
+}
+.wy-menu-vertical li.toctree-l2 span.toctree-expand {
+  color: #a3a3a3;
+}
+.wy-menu-vertical li.toctree-l3.current > a,
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a {
+  background: #bdbdbd;
+}
+.wy-menu-vertical li.toctree-l3 span.toctree-expand {
+  color: #969696;
+}
+.wy-menu-vertical li.current ul {
+  display: block;
+}
+.wy-menu-vertical li ul {
+  margin-bottom: 0;
+  display: none;
+}
+.wy-menu-vertical li ul li a {
+  margin-bottom: 0;
+  color: #d9d9d9;
+  font-weight: 400;
+}
+.wy-menu-vertical a {
+  line-height: 18px;
+  padding: 0.4045em 1.618em;
+  display: block;
+  position: relative;
+  font-size: 90%;
+  color: #d9d9d9;
+}
+.wy-menu-vertical a:hover {
+  background-color: #4e4a4a;
+  cursor: pointer;
+}
+.wy-menu-vertical a:hover span.toctree-expand {
+  color: #d9d9d9;
+}
+.wy-menu-vertical a:active {
+  background-color: #000000;
+  cursor: pointer;
+  color: #fff;
+}
+.wy-menu-vertical a:active span.toctree-expand {
+  color: #fff;
+}
+.wy-side-nav-search {
+  display: block;
+  width: 300px;
+  padding: 0.809em;
+  margin-bottom: 0.809em;
+  z-index: 200;
+  background-color: #262626;
+  text-align: center;
+  color: #fcfcfc;
+}
+.wy-side-nav-search input[type="text"] {
+  width: 100%;
+  border-radius: 50px;
+  padding: 6px 12px;
+  border-color: #000000;
+}
+.wy-side-nav-search img {
+  display: block;
+  margin: auto auto 0.809em;
+  height: 45px;
+  width: 45px;
+  background-color: #666666;
+  padding: 5px;
+  border-radius: 100%;
+}
+.wy-side-nav-search .wy-dropdown > a,
+.wy-side-nav-search > a {
+  color: #fcfcfc;
+  font-size: 100%;
+  font-weight: 700;
+  display: inline-block;
+  padding: 4px 6px;
+  margin-bottom: 0.809em;
+}
+.wy-side-nav-search .wy-dropdown > a:hover,
+.wy-side-nav-search > a:hover {
+  background: hsla(0, 0%, 100%, 0.1);
+}
+.wy-side-nav-search .wy-dropdown > a img.logo,
+.wy-side-nav-search > a img.logo {
+  display: block;
+  margin: 0 auto;
+  height: auto;
+  width: auto;
+  border-radius: 0;
+  max-width: 100%;
+  background: transparent;
+}
+.wy-side-nav-search .wy-dropdown > a.icon img.logo,
+.wy-side-nav-search > a.icon img.logo {
+  margin-top: 0.85em;
+}
+.wy-side-nav-search > div.version {
+  margin-top: -0.4045em;
+  margin-bottom: 0.809em;
+  font-weight: 400;
+  color: #ffffff;
+}
+.wy-nav .wy-menu-vertical header {
+  color: #666666;
+}
+.wy-nav .wy-menu-vertical a {
+  color: #b3b3b3;
+}
+.wy-nav .wy-menu-vertical a:hover {
+  background-color: #000000;
+  color: #fff;
+}
+[data-menu-wrap] {
+  -webkit-transition: all 0.2s ease-in;
+  -moz-transition: all 0.2s ease-in;
+  transition: all 0.2s ease-in;
+  position: absolute;
+  opacity: 1;
+  width: 100%;
+  opacity: 0;
+}
+[data-menu-wrap].move-center {
+  left: 0;
+  right: auto;
+  opacity: 1;
+}
+[data-menu-wrap].move-left {
+  right: auto;
+  left: -100%;
+  opacity: 0;
+}
+[data-menu-wrap].move-right {
+  right: -100%;
+  left: auto;
+  opacity: 0;
+}
+.wy-body-for-nav {
+  background: #fcfcfc;
+}
+.wy-grid-for-nav {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+}
+.wy-nav-side {
+  position: fixed;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  padding-bottom: 2em;
+  width: 300px;
+  overflow-x: hidden;
+  overflow-y: hidden;
+  min-height: 100%;
+  color: #9b9b9b;
+  background: #000000;
+  z-index: 200;
+}
+.wy-side-scroll {
+  width: 320px;
+  position: relative;
+  overflow-x: hidden;
+  overflow-y: scroll;
+  height: 100%;
+}
+.wy-nav-top {
+  display: none;
+  background: #262626;
+  color: #fff;
+  padding: 0.4045em 0.809em;
+  position: relative;
+  line-height: 50px;
+  text-align: center;
+  font-size: 100%;
+  *zoom: 1;
+}
+.wy-nav-top:after,
+.wy-nav-top:before {
+  display: table;
+  content: "";
+}
+.wy-nav-top:after {
+  clear: both;
+}
+.wy-nav-top a {
+  color: #fff;
+  font-weight: 700;
+}
+.wy-nav-top img {
+  margin-right: 12px;
+  height: 45px;
+  width: 45px;
+  background-color: #666666;
+  padding: 5px;
+  border-radius: 100%;
+}
+.wy-nav-top i {
+  font-size: 30px;
+  float: left;
+  cursor: pointer;
+  padding-top: inherit;
+}
+.wy-nav-content-wrap {
+  margin-left: 300px;
+  background: #fcfcfc;
+  min-height: 100%;
+}
+.wy-nav-content {
+  padding: 1.618em 3.236em;
+  height: 100%;
+  max-width: 800px;
+  margin: auto;
+}
+.wy-body-mask {
+  position: fixed;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.2);
+  display: none;
+  z-index: 499;
+}
+.wy-body-mask.on {
+  display: block;
+}
+footer {
+  color: grey;
+}
+footer p {
+  margin-bottom: 12px;
+}
+.rst-content footer span.commit tt,
+footer span.commit .rst-content tt,
+footer span.commit code {
+  padding: 0;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  font-size: 1em;
+  background: none;
+  border: none;
+  color: grey;
+}
+.rst-footer-buttons {
+  *zoom: 1;
+}
+.rst-footer-buttons:after,
+.rst-footer-buttons:before {
+  width: 100%;
+  display: table;
+  content: "";
+}
+.rst-footer-buttons:after {
+  clear: both;
+}
+.rst-breadcrumbs-buttons {
+  margin-top: 12px;
+  *zoom: 1;
+}
+.rst-breadcrumbs-buttons:after,
+.rst-breadcrumbs-buttons:before {
+  display: table;
+  content: "";
+}
+.rst-breadcrumbs-buttons:after {
+  clear: both;
+}
+#search-results .search li {
+  margin-bottom: 24px;
+  border-bottom: 1px solid #e1e4e5;
+  padding-bottom: 24px;
+}
+#search-results .search li:first-child {
+  border-top: 1px solid #e1e4e5;
+  padding-top: 24px;
+}
+#search-results .search li a {
+  font-size: 120%;
+  margin-bottom: 12px;
+  display: inline-block;
+}
+#search-results .context {
+  color: grey;
+  font-size: 90%;
+}
+.genindextable li > ul {
+  margin-left: 24px;
+}
+@media screen and (max-width: 768px) {
+  .wy-body-for-nav {
+    background: #ffffff;
+  }
+  .wy-nav-top {
+    display: block;
+  }
+  .wy-nav-side {
+    left: -300px;
+  }
+  .wy-nav-side.shift {
+    width: 85%;
+    left: 0;
+  }
+  .wy-menu.wy-menu-vertical,
+  .wy-side-nav-search,
+  .wy-side-scroll {
+    width: auto;
+  }
+  .wy-nav-content-wrap {
+    margin-left: 0;
+  }
+  .wy-nav-content-wrap .wy-nav-content {
+    padding: 1.618em;
+  }
+  .wy-nav-content-wrap.shift {
+    position: fixed;
+    min-width: 100%;
+    left: 85%;
+    top: 0;
+    height: 100%;
+    overflow: hidden;
+  }
+}
+@media screen and (min-width: 1100px) {
+  .wy-nav-content-wrap {
+    background: #ffffff;
+  }
+  .wy-nav-content {
+    margin: 0;
+    background: #ffffff;
+  }
+}
+@media print {
+  .rst-versions,
+  .wy-nav-side,
+  footer {
+    display: none;
+  }
+  .wy-nav-content-wrap {
+    margin-left: 0;
+  }
+}
+.rst-versions {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 300px;
+  color: #fcfcfc;
+  background: #1f1d1d;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  z-index: 400;
+}
+.rst-versions a {
+  color: #2980b9;
+  text-decoration: none;
+}
+.rst-versions .rst-badge-small {
+  display: none;
+}
+.rst-versions .rst-current-version {
+  padding: 12px;
+  background-color: #272525;
+  display: block;
+  text-align: right;
+  font-size: 90%;
+  cursor: pointer;
+  color: #27ae60;
+  *zoom: 1;
+}
+.rst-versions .rst-current-version:after,
+.rst-versions .rst-current-version:before {
+  display: table;
+  content: "";
+}
+.rst-versions .rst-current-version:after {
+  clear: both;
+}
+.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,
+.rst-content .rst-versions .rst-current-version .admonition-title,
+.rst-content code.download .rst-versions .rst-current-version span:first-child,
+.rst-content dl dt .rst-versions .rst-current-version .headerlink,
+.rst-content h1 .rst-versions .rst-current-version .headerlink,
+.rst-content h2 .rst-versions .rst-current-version .headerlink,
+.rst-content h3 .rst-versions .rst-current-version .headerlink,
+.rst-content h4 .rst-versions .rst-current-version .headerlink,
+.rst-content h5 .rst-versions .rst-current-version .headerlink,
+.rst-content h6 .rst-versions .rst-current-version .headerlink,
+.rst-content p.caption .rst-versions .rst-current-version .headerlink,
+.rst-content table > caption .rst-versions .rst-current-version .headerlink,
+.rst-content tt.download .rst-versions .rst-current-version span:first-child,
+.rst-versions .rst-current-version .fa,
+.rst-versions .rst-current-version .icon,
+.rst-versions .rst-current-version .rst-content .admonition-title,
+.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,
+.rst-versions .rst-current-version .rst-content code.download span:first-child,
+.rst-versions .rst-current-version .rst-content dl dt .headerlink,
+.rst-versions .rst-current-version .rst-content h1 .headerlink,
+.rst-versions .rst-current-version .rst-content h2 .headerlink,
+.rst-versions .rst-current-version .rst-content h3 .headerlink,
+.rst-versions .rst-current-version .rst-content h4 .headerlink,
+.rst-versions .rst-current-version .rst-content h5 .headerlink,
+.rst-versions .rst-current-version .rst-content h6 .headerlink,
+.rst-versions .rst-current-version .rst-content p.caption .headerlink,
+.rst-versions .rst-current-version .rst-content table > caption .headerlink,
+.rst-versions .rst-current-version .rst-content tt.download span:first-child,
+.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,
+.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand {
+  color: #fcfcfc;
+}
+.rst-versions .rst-current-version .fa-book,
+.rst-versions .rst-current-version .icon-book {
+  float: left;
+}
+.rst-versions .rst-current-version.rst-out-of-date {
+  background-color: #e74c3c;
+  color: #fff;
+}
+.rst-versions .rst-current-version.rst-active-old-version {
+  background-color: #f1c40f;
+  color: #000;
+}
+.rst-versions.shift-up {
+  height: auto;
+  max-height: 100%;
+  overflow-y: scroll;
+}
+.rst-versions.shift-up .rst-other-versions {
+  display: block;
+}
+.rst-versions .rst-other-versions {
+  font-size: 90%;
+  padding: 12px;
+  color: grey;
+  display: none;
+}
+.rst-versions .rst-other-versions hr {
+  display: block;
+  height: 1px;
+  border: 0;
+  margin: 20px 0;
+  padding: 0;
+  border-top: 1px solid #413d3d;
+}
+.rst-versions .rst-other-versions dd {
+  display: inline-block;
+  margin: 0;
+}
+.rst-versions .rst-other-versions dd a {
+  display: inline-block;
+  padding: 6px;
+  color: #fcfcfc;
+}
+.rst-versions.rst-badge {
+  width: auto;
+  bottom: 20px;
+  right: 20px;
+  left: auto;
+  border: none;
+  max-width: 300px;
+  max-height: 90%;
+}
+.rst-versions.rst-badge .fa-book,
+.rst-versions.rst-badge .icon-book {
+  float: none;
+  line-height: 30px;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version {
+  text-align: right;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,
+.rst-versions.rst-badge.shift-up .rst-current-version .icon-book {
+  float: left;
+}
+.rst-versions.rst-badge > .rst-current-version {
+  width: auto;
+  height: 30px;
+  line-height: 30px;
+  padding: 0 6px;
+  display: block;
+  text-align: center;
+}
+@media screen and (max-width: 768px) {
+  .rst-versions {
+    width: 85%;
+    display: none;
+  }
+  .rst-versions.shift {
+    display: block;
+  }
+}
+.rst-content img {
+  max-width: 100%;
+  height: auto;
+}
+.rst-content div.figure {
+  margin-bottom: 24px;
+}
+.rst-content div.figure p.caption {
+  font-style: italic;
+}
+.rst-content div.figure p:last-child.caption {
+  margin-bottom: 0;
+}
+.rst-content div.figure.align-center {
+  text-align: center;
+}
+.rst-content .section > a > img,
+.rst-content .section > img {
+  margin-bottom: 24px;
+}
+.rst-content abbr[title] {
+  text-decoration: none;
+}
+.rst-content.style-external-links a.reference.external:after {
+  font-family: FontAwesome;
+  content: "\f08e";
+  color: #b3b3b3;
+  vertical-align: super;
+  font-size: 60%;
+  margin: 0 0.2em;
+}
+.rst-content blockquote {
+  margin-left: 24px;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content pre.literal-block {
+  white-space: pre;
+  margin: 0;
+  padding: 12px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  display: block;
+  overflow: auto;
+}
+.rst-content div[class^="highlight"],
+.rst-content pre.literal-block {
+  border: 1px solid #e1e4e5;
+  overflow-x: auto;
+  margin: 1px 0 24px;
+}
+.rst-content div[class^="highlight"] div[class^="highlight"],
+.rst-content pre.literal-block div[class^="highlight"] {
+  padding: 0;
+  border: none;
+  margin: 0;
+}
+.rst-content div[class^="highlight"] td.code {
+  width: 100%;
+}
+.rst-content .linenodiv pre {
+  border-right: 1px solid #e6e9ea;
+  margin: 0;
+  padding: 12px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  user-select: none;
+  pointer-events: none;
+}
+.rst-content div[class^="highlight"] pre {
+  white-space: pre;
+  margin: 0;
+  padding: 12px;
+  display: block;
+  overflow: auto;
+}
+.rst-content div[class^="highlight"] pre .hll {
+  display: block;
+  margin: 0 -12px;
+  padding: 0 12px;
+}
+.rst-content .linenodiv pre,
+.rst-content div[class^="highlight"] pre,
+.rst-content pre.literal-block {
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  font-size: 12px;
+  line-height: 1.4;
+}
+.rst-content div.highlight .gp {
+  user-select: none;
+  pointer-events: none;
+}
+.rst-content .code-block-caption {
+  font-style: italic;
+  font-size: 100%;
+  line-height: 1;
+  padding: 1em 0;
+  text-align: center;
+}
+@media print {
+  .rst-content .codeblock,
+  .rst-content div[class^="highlight"],
+  .rst-content div[class^="highlight"] pre {
+    white-space: pre-wrap;
+  }
+}
+.rst-content .admonition,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning {
+  clear: both;
+}
+.rst-content .admonition-todo .last,
+.rst-content .admonition-todo > :last-child,
+.rst-content .admonition .last,
+.rst-content .admonition > :last-child,
+.rst-content .attention .last,
+.rst-content .attention > :last-child,
+.rst-content .caution .last,
+.rst-content .caution > :last-child,
+.rst-content .danger .last,
+.rst-content .danger > :last-child,
+.rst-content .error .last,
+.rst-content .error > :last-child,
+.rst-content .hint .last,
+.rst-content .hint > :last-child,
+.rst-content .important .last,
+.rst-content .important > :last-child,
+.rst-content .note .last,
+.rst-content .note > :last-child,
+.rst-content .seealso .last,
+.rst-content .seealso > :last-child,
+.rst-content .tip .last,
+.rst-content .tip > :last-child,
+.rst-content .warning .last,
+.rst-content .warning > :last-child {
+  margin-bottom: 0;
+}
+.rst-content .admonition-title:before {
+  margin-right: 4px;
+}
+.rst-content .admonition table {
+  border-color: rgba(0, 0, 0, 0.1);
+}
+.rst-content .admonition table td,
+.rst-content .admonition table th {
+  background: transparent !important;
+  border-color: rgba(0, 0, 0, 0.1) !important;
+}
+.rst-content .section ol.loweralpha,
+.rst-content .section ol.loweralpha > li {
+  list-style: lower-alpha;
+}
+.rst-content .section ol.upperalpha,
+.rst-content .section ol.upperalpha > li {
+  list-style: upper-alpha;
+}
+.rst-content .section ol li > *,
+.rst-content .section ul li > * {
+  margin-top: 12px;
+  margin-bottom: 12px;
+}
+.rst-content .section ol li > :first-child,
+.rst-content .section ul li > :first-child {
+  margin-top: 0;
+}
+.rst-content .section ol li > p,
+.rst-content .section ol li > p:last-child,
+.rst-content .section ul li > p,
+.rst-content .section ul li > p:last-child {
+  margin-bottom: 12px;
+}
+.rst-content .section ol li > p:only-child,
+.rst-content .section ol li > p:only-child:last-child,
+.rst-content .section ul li > p:only-child,
+.rst-content .section ul li > p:only-child:last-child {
+  margin-bottom: 0;
+}
+.rst-content .section ol li > ol,
+.rst-content .section ol li > ul,
+.rst-content .section ul li > ol,
+.rst-content .section ul li > ul {
+  margin-bottom: 12px;
+}
+.rst-content .section ol.simple li > *,
+.rst-content .section ol.simple li ol,
+.rst-content .section ol.simple li ul,
+.rst-content .section ul.simple li > *,
+.rst-content .section ul.simple li ol,
+.rst-content .section ul.simple li ul {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.rst-content .line-block {
+  margin-left: 0;
+  margin-bottom: 24px;
+  line-height: 24px;
+}
+.rst-content .line-block .line-block {
+  margin-left: 24px;
+  margin-bottom: 0;
+}
+.rst-content .topic-title {
+  font-weight: 700;
+  margin-bottom: 12px;
+}
+.rst-content .toc-backref {
+  color: #404040;
+}
+.rst-content .align-right {
+  float: right;
+  margin: 0 0 24px 24px;
+}
+.rst-content .align-left {
+  float: left;
+  margin: 0 24px 24px 0;
+}
+.rst-content .align-center {
+  margin: auto;
+}
+.rst-content .align-center:not(table) {
+  display: block;
+}
+.rst-content .code-block-caption .headerlink,
+.rst-content .toctree-wrapper > p.caption .headerlink,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink {
+  visibility: hidden;
+  font-size: 14px;
+}
+.rst-content .code-block-caption .headerlink:after,
+.rst-content .toctree-wrapper > p.caption .headerlink:after,
+.rst-content dl dt .headerlink:after,
+.rst-content h1 .headerlink:after,
+.rst-content h2 .headerlink:after,
+.rst-content h3 .headerlink:after,
+.rst-content h4 .headerlink:after,
+.rst-content h5 .headerlink:after,
+.rst-content h6 .headerlink:after,
+.rst-content p.caption .headerlink:after,
+.rst-content table > caption .headerlink:after {
+  content: "\f0c1";
+  font-family: FontAwesome;
+}
+.rst-content .code-block-caption:hover .headerlink:after,
+.rst-content .toctree-wrapper > p.caption:hover .headerlink:after,
+.rst-content dl dt:hover .headerlink:after,
+.rst-content h1:hover .headerlink:after,
+.rst-content h2:hover .headerlink:after,
+.rst-content h3:hover .headerlink:after,
+.rst-content h4:hover .headerlink:after,
+.rst-content h5:hover .headerlink:after,
+.rst-content h6:hover .headerlink:after,
+.rst-content p.caption:hover .headerlink:after,
+.rst-content table > caption:hover .headerlink:after {
+  visibility: visible;
+}
+.rst-content table > caption .headerlink:after {
+  font-size: 12px;
+}
+.rst-content .centered {
+  text-align: center;
+}
+.rst-content .sidebar {
+  float: right;
+  width: 40%;
+  display: block;
+  margin: 0 0 24px 24px;
+  padding: 24px;
+  background: #f3f6f6;
+  border: 1px solid #e1e4e5;
+}
+.rst-content .sidebar dl,
+.rst-content .sidebar p,
+.rst-content .sidebar ul {
+  font-size: 90%;
+}
+.rst-content .sidebar .last,
+.rst-content .sidebar > :last-child {
+  margin-bottom: 0;
+}
+.rst-content .sidebar .sidebar-title {
+  display: block;
+  font-family: Roboto Slab, ff-tisa-web-pro, Georgia, Arial, sans-serif;
+  font-weight: 700;
+  background: #e1e4e5;
+  padding: 6px 12px;
+  margin: -24px -24px 24px;
+  font-size: 100%;
+}
+.rst-content .highlighted {
+  background: #f1c40f;
+  box-shadow: 0 0 0 2px #f1c40f;
+  display: inline;
+  font-weight: 700;
+}
+.rst-content .citation-reference,
+.rst-content .footnote-reference {
+  vertical-align: baseline;
+  position: relative;
+  top: -0.4em;
+  line-height: 0;
+  font-size: 90%;
+}
+.rst-content .hlist {
+  width: 100%;
+}
+html.writer-html4 .rst-content table.docutils.citation,
+html.writer-html4 .rst-content table.docutils.footnote {
+  background: none;
+  border: none;
+}
+html.writer-html4 .rst-content table.docutils.citation td,
+html.writer-html4 .rst-content table.docutils.citation tr,
+html.writer-html4 .rst-content table.docutils.footnote td,
+html.writer-html4 .rst-content table.docutils.footnote tr {
+  border: none;
+  background-color: transparent !important;
+  white-space: normal;
+}
+html.writer-html4 .rst-content table.docutils.citation td.label,
+html.writer-html4 .rst-content table.docutils.footnote td.label {
+  padding-left: 0;
+  padding-right: 0;
+  vertical-align: top;
+}
+html.writer-html5 .rst-content dl dt span.classifier:before {
+  content: " : ";
+}
+html.writer-html5 .rst-content dl.field-list,
+html.writer-html5 .rst-content dl.footnote {
+  display: grid;
+  grid-template-columns: max-content auto;
+}
+html.writer-html5 .rst-content dl.field-list > dt,
+html.writer-html5 .rst-content dl.footnote > dt {
+  padding-left: 1rem;
+}
+html.writer-html5 .rst-content dl.field-list > dt:after,
+html.writer-html5 .rst-content dl.footnote > dt:after {
+  content: ":";
+}
+html.writer-html5 .rst-content dl.field-list > dd,
+html.writer-html5 .rst-content dl.field-list > dt,
+html.writer-html5 .rst-content dl.footnote > dd,
+html.writer-html5 .rst-content dl.footnote > dt {
+  margin-bottom: 0;
+}
+html.writer-html5 .rst-content dl.footnote {
+  font-size: 0.9rem;
+}
+html.writer-html5 .rst-content dl.footnote > dt {
+  margin: 0 0.5rem 0.5rem 0;
+  line-height: 1.2rem;
+  word-break: break-all;
+  font-weight: 400;
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets {
+  margin-right: 0.5rem;
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets:before {
+  content: "[";
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets:after {
+  content: "]";
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.fn-backref {
+  font-style: italic;
+}
+html.writer-html5 .rst-content dl.footnote > dd {
+  margin: 0 0 0.5rem;
+  line-height: 1.2rem;
+}
+html.writer-html5 .rst-content dl.footnote > dd p,
+html.writer-html5 .rst-content dl.option-list kbd {
+  font-size: 0.9rem;
+}
+.rst-content table.docutils.footnote,
+html.writer-html4 .rst-content table.docutils.citation,
+html.writer-html5 .rst-content dl.footnote {
+  color: grey;
+}
+.rst-content table.docutils.footnote code,
+.rst-content table.docutils.footnote tt,
+html.writer-html4 .rst-content table.docutils.citation code,
+html.writer-html4 .rst-content table.docutils.citation tt,
+html.writer-html5 .rst-content dl.footnote code,
+html.writer-html5 .rst-content dl.footnote tt {
+  color: #555;
+}
+.rst-content .wy-table-responsive.citation,
+.rst-content .wy-table-responsive.footnote {
+  margin-bottom: 0;
+}
+.rst-content .wy-table-responsive.citation + :not(.citation),
+.rst-content .wy-table-responsive.footnote + :not(.footnote) {
+  margin-top: 24px;
+}
+.rst-content .wy-table-responsive.citation:last-child,
+.rst-content .wy-table-responsive.footnote:last-child {
+  margin-bottom: 24px;
+}
+.rst-content table.docutils th {
+  border-color: #e1e4e5;
+}
+html.writer-html5 .rst-content table.docutils th {
+  border: 1px solid #e1e4e5;
+}
+html.writer-html5 .rst-content table.docutils td > p,
+html.writer-html5 .rst-content table.docutils th > p {
+  line-height: 1rem;
+  margin-bottom: 0;
+  font-size: 0.9rem;
+}
+.rst-content table.docutils td .last,
+.rst-content table.docutils td .last > :last-child {
+  margin-bottom: 0;
+}
+.rst-content table.field-list,
+.rst-content table.field-list td {
+  border: none;
+}
+.rst-content table.field-list td p {
+  font-size: inherit;
+  line-height: inherit;
+}
+.rst-content table.field-list td > strong {
+  display: inline-block;
+}
+.rst-content table.field-list .field-name {
+  padding-right: 10px;
+  text-align: left;
+  white-space: nowrap;
+}
+.rst-content table.field-list .field-body {
+  text-align: left;
+}
+.rst-content code,
+.rst-content tt {
+  color: #000;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  padding: 2px 5px;
+}
+.rst-content code big,
+.rst-content code em,
+.rst-content tt big,
+.rst-content tt em {
+  font-size: 100% !important;
+  line-height: normal;
+}
+.rst-content code.literal,
+.rst-content tt.literal {
+  color: #E60000;
+}
+.rst-content code.xref,
+.rst-content tt.xref,
+a .rst-content code,
+a .rst-content tt {
+  font-weight: 700;
+  color: #404040;
+}
+.rst-content kbd,
+.rst-content pre,
+.rst-content samp {
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+}
+.rst-content a code,
+.rst-content a tt {
+  color: #558040;
+}
+.rst-content dl {
+  margin-bottom: 24px;
+}
+.rst-content dl dt {
+  font-weight: 700;
+  margin-bottom: 12px;
+}
+.rst-content dl ol,
+.rst-content dl p,
+.rst-content dl table,
+.rst-content dl ul {
+  margin-bottom: 12px;
+}
+.rst-content dl dd {
+  margin: 0 0 12px 24px;
+  line-height: 24px;
+}
+html.writer-html4 .rst-content dl:not(.docutils),
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) {
+  margin-bottom: 24px;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt {
+  display: table;
+  margin: 6px 0;
+  font-size: 90%;
+  line-height: normal;
+  background: ##F2F2F2;
+  color: #666666;
+  border-top: 3px solid #6ab0de;
+  padding: 6px;
+  position: relative;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt:before,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt:before {
+  color: #6ab0de;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt .headerlink,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt
+  .headerlink {
+  color: #404040;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  dl:not(.field-list)
+  > dt {
+  margin-bottom: 6px;
+  border: none;
+  border-left: 3px solid #ccc;
+  background: #f0f0f0;
+  color: #555;
+}
+html.writer-html4
+  .rst-content
+  dl:not(.docutils)
+  dl:not(.field-list)
+  > dt
+  .headerlink,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  dl:not(.field-list)
+  > dt
+  .headerlink {
+  color: #404040;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt:first-child,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt:first-child {
+  margin-top: 0;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code,
+html.writer-html4 .rst-content dl:not(.docutils) tt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt {
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,
+html.writer-html4 .rst-content dl:not(.docutils) code.descname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descclassname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descclassname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descname {
+  background-color: transparent;
+  border: none;
+  padding: 0;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code.descname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descname {
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) .optional,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  .optional {
+  display: inline-block;
+  padding: 0 4px;
+  color: #000;
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) .property,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  .property {
+  display: inline-block;
+  padding-right: 8px;
+}
+.rst-content .viewcode-back,
+.rst-content .viewcode-link {
+  display: inline-block;
+  color: #27ae60;
+  font-size: 80%;
+  padding-left: 24px;
+}
+.rst-content .viewcode-back {
+  display: block;
+  float: right;
+}
+.rst-content p.rubric {
+  margin-bottom: 12px;
+  font-weight: 700;
+}
+.rst-content code.download,
+.rst-content tt.download {
+  background: inherit;
+  padding: inherit;
+  font-weight: 400;
+  font-family: inherit;
+  font-size: inherit;
+  color: inherit;
+  border: inherit;
+  white-space: inherit;
+}
+.rst-content code.download span:first-child,
+.rst-content tt.download span:first-child {
+  -webkit-font-smoothing: subpixel-antialiased;
+}
+.rst-content code.download span:first-child:before,
+.rst-content tt.download span:first-child:before {
+  margin-right: 4px;
+}
+.rst-content .guilabel {
+  border: 1px solid #7fbbe3;
+  background: #e7f2fa;
+  font-size: 80%;
+  font-weight: 700;
+  border-radius: 4px;
+  padding: 2.4px 6px;
+  margin: auto 2px;
+}
+.rst-content .versionmodified {
+  font-style: italic;
+}
+@media screen and (max-width: 480px) {
+  .rst-content .sidebar {
+    width: 100%;
+  }
+}
+span[id*="MathJax-Span"] {
+  color: #666666;
+}
+.math {
+  text-align: center;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942)
+      format("woff2"),
+    url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");
+  font-weight: 400;
+  font-style: normal;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2)
+      format("woff2"),
+    url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");
+  font-weight: 700;
+  font-style: normal;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d)
+      format("woff2"),
+    url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c)
+      format("woff");
+  font-weight: 700;
+  font-style: italic;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d)
+      format("woff2"),
+    url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892)
+      format("woff");
+  font-weight: 400;
+  font-style: italic;
+  font-display: block;
+}
+@font-face {
+  font-family: Roboto Slab;
+  font-style: normal;
+  font-weight: 400;
+  src: url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958)
+      format("woff2"),
+    url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c)
+      format("woff");
+  font-display: block;
+}
+@font-face {
+  font-family: Roboto Slab;
+  font-style: normal;
+  font-weight: 700;
+  src: url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe)
+      format("woff2"),
+    url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a)
+      format("woff");
+  font-display: block;
+}
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/doctools.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/doctools.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1bfd708b7f424846261e634ec53b0be89a4f604
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/doctools.js
@@ -0,0 +1,358 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+if (!window.console || !console.firebug) {
+  var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
+    "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
+    "profile", "profileEnd"];
+  window.console = {};
+  for (var i = 0; i < names.length; ++i)
+    window.console[names[i]] = function() {};
+}
+ */
+
+/**
+ * small helper function to urldecode strings
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
+ */
+jQuery.urldecode = function(x) {
+  if (!x) {
+    return x
+  }
+  return decodeURIComponent(x.replace(/\+/g, ' '));
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+  if (typeof s === 'undefined')
+    s = document.location.search;
+  var parts = s.substr(s.indexOf('?') + 1).split('&');
+  var result = {};
+  for (var i = 0; i < parts.length; i++) {
+    var tmp = parts[i].split('=', 2);
+    var key = jQuery.urldecode(tmp[0]);
+    var value = jQuery.urldecode(tmp[1]);
+    if (key in result)
+      result[key].push(value);
+    else
+      result[key] = [value];
+  }
+  return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+  function highlight(node, addItems) {
+    if (node.nodeType === 3) {
+      var val = node.nodeValue;
+      var pos = val.toLowerCase().indexOf(text);
+      if (pos >= 0 &&
+          !jQuery(node.parentNode).hasClass(className) &&
+          !jQuery(node.parentNode).hasClass("nohighlight")) {
+        var span;
+        var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
+        if (isInSVG) {
+          span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+        } else {
+          span = document.createElement("span");
+          span.className = className;
+        }
+        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling));
+        node.nodeValue = val.substr(0, pos);
+        if (isInSVG) {
+          var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+          var bbox = node.parentElement.getBBox();
+          rect.x.baseVal.value = bbox.x;
+          rect.y.baseVal.value = bbox.y;
+          rect.width.baseVal.value = bbox.width;
+          rect.height.baseVal.value = bbox.height;
+          rect.setAttribute('class', className);
+          addItems.push({
+              "parent": node.parentNode,
+              "target": rect});
+        }
+      }
+    }
+    else if (!jQuery(node).is("button, select, textarea")) {
+      jQuery.each(node.childNodes, function() {
+        highlight(this, addItems);
+      });
+    }
+  }
+  var addItems = [];
+  var result = this.each(function() {
+    highlight(this, addItems);
+  });
+  for (var i = 0; i < addItems.length; ++i) {
+    jQuery(addItems[i].parent).before(addItems[i].target);
+  }
+  return result;
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+  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"
+    };
+  };
+  jQuery.browser = {};
+  jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+  init : function() {
+    this.fixFirefoxAnchorBug();
+    this.highlightSearchWords();
+    this.initIndexTable();
+    this.initOnKeyListeners();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS : {},
+  PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
+  LOCALE : 'unknown',
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext : function(string) {
+    var translated = Documentation.TRANSLATIONS[string];
+    if (typeof translated === 'undefined')
+      return string;
+    return (typeof translated === 'string') ? translated : translated[0];
+  },
+
+  ngettext : function(singular, plural, n) {
+    var translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated === 'undefined')
+      return (n == 1) ? singular : plural;
+    return translated[Documentation.PLURALEXPR(n)];
+  },
+
+  addTranslations : function(catalog) {
+    for (var key in catalog.messages)
+      this.TRANSLATIONS[key] = catalog.messages[key];
+    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+    this.LOCALE = catalog.locale;
+  },
+
+  /**
+   * add context elements like header anchor links
+   */
+  addContextElements : function() {
+    $('div[id] > :header:first').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this headline')).
+      appendTo(this);
+    });
+    $('dt[id]').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this definition')).
+      appendTo(this);
+    });
+  },
+
+  /**
+   * workaround a firefox stupidity
+   * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
+   */
+  fixFirefoxAnchorBug : function() {
+    if (document.location.hash && $.browser.mozilla)
+      window.setTimeout(function() {
+        document.location.href += '';
+      }, 10);
+  },
+
+  /**
+   * highlight the search words provided in the url in the text
+   */
+  highlightSearchWords : function() {
+    var params = $.getQueryParameters();
+    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+    if (terms.length) {
+      var body = $('div.body');
+      if (!body.length) {
+        body = $('body');
+      }
+      window.setTimeout(function() {
+        $.each(terms, function() {
+          body.highlightText(this.toLowerCase(), 'highlighted');
+        });
+      }, 10);
+      $('<p class="highlight-link"><a href="javascript:Documentation.' +
+        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
+          .appendTo($('#searchbox'));
+    }
+  },
+
+  /**
+   * init the domain index toggle buttons
+   */
+  initIndexTable : function() {
+    var togglers = $('img.toggler').click(function() {
+      var src = $(this).attr('src');
+      var idnum = $(this).attr('id').substr(7);
+      $('tr.cg-' + idnum).toggle();
+      if (src.substr(-9) === 'minus.png')
+        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
+      else
+        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
+    }).css('display', '');
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
+        togglers.click();
+    }
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords : function() {
+    $('#searchbox .highlight-link').fadeOut(300);
+    $('span.highlighted').removeClass('highlighted');
+    var url = new URL(window.location);
+    url.searchParams.delete('highlight');
+    window.history.replaceState({}, '', url);
+  },
+
+   /**
+   * helper function to focus on search bar
+   */
+  focusSearchBar : function() {
+    $('input[name=q]').first().focus();
+  },
+
+  /**
+   * make the url absolute
+   */
+  makeURL : function(relativeURL) {
+    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
+  },
+
+  /**
+   * get the current relative url
+   */
+  getCurrentURL : function() {
+    var path = document.location.pathname;
+    var parts = path.split(/\//);
+    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
+      if (this === '..')
+        parts.pop();
+    });
+    var url = parts.join('/');
+    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+  },
+
+  initOnKeyListeners: function() {
+    // only install a listener if it is really needed
+    if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
+        !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+        return;
+
+    $(document).keydown(function(event) {
+      var activeElementType = document.activeElement.tagName;
+      // don't navigate when in search box, textarea, dropdown or button
+      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
+          && activeElementType !== 'BUTTON') {
+        if (event.altKey || event.ctrlKey || event.metaKey)
+          return;
+
+          if (!event.shiftKey) {
+            switch (event.key) {
+              case 'ArrowLeft':
+                if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
+                  break;
+                var prevHref = $('link[rel="prev"]').prop('href');
+                if (prevHref) {
+                  window.location.href = prevHref;
+                  return false;
+                }
+                break;
+              case 'ArrowRight':
+                if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
+                  break;
+                var nextHref = $('link[rel="next"]').prop('href');
+                if (nextHref) {
+                  window.location.href = nextHref;
+                  return false;
+                }
+                break;
+              case 'Escape':
+                if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+                  break;
+                Documentation.hideSearchWords();
+                return false;
+          }
+        }
+
+        // some keyboard layouts may need Shift to get /
+        switch (event.key) {
+          case '/':
+            if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+              break;
+            Documentation.focusSearchBar();
+            return false;
+        }
+      }
+    });
+  }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+  Documentation.init();
+});
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/documentation_options.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/documentation_options.js
new file mode 100644
index 0000000000000000000000000000000000000000..57fb7a05cc64b583837d678ae9c087b47eafc3f3
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/documentation_options.js
@@ -0,0 +1,14 @@
+var DOCUMENTATION_OPTIONS = {
+    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
+    VERSION: '1.0.2',
+    LANGUAGE: 'None',
+    COLLAPSE_INDEX: false,
+    BUILDER: 'html',
+    FILE_SUFFIX: '.html',
+    LINK_SUFFIX: '.html',
+    HAS_SOURCE: false,
+    SOURCELINK_SUFFIX: '.txt',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/file.png b/VimbaX/doc/VmbCPP_Function_Reference/_static/file.png
new file mode 100644
index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/file.png differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/jquery-3.5.1.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/jquery-3.5.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..50937333b99a5e168ac9e8292b22edd7e96c3e6a
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/jquery-3.5.1.js
@@ -0,0 +1,10872 @@
+/*!
+ * jQuery JavaScript Library v3.5.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2020-05-04T22:49Z
+ */
+( function( global, factory ) {
+
+	"use strict";
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var flat = arr.flat ? function( array ) {
+	return arr.flat.call( array );
+} : function( array ) {
+	return arr.concat.apply( [], array );
+};
+
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+      // Support: Chrome <=57, Firefox <=52
+      // In some browsers, typeof returns "function" for HTML <object> elements
+      // (i.e., `typeof document.createElement( "object" ) === "function"`).
+      // We don't want to classify *any* DOM node as a function.
+      return typeof obj === "function" && typeof obj.nodeType !== "number";
+  };
+
+
+var isWindow = function isWindow( obj ) {
+		return obj != null && obj === obj.window;
+	};
+
+
+var document = window.document;
+
+
+
+	var preservedScriptAttributes = {
+		type: true,
+		src: true,
+		nonce: true,
+		noModule: true
+	};
+
+	function DOMEval( code, node, doc ) {
+		doc = doc || document;
+
+		var i, val,
+			script = doc.createElement( "script" );
+
+		script.text = code;
+		if ( node ) {
+			for ( i in preservedScriptAttributes ) {
+
+				// Support: Firefox 64+, Edge 18+
+				// Some browsers don't support the "nonce" property on scripts.
+				// On the other hand, just using `getAttribute` is not enough as
+				// the `nonce` attribute is reset to an empty string whenever it
+				// becomes browsing-context connected.
+				// See https://github.com/whatwg/html/issues/2369
+				// See https://html.spec.whatwg.org/#nonce-attributes
+				// The `node.getAttribute` check was added for the sake of
+				// `jQuery.globalEval` so that it can fake a nonce-containing node
+				// via an object.
+				val = node[ i ] || node.getAttribute && node.getAttribute( i );
+				if ( val ) {
+					script.setAttribute( i, val );
+				}
+			}
+		}
+		doc.head.appendChild( script ).parentNode.removeChild( script );
+	}
+
+
+function toType( obj ) {
+	if ( obj == null ) {
+		return obj + "";
+	}
+
+	// Support: Android <=2.3 only (functionish RegExp)
+	return typeof obj === "object" || typeof obj === "function" ?
+		class2type[ toString.call( obj ) ] || "object" :
+		typeof obj;
+}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+	version = "3.5.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+
+		// Return all the elements in a clean array
+		if ( num == null ) {
+			return slice.call( this );
+		}
+
+		// Return just the one element from the set
+		return num < 0 ? this[ num + this.length ] : this[ num ];
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	even: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return ( i + 1 ) % 2;
+		} ) );
+	},
+
+	odd: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return i % 2;
+		} ) );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				copy = options[ name ];
+
+				// Prevent Object.prototype pollution
+				// Prevent never-ending loop
+				if ( name === "__proto__" || target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = Array.isArray( copy ) ) ) ) {
+					src = target[ name ];
+
+					// Ensure proper type for the source value
+					if ( copyIsArray && !Array.isArray( src ) ) {
+						clone = [];
+					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
+						clone = {};
+					} else {
+						clone = src;
+					}
+					copyIsArray = false;
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isPlainObject: function( obj ) {
+		var proto, Ctor;
+
+		// Detect obvious negatives
+		// Use toString instead of jQuery.type to catch host objects
+		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+			return false;
+		}
+
+		proto = getProto( obj );
+
+		// Objects with no prototype (e.g., `Object.create( null )`) are plain
+		if ( !proto ) {
+			return true;
+		}
+
+		// Objects with prototype are plain iff they were constructed by a global Object function
+		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	// Evaluates a script in a provided context; falls back to the global one
+	// if not specified.
+	globalEval: function( code, options, doc ) {
+		DOMEval( code, { nonce: options && options.nonce }, doc );
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	// Support: Android <=4.0 only, PhantomJS 1 only
+	// push.apply(_, arraylike) throws on ancient WebKit
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return flat( ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( _i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: real iOS 8.2 only (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = toType( obj );
+
+	if ( isFunction( obj ) || isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.5
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://js.foundation/
+ *
+ * Date: 2020-03-14
+ */
+( function( window ) {
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	nonnativeSelectorCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// Instance methods
+	hasOwn = ( {} ).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	pushNative = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+
+	// Use a stripped-down indexOf as it's faster than native
+	// https://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[ i ] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
+		"ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
+	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
+		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+
+		// "Attribute values must be CSS identifiers [capture 5]
+		// or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
+		whitespace + "*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
+		whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
+		"*" ),
+	rdescend = new RegExp( whitespace + "|>" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
+			whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
+			whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace +
+			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rhtml = /HTML$/i,
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+
+	// CSS escapes
+	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
+	funescape = function( escape, nonHex ) {
+		var high = "0x" + escape.slice( 1 ) - 0x10000;
+
+		return nonHex ?
+
+			// Strip the backslash prefix from a non-hex escape sequence
+			nonHex :
+
+			// Replace a hexadecimal escape sequence with the encoded Unicode code point
+			// Support: IE <=11+
+			// For values outside the Basic Multilingual Plane (BMP), manually construct a
+			// surrogate pair
+			high < 0 ?
+				String.fromCharCode( high + 0x10000 ) :
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// CSS string/identifier serialization
+	// https://drafts.csswg.org/cssom/#common-serializing-idioms
+	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+	fcssescape = function( ch, asCodePoint ) {
+		if ( asCodePoint ) {
+
+			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+			if ( ch === "\0" ) {
+				return "\uFFFD";
+			}
+
+			// Control characters and (dependent upon position) numbers get escaped as code points
+			return ch.slice( 0, -1 ) + "\\" +
+				ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+		}
+
+		// Other potentially-special ASCII characters get backslash-escaped
+		return "\\" + ch;
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	},
+
+	inDisabledFieldset = addCombinator(
+		function( elem ) {
+			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
+		},
+		{ dir: "parentNode", next: "legend" }
+	);
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		( arr = slice.call( preferredDoc.childNodes ) ),
+		preferredDoc.childNodes
+	);
+
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	// eslint-disable-next-line no-unused-expressions
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			pushNative.apply( target, slice.call( els ) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+
+			// Can't trust NodeList.length
+			while ( ( target[ j++ ] = els[ i++ ] ) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+		setDocument( context );
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
+
+				// ID selector
+				if ( ( m = match[ 1 ] ) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( ( elem = context.getElementById( m ) ) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[ 2 ] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!nonnativeSelectorCache[ selector + " " ] &&
+				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
+
+				// Support: IE 8 only
+				// Exclude object elements
+				( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
+
+				newSelector = selector;
+				newContext = context;
+
+				// qSA considers elements outside a scoping root when evaluating child or
+				// descendant combinators, which is not what we want.
+				// In such cases, we work around the behavior by prefixing every selector in the
+				// list with an ID selector referencing the scope context.
+				// The technique has to be used as well when a leading combinator is used
+				// as such selectors are not recognized by querySelectorAll.
+				// Thanks to Andrew Dupont for this technique.
+				if ( nodeType === 1 &&
+					( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+
+					// We can use :scope instead of the ID hack if the browser
+					// supports it & if we're not changing the context.
+					if ( newContext !== context || !support.scope ) {
+
+						// Capture the context ID, setting it first if necessary
+						if ( ( nid = context.getAttribute( "id" ) ) ) {
+							nid = nid.replace( rcssescape, fcssescape );
+						} else {
+							context.setAttribute( "id", ( nid = expando ) );
+						}
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					while ( i-- ) {
+						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
+							toSelector( groups[ i ] );
+					}
+					newSelector = groups.join( "," );
+				}
+
+				try {
+					push.apply( results,
+						newContext.querySelectorAll( newSelector )
+					);
+					return results;
+				} catch ( qsaError ) {
+					nonnativeSelectorCache( selector, true );
+				} finally {
+					if ( nid === expando ) {
+						context.removeAttribute( "id" );
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return ( cache[ key + " " ] = value );
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+	var el = document.createElement( "fieldset" );
+
+	try {
+		return !!fn( el );
+	} catch ( e ) {
+		return false;
+	} finally {
+
+		// Remove from its parent by default
+		if ( el.parentNode ) {
+			el.parentNode.removeChild( el );
+		}
+
+		// release memory in IE
+		el = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split( "|" ),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[ i ] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			a.sourceIndex - b.sourceIndex;
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( ( cur = cur.nextSibling ) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return ( name === "input" || name === "button" ) && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+	return function( elem ) {
+
+		// Only certain elements can match :enabled or :disabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+		if ( "form" in elem ) {
+
+			// Check for inherited disabledness on relevant non-disabled elements:
+			// * listed form-associated elements in a disabled fieldset
+			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+			// * option elements in a disabled optgroup
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+			// All such elements have a "form" property.
+			if ( elem.parentNode && elem.disabled === false ) {
+
+				// Option elements defer to a parent optgroup if present
+				if ( "label" in elem ) {
+					if ( "label" in elem.parentNode ) {
+						return elem.parentNode.disabled === disabled;
+					} else {
+						return elem.disabled === disabled;
+					}
+				}
+
+				// Support: IE 6 - 11
+				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
+				return elem.isDisabled === disabled ||
+
+					// Where there is no isDisabled, check manually
+					/* jshint -W018 */
+					elem.isDisabled !== !disabled &&
+					inDisabledFieldset( elem ) === disabled;
+			}
+
+			return elem.disabled === disabled;
+
+		// Try to winnow out elements that can't be disabled before trusting the disabled property.
+		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+		// even exist on them, let alone have a boolean value.
+		} else if ( "label" in elem ) {
+			return elem.disabled === disabled;
+		}
+
+		// Remaining elements are neither :enabled nor :disabled
+		return false;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction( function( argument ) {
+		argument = +argument;
+		return markFunction( function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
+					seed[ j ] = !( matches[ j ] = seed[ j ] );
+				}
+			}
+		} );
+	} );
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	var namespace = elem.namespaceURI,
+		docElem = ( elem.ownerDocument || elem ).documentElement;
+
+	// Support: IE <=8
+	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
+	// https://bugs.jquery.com/ticket/4833
+	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, subWindow,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9 - 11+, Edge 12 - 18+
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( preferredDoc != document &&
+		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
+
+		// Support: IE 11, Edge
+		if ( subWindow.addEventListener ) {
+			subWindow.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( subWindow.attachEvent ) {
+			subWindow.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
+	// Safari 4 - 5 only, Opera <=11.6 - 12.x only
+	// IE/Edge & older browsers don't support the :scope pseudo-class.
+	// Support: Safari 6.0 only
+	// Safari 6.0 supports :scope but it's an alias of :root there.
+	support.scope = assert( function( el ) {
+		docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
+		return typeof el.querySelectorAll !== "undefined" &&
+			!el.querySelectorAll( ":scope fieldset div" ).length;
+	} );
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert( function( el ) {
+		el.className = "i";
+		return !el.getAttribute( "className" );
+	} );
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert( function( el ) {
+		el.appendChild( document.createComment( "" ) );
+		return !el.getElementsByTagName( "*" ).length;
+	} );
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programmatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert( function( el ) {
+		docElem.appendChild( el ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	} );
+
+	// ID filter and find
+	if ( support.getById ) {
+		Expr.filter[ "ID" ] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute( "id" ) === attrId;
+			};
+		};
+		Expr.find[ "ID" ] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var elem = context.getElementById( id );
+				return elem ? [ elem ] : [];
+			}
+		};
+	} else {
+		Expr.filter[ "ID" ] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode( "id" );
+				return node && node.value === attrId;
+			};
+		};
+
+		// Support: IE 6 - 7 only
+		// getElementById is not reliable as a find shortcut
+		Expr.find[ "ID" ] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var node, i, elems,
+					elem = context.getElementById( id );
+
+				if ( elem ) {
+
+					// Verify the id attribute
+					node = elem.getAttributeNode( "id" );
+					if ( node && node.value === id ) {
+						return [ elem ];
+					}
+
+					// Fall back on getElementsByName
+					elems = context.getElementsByName( id );
+					i = 0;
+					while ( ( elem = elems[ i++ ] ) ) {
+						node = elem.getAttributeNode( "id" );
+						if ( node && node.value === id ) {
+							return [ elem ];
+						}
+					}
+				}
+
+				return [];
+			}
+		};
+	}
+
+	// Tag
+	Expr.find[ "TAG" ] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( ( elem = results[ i++ ] ) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See https://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
+
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert( function( el ) {
+
+			var input;
+
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// https://bugs.jquery.com/ticket/12359
+			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !el.querySelectorAll( "[selected]" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push( "~=" );
+			}
+
+			// Support: IE 11+, Edge 15 - 18+
+			// IE 11/Edge don't find elements on a `[name='']` query in some cases.
+			// Adding a temporary attribute to the document before the selection works
+			// around the issue.
+			// Interestingly, IE 10 & older don't seem to have the issue.
+			input = document.createElement( "input" );
+			input.setAttribute( "name", "" );
+			el.appendChild( input );
+			if ( !el.querySelectorAll( "[name='']" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
+					whitespace + "*(?:''|\"\")" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !el.querySelectorAll( ":checked" ).length ) {
+				rbuggyQSA.push( ":checked" );
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibling-combinator selector` fails
+			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push( ".#.+[+~]" );
+			}
+
+			// Support: Firefox <=3.6 - 5 only
+			// Old Firefox doesn't throw on a badly-escaped identifier.
+			el.querySelectorAll( "\\\f" );
+			rbuggyQSA.push( "[\\r\\n\\f]" );
+		} );
+
+		assert( function( el ) {
+			el.innerHTML = "<a href='' disabled='disabled'></a>" +
+				"<select disabled='disabled'><option/></select>";
+
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement( "input" );
+			input.setAttribute( "type", "hidden" );
+			el.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( el.querySelectorAll( "[name=d]" ).length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: IE9-11+
+			// IE's :disabled selector does not pick up the children of disabled fieldsets
+			docElem.appendChild( el ).disabled = true;
+			if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: Opera 10 - 11 only
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			el.querySelectorAll( "*,:x" );
+			rbuggyQSA.push( ",.*:" );
+		} );
+	}
+
+	if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector ) ) ) ) {
+
+		assert( function( el ) {
+
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( el, "*" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( el, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		} );
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			) );
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( ( b = b.parentNode ) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		// Support: IE 11+, Edge 17 - 18+
+		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+		// two documents; shallow comparisons work.
+		// eslint-disable-next-line eqeqeq
+		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
+
+			// Choose the first element that is related to our preferred document
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( a == document || a.ownerDocument == preferredDoc &&
+				contains( preferredDoc, a ) ) {
+				return -1;
+			}
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( b == document || b.ownerDocument == preferredDoc &&
+				contains( preferredDoc, b ) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			return a == document ? -1 :
+				b == document ? 1 :
+				/* eslint-enable eqeqeq */
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( ( cur = cur.parentNode ) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( ( cur = cur.parentNode ) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[ i ] === bp[ i ] ) {
+			i++;
+		}
+
+		return i ?
+
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[ i ], bp[ i ] ) :
+
+			// Otherwise nodes in our document sort first
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			ap[ i ] == preferredDoc ? -1 :
+			bp[ i ] == preferredDoc ? 1 :
+			/* eslint-enable eqeqeq */
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	setDocument( elem );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!nonnativeSelectorCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+
+				// As well, disconnected nodes are said to be in a document
+				// fragment in IE 9
+				elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch ( e ) {
+			nonnativeSelectorCache( expr, true );
+		}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+
+	// Set document vars if needed
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( context.ownerDocument || context ) != document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+
+	// Set document vars if needed
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( elem.ownerDocument || elem ) != document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			( val = elem.getAttributeNode( name ) ) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.escape = function( sel ) {
+	return ( sel + "" ).replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( ( elem = results[ i++ ] ) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+
+		// If no nodeType, this is expected to be an array
+		while ( ( node = elem[ i++ ] ) ) {
+
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
+				match[ 5 ] || "" ).replace( runescape, funescape );
+
+			if ( match[ 2 ] === "~=" ) {
+				match[ 3 ] = " " + match[ 3 ] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[ 1 ] = match[ 1 ].toLowerCase();
+
+			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
+
+				// nth-* requires argument
+				if ( !match[ 3 ] ) {
+					Sizzle.error( match[ 0 ] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[ 4 ] = +( match[ 4 ] ?
+					match[ 5 ] + ( match[ 6 ] || 1 ) :
+					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
+				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
+
+				// other types prohibit arguments
+			} else if ( match[ 3 ] ) {
+				Sizzle.error( match[ 0 ] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[ 6 ] && match[ 2 ];
+
+			if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[ 3 ] ) {
+				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+
+				// Get excess from tokenize (recursively)
+				( excess = tokenize( unquoted, true ) ) &&
+
+				// advance to the next closing parenthesis
+				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
+
+				// excess is a negative index
+				match[ 0 ] = match[ 0 ].slice( 0, excess );
+				match[ 2 ] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() {
+					return true;
+				} :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				( pattern = new RegExp( "(^|" + whitespace +
+					")" + className + "(" + whitespace + "|$)" ) ) && classCache(
+						className, function( elem ) {
+							return pattern.test(
+								typeof elem.className === "string" && elem.className ||
+								typeof elem.getAttribute !== "undefined" &&
+									elem.getAttribute( "class" ) ||
+								""
+							);
+				} );
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				/* eslint-disable max-len */
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+				/* eslint-enable max-len */
+
+			};
+		},
+
+		"CHILD": function( type, what, _argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, _context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( ( node = node[ dir ] ) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								( outerCache[ node.uniqueID ] = {} );
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( ( node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+
+							// Use previously-cached element index if available
+							if ( useCache ) {
+
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									( outerCache[ node.uniqueID ] = {} );
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+
+								// Use the same loop as above to seek `elem` from the start
+								while ( ( node = ++nodeIndex && node && node[ dir ] ||
+									( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] ||
+												( node[ expando ] = {} );
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												( outerCache[ node.uniqueID ] = {} );
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction( function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[ i ] );
+							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
+						}
+					} ) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+
+		// Potentially complex pseudos
+		"not": markFunction( function( selector ) {
+
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction( function( seed, matches, _context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( ( elem = unmatched[ i ] ) ) {
+							seed[ i ] = !( matches[ i ] = elem );
+						}
+					}
+				} ) :
+				function( elem, _context, xml ) {
+					input[ 0 ] = elem;
+					matcher( input, null, xml, results );
+
+					// Don't keep the element (issue #299)
+					input[ 0 ] = null;
+					return !results.pop();
+				};
+		} ),
+
+		"has": markFunction( function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		} ),
+
+		"contains": markFunction( function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
+			};
+		} ),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+
+			// lang value must be a valid identifier
+			if ( !ridentifier.test( lang || "" ) ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( ( elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
+				return false;
+			};
+		} ),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement &&
+				( !document.hasFocus || document.hasFocus() ) &&
+				!!( elem.type || elem.href || ~elem.tabIndex );
+		},
+
+		// Boolean properties
+		"enabled": createDisabledPseudo( false ),
+		"disabled": createDisabledPseudo( true ),
+
+		"checked": function( elem ) {
+
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return ( nodeName === "input" && !!elem.checked ) ||
+				( nodeName === "option" && !!elem.selected );
+		},
+
+		"selected": function( elem ) {
+
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				// eslint-disable-next-line no-unused-expressions
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos[ "empty" ]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( ( attr = elem.getAttribute( "type" ) ) == null ||
+					attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo( function() {
+			return [ 0 ];
+		} ),
+
+		"last": createPositionalPseudo( function( _matchIndexes, length ) {
+			return [ length - 1 ];
+		} ),
+
+		"eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		} ),
+
+		"even": createPositionalPseudo( function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"odd": createPositionalPseudo( function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+			var i = argument < 0 ?
+				argument + length :
+				argument > length ?
+					length :
+					argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} )
+	}
+};
+
+Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
+			if ( match ) {
+
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[ 0 ].length ) || soFar;
+			}
+			groups.push( ( tokens = [] ) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( ( match = rcombinators.exec( soFar ) ) ) {
+			matched = match.shift();
+			tokens.push( {
+				value: matched,
+
+				// Cast descendant combinators to space
+				type: match[ 0 ].replace( rtrim, " " )
+			} );
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
+				( match = preFilters[ type ]( match ) ) ) ) {
+				matched = match.shift();
+				tokens.push( {
+					value: matched,
+					type: type,
+					matches: match
+				} );
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[ i ].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		skip = combinator.next,
+		key = skip || dir,
+		checkNonElements = base && key === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( ( elem = elem[ dir ] ) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+			return false;
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( ( elem = elem[ dir ] ) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( ( elem = elem[ dir ] ) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] ||
+							( outerCache[ elem.uniqueID ] = {} );
+
+						if ( skip && skip === elem.nodeName.toLowerCase() ) {
+							elem = elem[ dir ] || elem;
+						} else if ( ( oldCache = uniqueCache[ key ] ) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return ( newCache[ 2 ] = oldCache[ 2 ] );
+						} else {
+
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ key ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+			return false;
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[ i ]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[ 0 ];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[ i ], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( ( elem = unmatched[ i ] ) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction( function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts(
+				selector || "*",
+				context.nodeType ? [ context ] : context,
+				[]
+			),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( ( elem = temp[ i ] ) ) {
+					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( ( elem = matcherOut[ i ] ) ) {
+
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( ( matcherIn[ i ] = elem ) );
+						}
+					}
+					postFinder( null, ( matcherOut = [] ), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( ( elem = matcherOut[ i ] ) &&
+						( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
+
+						seed[ temp ] = !( results[ temp ] = elem );
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	} );
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
+		implicitRelative = leadingRelative || Expr.relative[ " " ],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				( checkContext = context ).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
+			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
+		} else {
+			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[ j ].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+
+					// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+					tokens
+						.slice( 0, i - 1 )
+						.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
+
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
+				len = elems.length;
+
+			if ( outermost ) {
+
+				// Support: IE 11+, Edge 17 - 18+
+				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+				// two documents; shallow comparisons work.
+				// eslint-disable-next-line eqeqeq
+				outermostContext = context == document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+
+					// Support: IE 11+, Edge 17 - 18+
+					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+					// two documents; shallow comparisons work.
+					// eslint-disable-next-line eqeqeq
+					if ( !context && elem.ownerDocument != document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( ( matcher = elementMatchers[ j++ ] ) ) {
+						if ( matcher( elem, context || document, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+
+					// They will have gone through all possible matchers
+					if ( ( elem = !matcher && elem ) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( ( matcher = setMatchers[ j++ ] ) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
+								setMatched[ i ] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[ i ] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache(
+			selector,
+			matcherFromGroupMatchers( elementMatchers, setMatchers )
+		);
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
+		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
+			context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
+
+			context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
+				.replace( runescape, funescape ), context ) || [] )[ 0 ];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[ i ];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ ( type = token.type ) ] ) {
+				break;
+			}
+			if ( ( find = Expr.find[ type ] ) ) {
+
+				// Search, expanding context for leading sibling combinators
+				if ( ( seed = find(
+					token.matches[ 0 ].replace( runescape, funescape ),
+					rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
+						context
+				) ) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert( function( el ) {
+
+	// Should return 1, but returns 4 (following)
+	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
+} );
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert( function( el ) {
+	el.innerHTML = "<a href='#'></a>";
+	return el.firstChild.getAttribute( "href" ) === "#";
+} ) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	} );
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert( function( el ) {
+	el.innerHTML = "<input/>";
+	el.firstChild.setAttribute( "value", "" );
+	return el.firstChild.getAttribute( "value" ) === "";
+} ) ) {
+	addHandle( "value", function( elem, _name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	} );
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert( function( el ) {
+	return el.getAttribute( "disabled" ) == null;
+} ) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+				( val = elem.getAttributeNode( name ) ) && val.specified ?
+					val.value :
+					null;
+		}
+	} );
+}
+
+return Sizzle;
+
+} )( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+	}
+
+	// Single element
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+	}
+
+	// Arraylike of elements (jQuery, arguments, Array)
+	if ( typeof qualifier !== "string" ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+		} );
+	}
+
+	// Filtered directly for both simple and complex selectors
+	return jQuery.filter( qualifier, elements, not );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	if ( elems.length === 1 && elem.nodeType === 1 ) {
+		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+	}
+
+	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+		return elem.nodeType === 1;
+	} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i, ret,
+			len = this.length,
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		ret = this.pushStack( [] );
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	// Shortcut simple #id case for speed
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Method init() accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[ 0 ] === "<" &&
+				selector[ selector.length - 1 ] === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					if ( elem ) {
+
+						// Inject the element directly into the jQuery object
+						this[ 0 ] = elem;
+						this.length = 1;
+					}
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( isFunction( selector ) ) {
+			return root.ready !== undefined ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter( function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			targets = typeof selectors !== "string" && jQuery( selectors );
+
+		// Positional selectors never match, since there's no _selection_ context
+		if ( !rneedsContext.test( selectors ) ) {
+			for ( ; i < l; i++ ) {
+				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+					// Always skip document fragments
+					if ( cur.nodeType < 11 && ( targets ?
+						targets.index( cur ) > -1 :
+
+						// Don't pass non-elements to Sizzle
+						cur.nodeType === 1 &&
+							jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+						matched.push( cur );
+						break;
+					}
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, _i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, _i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, _i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+		if ( elem.contentDocument != null &&
+
+			// Support: IE 11+
+			// <object> elements with no `data` attribute has an object
+			// `contentDocument` with a `null` prototype.
+			getProto( elem.contentDocument ) ) {
+
+			return elem.contentDocument;
+		}
+
+		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+		// Treat the template element as a regular one in browsers that
+		// don't support it.
+		if ( nodeName( elem, "template" ) ) {
+			elem = elem.content || elem;
+		}
+
+		return jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.uniqueSort( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = locked || options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = queue = [];
+				if ( !memory && !firing ) {
+					list = memory = "";
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+function Identity( v ) {
+	return v;
+}
+function Thrower( ex ) {
+	throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+	var method;
+
+	try {
+
+		// Check for promise aspect first to privilege synchronous behavior
+		if ( value && isFunction( ( method = value.promise ) ) ) {
+			method.call( value ).done( resolve ).fail( reject );
+
+		// Other thenables
+		} else if ( value && isFunction( ( method = value.then ) ) ) {
+			method.call( value, resolve, reject );
+
+		// Other non-thenables
+		} else {
+
+			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+			// * false: [ value ].slice( 0 ) => resolve( value )
+			// * true: [ value ].slice( 1 ) => resolve()
+			resolve.apply( undefined, [ value ].slice( noValue ) );
+		}
+
+	// For Promises/A+, convert exceptions into rejections
+	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+	// Deferred#then to conditionally suppress rejection.
+	} catch ( value ) {
+
+		// Support: Android 4.0 only
+		// Strict mode functions invoked without .call/.apply get global-object context
+		reject.apply( undefined, [ value ] );
+	}
+}
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, callbacks,
+				// ... .then handlers, argument index, [final state]
+				[ "notify", "progress", jQuery.Callbacks( "memory" ),
+					jQuery.Callbacks( "memory" ), 2 ],
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				"catch": function( fn ) {
+					return promise.then( null, fn );
+				},
+
+				// Keep pipe for back-compat
+				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( _i, tuple ) {
+
+							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
+							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+							// deferred.progress(function() { bind to newDefer or newDefer.notify })
+							// deferred.done(function() { bind to newDefer or newDefer.resolve })
+							// deferred.fail(function() { bind to newDefer or newDefer.reject })
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+				then: function( onFulfilled, onRejected, onProgress ) {
+					var maxDepth = 0;
+					function resolve( depth, deferred, handler, special ) {
+						return function() {
+							var that = this,
+								args = arguments,
+								mightThrow = function() {
+									var returned, then;
+
+									// Support: Promises/A+ section 2.3.3.3.3
+									// https://promisesaplus.com/#point-59
+									// Ignore double-resolution attempts
+									if ( depth < maxDepth ) {
+										return;
+									}
+
+									returned = handler.apply( that, args );
+
+									// Support: Promises/A+ section 2.3.1
+									// https://promisesaplus.com/#point-48
+									if ( returned === deferred.promise() ) {
+										throw new TypeError( "Thenable self-resolution" );
+									}
+
+									// Support: Promises/A+ sections 2.3.3.1, 3.5
+									// https://promisesaplus.com/#point-54
+									// https://promisesaplus.com/#point-75
+									// Retrieve `then` only once
+									then = returned &&
+
+										// Support: Promises/A+ section 2.3.4
+										// https://promisesaplus.com/#point-64
+										// Only check objects and functions for thenability
+										( typeof returned === "object" ||
+											typeof returned === "function" ) &&
+										returned.then;
+
+									// Handle a returned thenable
+									if ( isFunction( then ) ) {
+
+										// Special processors (notify) just wait for resolution
+										if ( special ) {
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special )
+											);
+
+										// Normal processors (resolve) also hook into progress
+										} else {
+
+											// ...and disregard older resolution values
+											maxDepth++;
+
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special ),
+												resolve( maxDepth, deferred, Identity,
+													deferred.notifyWith )
+											);
+										}
+
+									// Handle all other returned values
+									} else {
+
+										// Only substitute handlers pass on context
+										// and multiple values (non-spec behavior)
+										if ( handler !== Identity ) {
+											that = undefined;
+											args = [ returned ];
+										}
+
+										// Process the value(s)
+										// Default process is resolve
+										( special || deferred.resolveWith )( that, args );
+									}
+								},
+
+								// Only normal processors (resolve) catch and reject exceptions
+								process = special ?
+									mightThrow :
+									function() {
+										try {
+											mightThrow();
+										} catch ( e ) {
+
+											if ( jQuery.Deferred.exceptionHook ) {
+												jQuery.Deferred.exceptionHook( e,
+													process.stackTrace );
+											}
+
+											// Support: Promises/A+ section 2.3.3.3.4.1
+											// https://promisesaplus.com/#point-61
+											// Ignore post-resolution exceptions
+											if ( depth + 1 >= maxDepth ) {
+
+												// Only substitute handlers pass on context
+												// and multiple values (non-spec behavior)
+												if ( handler !== Thrower ) {
+													that = undefined;
+													args = [ e ];
+												}
+
+												deferred.rejectWith( that, args );
+											}
+										}
+									};
+
+							// Support: Promises/A+ section 2.3.3.3.1
+							// https://promisesaplus.com/#point-57
+							// Re-resolve promises immediately to dodge false rejection from
+							// subsequent errors
+							if ( depth ) {
+								process();
+							} else {
+
+								// Call an optional hook to record the stack, in case of exception
+								// since it's otherwise lost when execution goes async
+								if ( jQuery.Deferred.getStackHook ) {
+									process.stackTrace = jQuery.Deferred.getStackHook();
+								}
+								window.setTimeout( process );
+							}
+						};
+					}
+
+					return jQuery.Deferred( function( newDefer ) {
+
+						// progress_handlers.add( ... )
+						tuples[ 0 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onProgress ) ?
+									onProgress :
+									Identity,
+								newDefer.notifyWith
+							)
+						);
+
+						// fulfilled_handlers.add( ... )
+						tuples[ 1 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onFulfilled ) ?
+									onFulfilled :
+									Identity
+							)
+						);
+
+						// rejected_handlers.add( ... )
+						tuples[ 2 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onRejected ) ?
+									onRejected :
+									Thrower
+							)
+						);
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 5 ];
+
+			// promise.progress = list.add
+			// promise.done = list.add
+			// promise.fail = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(
+					function() {
+
+						// state = "resolved" (i.e., fulfilled)
+						// state = "rejected"
+						state = stateString;
+					},
+
+					// rejected_callbacks.disable
+					// fulfilled_callbacks.disable
+					tuples[ 3 - i ][ 2 ].disable,
+
+					// rejected_handlers.disable
+					// fulfilled_handlers.disable
+					tuples[ 3 - i ][ 3 ].disable,
+
+					// progress_callbacks.lock
+					tuples[ 0 ][ 2 ].lock,
+
+					// progress_handlers.lock
+					tuples[ 0 ][ 3 ].lock
+				);
+			}
+
+			// progress_handlers.fire
+			// fulfilled_handlers.fire
+			// rejected_handlers.fire
+			list.add( tuple[ 3 ].fire );
+
+			// deferred.notify = function() { deferred.notifyWith(...) }
+			// deferred.resolve = function() { deferred.resolveWith(...) }
+			// deferred.reject = function() { deferred.rejectWith(...) }
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+				return this;
+			};
+
+			// deferred.notifyWith = list.fireWith
+			// deferred.resolveWith = list.fireWith
+			// deferred.rejectWith = list.fireWith
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( singleValue ) {
+		var
+
+			// count of uncompleted subordinates
+			remaining = arguments.length,
+
+			// count of unprocessed arguments
+			i = remaining,
+
+			// subordinate fulfillment data
+			resolveContexts = Array( i ),
+			resolveValues = slice.call( arguments ),
+
+			// the master Deferred
+			master = jQuery.Deferred(),
+
+			// subordinate callback factory
+			updateFunc = function( i ) {
+				return function( value ) {
+					resolveContexts[ i ] = this;
+					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( !( --remaining ) ) {
+						master.resolveWith( resolveContexts, resolveValues );
+					}
+				};
+			};
+
+		// Single- and empty arguments are adopted like Promise.resolve
+		if ( remaining <= 1 ) {
+			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+				!remaining );
+
+			// Use .then() to unwrap secondary thenables (cf. gh-3000)
+			if ( master.state() === "pending" ||
+				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+				return master.then();
+			}
+		}
+
+		// Multiple arguments are aggregated like Promise.all array elements
+		while ( i-- ) {
+			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+		}
+
+		return master.promise();
+	}
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+	// Support: IE 8 - 9 only
+	// Console exists when dev tools are open, which can happen at any time
+	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+	}
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+	window.setTimeout( function() {
+		throw error;
+	} );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+	readyList
+		.then( fn )
+
+		// Wrap jQuery.readyException in a function so that the lookup
+		// happens at the time of error handling instead of callback
+		// registration.
+		.catch( function( error ) {
+			jQuery.readyException( error );
+		} );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+	}
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed );
+	window.removeEventListener( "load", completed );
+	jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+	// Handle it asynchronously to allow scripts the opportunity to delay ready
+	window.setTimeout( jQuery.ready );
+
+} else {
+
+	// Use the handy event callback
+	document.addEventListener( "DOMContentLoaded", completed );
+
+	// A fallback to window.onload, that will always work
+	window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( toType( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, _key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn(
+					elems[ i ], key, raw ?
+					value :
+					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	if ( chainable ) {
+		return elems;
+	}
+
+	// Gets
+	if ( bulk ) {
+		return fn.call( elems );
+	}
+
+	return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+
+
+// Matches dashed string for camelizing
+var rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([a-z])/g;
+
+// Used by camelCase as callback to replace()
+function fcamelCase( _all, letter ) {
+	return letter.toUpperCase();
+}
+
+// Convert dashed to camelCase; used by the css and data modules
+// Support: IE <=9 - 11, Edge 12 - 15
+// Microsoft forgot to hump their vendor prefix (#9572)
+function camelCase( string ) {
+	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+}
+var acceptData = function( owner ) {
+
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+	cache: function( owner ) {
+
+		// Check if the owner object already has a cache
+		var value = owner[ this.expando ];
+
+		// If not, create one
+		if ( !value ) {
+			value = {};
+
+			// We can accept data for non-element nodes in modern browsers,
+			// but we should not, see #8335.
+			// Always return an empty object.
+			if ( acceptData( owner ) ) {
+
+				// If it is a node unlikely to be stringify-ed or looped over
+				// use plain assignment
+				if ( owner.nodeType ) {
+					owner[ this.expando ] = value;
+
+				// Otherwise secure it in a non-enumerable property
+				// configurable must be true to allow the property to be
+				// deleted when data is removed
+				} else {
+					Object.defineProperty( owner, this.expando, {
+						value: value,
+						configurable: true
+					} );
+				}
+			}
+		}
+
+		return value;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			cache = this.cache( owner );
+
+		// Handle: [ owner, key, value ] args
+		// Always use camelCase key (gh-2257)
+		if ( typeof data === "string" ) {
+			cache[ camelCase( data ) ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ camelCase( prop ) ] = data[ prop ];
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		return key === undefined ?
+			this.cache( owner ) :
+
+			// Always use camelCase key (gh-2257)
+			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
+	},
+	access: function( owner, key, value ) {
+
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+			return this.get( owner, key );
+		}
+
+		// When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i,
+			cache = owner[ this.expando ];
+
+		if ( cache === undefined ) {
+			return;
+		}
+
+		if ( key !== undefined ) {
+
+			// Support array or space separated string of keys
+			if ( Array.isArray( key ) ) {
+
+				// If key is an array of keys...
+				// We always set camelCase keys, so remove that.
+				key = key.map( camelCase );
+			} else {
+				key = camelCase( key );
+
+				// If a key with the spaces exists, use it.
+				// Otherwise, create an array by matching non-whitespace
+				key = key in cache ?
+					[ key ] :
+					( key.match( rnothtmlwhite ) || [] );
+			}
+
+			i = key.length;
+
+			while ( i-- ) {
+				delete cache[ key[ i ] ];
+			}
+		}
+
+		// Remove the expando if there's no more data
+		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+			// Support: Chrome <=35 - 45
+			// Webkit & Blink performance suffers when deleting properties
+			// from DOM nodes, so set to undefined instead
+			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+			if ( owner.nodeType ) {
+				owner[ this.expando ] = undefined;
+			} else {
+				delete owner[ this.expando ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		var cache = owner[ this.expando ];
+		return cache !== undefined && !jQuery.isEmptyObject( cache );
+	}
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+	if ( data === "true" ) {
+		return true;
+	}
+
+	if ( data === "false" ) {
+		return false;
+	}
+
+	if ( data === "null" ) {
+		return null;
+	}
+
+	// Only convert to a number if it doesn't change the string
+	if ( data === +data + "" ) {
+		return +data;
+	}
+
+	if ( rbrace.test( data ) ) {
+		return JSON.parse( data );
+	}
+
+	return data;
+}
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = getData( data );
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			dataUser.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend( {
+	hasData: function( elem ) {
+		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return dataUser.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		dataUser.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to dataPriv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return dataPriv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		dataPriv.remove( elem, name );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = dataUser.get( elem );
+
+				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE 11 only
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					dataPriv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				dataUser.set( this, key );
+			} );
+		}
+
+		return access( this, function( value ) {
+			var data;
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+
+				// Attempt to get data from the cache
+				// The key will always be camelCased in Data
+				data = dataUser.get( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			this.each( function() {
+
+				// We always store the camelCased key
+				dataUser.set( this, key, value );
+			} );
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			dataUser.remove( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = dataPriv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || Array.isArray( data ) ) {
+					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				dataPriv.remove( elem, [ type + "queue", key ] );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var documentElement = document.documentElement;
+
+
+
+	var isAttached = function( elem ) {
+			return jQuery.contains( elem.ownerDocument, elem );
+		},
+		composed = { composed: true };
+
+	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
+	// Check attachment across shadow DOM boundaries when possible (gh-3504)
+	// Support: iOS 10.0-10.2 only
+	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
+	// leading to errors. We need to check for `getRootNode`.
+	if ( documentElement.getRootNode ) {
+		isAttached = function( elem ) {
+			return jQuery.contains( elem.ownerDocument, elem ) ||
+				elem.getRootNode( composed ) === elem.ownerDocument;
+		};
+	}
+var isHiddenWithinTree = function( elem, el ) {
+
+		// isHiddenWithinTree might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+
+		// Inline style trumps all
+		return elem.style.display === "none" ||
+			elem.style.display === "" &&
+
+			// Otherwise, check computed style
+			// Support: Firefox <=43 - 45
+			// Disconnected elements can have computed display: none, so first confirm that elem is
+			// in the document.
+			isAttached( elem ) &&
+
+			jQuery.css( elem, "display" ) === "none";
+	};
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted, scale,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() {
+				return tween.cur();
+			} :
+			function() {
+				return jQuery.css( elem, prop, "" );
+			},
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = elem.nodeType &&
+			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Support: Firefox <=54
+		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
+		initial = initial / 2;
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		while ( maxIterations-- ) {
+
+			// Evaluate and update our best guess (doubling guesses that zero out).
+			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
+			jQuery.style( elem, prop, initialInUnit + unit );
+			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
+				maxIterations = 0;
+			}
+			initialInUnit = initialInUnit / scale;
+
+		}
+
+		initialInUnit = initialInUnit * 2;
+		jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+	var temp,
+		doc = elem.ownerDocument,
+		nodeName = elem.nodeName,
+		display = defaultDisplayMap[ nodeName ];
+
+	if ( display ) {
+		return display;
+	}
+
+	temp = doc.body.appendChild( doc.createElement( nodeName ) );
+	display = jQuery.css( temp, "display" );
+
+	temp.parentNode.removeChild( temp );
+
+	if ( display === "none" ) {
+		display = "block";
+	}
+	defaultDisplayMap[ nodeName ] = display;
+
+	return display;
+}
+
+function showHide( elements, show ) {
+	var display, elem,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	// Determine new display value for elements that need to change
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		display = elem.style.display;
+		if ( show ) {
+
+			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+			// check is required in this first loop unless we have a nonempty display value (either
+			// inline or about-to-be-restored)
+			if ( display === "none" ) {
+				values[ index ] = dataPriv.get( elem, "display" ) || null;
+				if ( !values[ index ] ) {
+					elem.style.display = "";
+				}
+			}
+			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+				values[ index ] = getDefaultDisplay( elem );
+			}
+		} else {
+			if ( display !== "none" ) {
+				values[ index ] = "none";
+
+				// Remember what we're overwriting
+				dataPriv.set( elem, "display", display );
+			}
+		}
+	}
+
+	// Set the display of the elements in a second loop to avoid constant reflow
+	for ( index = 0; index < length; index++ ) {
+		if ( values[ index ] != null ) {
+			elements[ index ].style.display = values[ index ];
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend( {
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHiddenWithinTree( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
+
+var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
+
+
+
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0 - 4.3 only
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Android <=4.1 only
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE <=11 only
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+	// Support: IE <=9 only
+	// IE <=9 replaces <option> tags with their contents when inserted outside of
+	// the select element.
+	div.innerHTML = "<option></option>";
+	support.option = !!div.lastChild;
+} )();
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+	// XHTML parsers do not magically insert elements in the
+	// same way that tag soup parsers do. So we cannot shorten
+	// this by omitting <tbody> or other required elements.
+	thead: [ 1, "<table>", "</table>" ],
+	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+	_default: [ 0, "", "" ]
+};
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: IE <=9 only
+if ( !support.option ) {
+	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
+}
+
+
+function getAll( context, tag ) {
+
+	// Support: IE <=9 - 11 only
+	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
+	var ret;
+
+	if ( typeof context.getElementsByTagName !== "undefined" ) {
+		ret = context.getElementsByTagName( tag || "*" );
+
+	} else if ( typeof context.querySelectorAll !== "undefined" ) {
+		ret = context.querySelectorAll( tag || "*" );
+
+	} else {
+		ret = [];
+	}
+
+	if ( tag === undefined || tag && nodeName( context, tag ) ) {
+		return jQuery.merge( [ context ], ret );
+	}
+
+	return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		dataPriv.set(
+			elems[ i ],
+			"globalEval",
+			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var elem, tmp, tag, wrap, attached, j,
+		fragment = context.createDocumentFragment(),
+		nodes = [],
+		i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( toType( elem ) === "object" ) {
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Remember the top-level container
+				tmp = fragment.firstChild;
+
+				// Ensure the created nodes are orphaned (#12392)
+				tmp.textContent = "";
+			}
+		}
+	}
+
+	// Remove wrapper from fragment
+	fragment.textContent = "";
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+			continue;
+		}
+
+		attached = isAttached( elem );
+
+		// Append to fragment
+		tmp = getAll( fragment.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( attached ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	return fragment;
+}
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE <=9 - 11+
+// focus() and blur() are asynchronous, except when they are no-op.
+// So expect focus to be synchronous when the element is already active,
+// and blur to be synchronous when the element is not already active.
+// (focus and blur are always synchronous in other supported browsers,
+// this just defines when we can count on it).
+function expectSync( elem, type ) {
+	return ( elem === safeActiveElement() ) === ( type === "focus" );
+}
+
+// Support: IE <=9 only
+// Accessing document.activeElement can throw unexpectedly
+// https://bugs.jquery.com/ticket/13393
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.get( elem );
+
+		// Only attach events to objects that accept data
+		if ( !acceptData( elem ) ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Ensure that invalid selectors throw exceptions at attach time
+		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
+		if ( selector ) {
+			jQuery.find.matchesSelector( documentElement, selector );
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = Object.create( null );
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove data and the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			dataPriv.remove( elem, "handle events" );
+		}
+	},
+
+	dispatch: function( nativeEvent ) {
+
+		var i, j, ret, matched, handleObj, handlerQueue,
+			args = new Array( arguments.length ),
+
+			// Make a writable jQuery.Event from the native event object
+			event = jQuery.event.fix( nativeEvent ),
+
+			handlers = (
+					dataPriv.get( this, "events" ) || Object.create( null )
+				)[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+
+		for ( i = 1; i < arguments.length; i++ ) {
+			args[ i ] = arguments[ i ];
+		}
+
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// If the event is namespaced, then each handler is only invoked if it is
+				// specially universal or its namespaces are a superset of the event's.
+				if ( !event.rnamespace || handleObj.namespace === false ||
+					event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, handleObj, sel, matchedHandlers, matchedSelectors,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		if ( delegateCount &&
+
+			// Support: IE <=9
+			// Black-hole SVG <use> instance trees (trac-13180)
+			cur.nodeType &&
+
+			// Support: Firefox <=42
+			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+			// Support: IE 11 only
+			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+			!( event.type === "click" && event.button >= 1 ) ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+					matchedHandlers = [];
+					matchedSelectors = {};
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matchedSelectors[ sel ] === undefined ) {
+							matchedSelectors[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matchedSelectors[ sel ] ) {
+							matchedHandlers.push( handleObj );
+						}
+					}
+					if ( matchedHandlers.length ) {
+						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		cur = this;
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	addProp: function( name, hook ) {
+		Object.defineProperty( jQuery.Event.prototype, name, {
+			enumerable: true,
+			configurable: true,
+
+			get: isFunction( hook ) ?
+				function() {
+					if ( this.originalEvent ) {
+							return hook( this.originalEvent );
+					}
+				} :
+				function() {
+					if ( this.originalEvent ) {
+							return this.originalEvent[ name ];
+					}
+				},
+
+			set: function( value ) {
+				Object.defineProperty( this, name, {
+					enumerable: true,
+					configurable: true,
+					writable: true,
+					value: value
+				} );
+			}
+		} );
+	},
+
+	fix: function( originalEvent ) {
+		return originalEvent[ jQuery.expando ] ?
+			originalEvent :
+			new jQuery.Event( originalEvent );
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		click: {
+
+			// Utilize native event to ensure correct state for checkable inputs
+			setup: function( data ) {
+
+				// For mutual compressibility with _default, replace `this` access with a local var.
+				// `|| data` is dead code meant only to preserve the variable through minification.
+				var el = this || data;
+
+				// Claim the first handler
+				if ( rcheckableType.test( el.type ) &&
+					el.click && nodeName( el, "input" ) ) {
+
+					// dataPriv.set( el, "click", ... )
+					leverageNative( el, "click", returnTrue );
+				}
+
+				// Return false to allow normal processing in the caller
+				return false;
+			},
+			trigger: function( data ) {
+
+				// For mutual compressibility with _default, replace `this` access with a local var.
+				// `|| data` is dead code meant only to preserve the variable through minification.
+				var el = this || data;
+
+				// Force setup before triggering a click
+				if ( rcheckableType.test( el.type ) &&
+					el.click && nodeName( el, "input" ) ) {
+
+					leverageNative( el, "click" );
+				}
+
+				// Return non-false to allow normal event-path propagation
+				return true;
+			},
+
+			// For cross-browser consistency, suppress native .click() on links
+			// Also prevent it if we're currently inside a leveraged native-event stack
+			_default: function( event ) {
+				var target = event.target;
+				return rcheckableType.test( target.type ) &&
+					target.click && nodeName( target, "input" ) &&
+					dataPriv.get( target, "click" ) ||
+					nodeName( target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	}
+};
+
+// Ensure the presence of an event listener that handles manually-triggered
+// synthetic events by interrupting progress until reinvoked in response to
+// *native* events that it fires directly, ensuring that state changes have
+// already occurred before other listeners are invoked.
+function leverageNative( el, type, expectSync ) {
+
+	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
+	if ( !expectSync ) {
+		if ( dataPriv.get( el, type ) === undefined ) {
+			jQuery.event.add( el, type, returnTrue );
+		}
+		return;
+	}
+
+	// Register the controller as a special universal handler for all event namespaces
+	dataPriv.set( el, type, false );
+	jQuery.event.add( el, type, {
+		namespace: false,
+		handler: function( event ) {
+			var notAsync, result,
+				saved = dataPriv.get( this, type );
+
+			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
+
+				// Interrupt processing of the outer synthetic .trigger()ed event
+				// Saved data should be false in such cases, but might be a leftover capture object
+				// from an async native handler (gh-4350)
+				if ( !saved.length ) {
+
+					// Store arguments for use when handling the inner native event
+					// There will always be at least one argument (an event object), so this array
+					// will not be confused with a leftover capture object.
+					saved = slice.call( arguments );
+					dataPriv.set( this, type, saved );
+
+					// Trigger the native event and capture its result
+					// Support: IE <=9 - 11+
+					// focus() and blur() are asynchronous
+					notAsync = expectSync( this, type );
+					this[ type ]();
+					result = dataPriv.get( this, type );
+					if ( saved !== result || notAsync ) {
+						dataPriv.set( this, type, false );
+					} else {
+						result = {};
+					}
+					if ( saved !== result ) {
+
+						// Cancel the outer synthetic event
+						event.stopImmediatePropagation();
+						event.preventDefault();
+						return result.value;
+					}
+
+				// If this is an inner synthetic event for an event with a bubbling surrogate
+				// (focus or blur), assume that the surrogate already propagated from triggering the
+				// native event and prevent that from happening again here.
+				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
+				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
+				// less bad than duplication.
+				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
+					event.stopPropagation();
+				}
+
+			// If this is a native event triggered above, everything is now in order
+			// Fire an inner synthetic event with the original arguments
+			} else if ( saved.length ) {
+
+				// ...and capture the result
+				dataPriv.set( this, type, {
+					value: jQuery.event.trigger(
+
+						// Support: IE <=9 - 11+
+						// Extend with the prototype to reset the above stopImmediatePropagation()
+						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
+						saved.slice( 1 ),
+						this
+					)
+				} );
+
+				// Abort handling of the native event
+				event.stopImmediatePropagation();
+			}
+		}
+	} );
+}
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+	// This "if" is needed for plain objects
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: Android <=2.3 only
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+		// Create target properties
+		// Support: Safari <=6 - 7 only
+		// Target should not be a text node (#504, #13143)
+		this.target = ( src.target && src.target.nodeType === 3 ) ?
+			src.target.parentNode :
+			src.target;
+
+		this.currentTarget = src.currentTarget;
+		this.relatedTarget = src.relatedTarget;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || Date.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+	isSimulated: false,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+	altKey: true,
+	bubbles: true,
+	cancelable: true,
+	changedTouches: true,
+	ctrlKey: true,
+	detail: true,
+	eventPhase: true,
+	metaKey: true,
+	pageX: true,
+	pageY: true,
+	shiftKey: true,
+	view: true,
+	"char": true,
+	code: true,
+	charCode: true,
+	key: true,
+	keyCode: true,
+	button: true,
+	buttons: true,
+	clientX: true,
+	clientY: true,
+	offsetX: true,
+	offsetY: true,
+	pointerId: true,
+	pointerType: true,
+	screenX: true,
+	screenY: true,
+	targetTouches: true,
+	toElement: true,
+	touches: true,
+
+	which: function( event ) {
+		var button = event.button;
+
+		// Add which for key events
+		if ( event.which == null && rkeyEvent.test( event.type ) ) {
+			return event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+			if ( button & 1 ) {
+				return 1;
+			}
+
+			if ( button & 2 ) {
+				return 3;
+			}
+
+			if ( button & 4 ) {
+				return 2;
+			}
+
+			return 0;
+		}
+
+		return event.which;
+	}
+}, jQuery.event.addProp );
+
+jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
+	jQuery.event.special[ type ] = {
+
+		// Utilize native event if possible so blur/focus sequence is correct
+		setup: function() {
+
+			// Claim the first handler
+			// dataPriv.set( this, "focus", ... )
+			// dataPriv.set( this, "blur", ... )
+			leverageNative( this, type, expectSync );
+
+			// Return false to allow normal processing in the caller
+			return false;
+		},
+		trigger: function() {
+
+			// Force setup before trigger
+			leverageNative( this, type );
+
+			// Return non-false to allow normal event-path propagation
+			return true;
+		},
+
+		delegateType: delegateType
+	};
+} );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+jQuery.fn.extend( {
+
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	}
+} );
+
+
+var
+
+	// Support: IE <=10 - 11, Edge 12 - 13 only
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+	if ( nodeName( elem, "table" ) &&
+		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
+	}
+
+	return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
+		elem.type = elem.type.slice( 5 );
+	} else {
+		elem.removeAttribute( "type" );
+	}
+
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( dataPriv.hasData( src ) ) {
+		pdataOld = dataPriv.get( src );
+		events = pdataOld.events;
+
+		if ( events ) {
+			dataPriv.remove( dest, "handle events" );
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( dataUser.hasData( src ) ) {
+		udataOld = dataUser.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		dataUser.set( dest, udataCur );
+	}
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = flat( args );
+
+	var fragment, first, scripts, hasScripts, node, doc,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		valueIsFunction = isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( valueIsFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( valueIsFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android <=4.0 only, PhantomJS 1 only
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!dataPriv.access( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl && !node.noModule ) {
+								jQuery._evalUrl( node.src, {
+									nonce: node.nonce || node.getAttribute( "nonce" )
+								}, doc );
+							}
+						} else {
+							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		nodes = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && isAttached( node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html;
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = isAttached( elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+			if ( acceptData( elem ) ) {
+				if ( ( data = elem[ dataPriv.expando ] ) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataPriv.expando ] = undefined;
+				}
+				if ( elem[ dataUser.expando ] ) {
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataUser.expando ] = undefined;
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each( function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				} );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: Android <=4.0 only, PhantomJS 1 only
+			// .get() because push.apply(_, arraylike) throws on ancient WebKit
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+var swap = function( elem, options, callback ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.call( elem );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
+
+
+
+( function() {
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computeStyleTests() {
+
+		// This is a singleton, we need to execute it only once
+		if ( !div ) {
+			return;
+		}
+
+		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
+			"margin-top:1px;padding:0;border:0";
+		div.style.cssText =
+			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"width:60%;top:1%";
+		documentElement.appendChild( container ).appendChild( div );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+
+		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
+
+		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.right = "60%";
+		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
+
+		// Support: IE 9 - 11 only
+		// Detect misreporting of content dimensions for box-sizing:border-box elements
+		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
+
+		// Support: IE 9 only
+		// Detect overflow:scroll screwiness (gh-3699)
+		// Support: Chrome <=64
+		// Don't get tricked when zoom affects offsetWidth (gh-4029)
+		div.style.position = "absolute";
+		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
+
+		documentElement.removeChild( container );
+
+		// Nullify the div so it wouldn't be stored in the memory and
+		// it will also be a sign that checks already performed
+		div = null;
+	}
+
+	function roundPixelMeasures( measure ) {
+		return Math.round( parseFloat( measure ) );
+	}
+
+	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
+		reliableTrDimensionsVal, reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE <=9 - 11 only
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	jQuery.extend( support, {
+		boxSizingReliable: function() {
+			computeStyleTests();
+			return boxSizingReliableVal;
+		},
+		pixelBoxStyles: function() {
+			computeStyleTests();
+			return pixelBoxStylesVal;
+		},
+		pixelPosition: function() {
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		reliableMarginLeft: function() {
+			computeStyleTests();
+			return reliableMarginLeftVal;
+		},
+		scrollboxSize: function() {
+			computeStyleTests();
+			return scrollboxSizeVal;
+		},
+
+		// Support: IE 9 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Behavior in IE 9 is more subtle than in newer versions & it passes
+		// some versions of this test; make sure not to make it pass there!
+		reliableTrDimensions: function() {
+			var table, tr, trChild, trStyle;
+			if ( reliableTrDimensionsVal == null ) {
+				table = document.createElement( "table" );
+				tr = document.createElement( "tr" );
+				trChild = document.createElement( "div" );
+
+				table.style.cssText = "position:absolute;left:-11111px";
+				tr.style.height = "1px";
+				trChild.style.height = "9px";
+
+				documentElement
+					.appendChild( table )
+					.appendChild( tr )
+					.appendChild( trChild );
+
+				trStyle = window.getComputedStyle( tr );
+				reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
+
+				documentElement.removeChild( table );
+			}
+			return reliableTrDimensionsVal;
+		}
+	} );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+
+		// Support: Firefox 51+
+		// Retrieving style before computed somehow
+		// fixes an issue with getting wrong values
+		// on detached elements
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+
+	// getPropertyValue is needed for:
+	//   .css('filter') (IE 9 only, #12537)
+	//   .css('--customProperty) (#3144)
+	if ( computed ) {
+		ret = computed.getPropertyValue( name ) || computed[ name ];
+
+		if ( ret === "" && !isAttached( elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// Android Browser returns percentage for some values,
+		// but width seems to be reliably pixels.
+		// This is against the CSSOM draft spec:
+		// https://drafts.csswg.org/cssom/#resolved-values
+		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+
+		// Support: IE <=9 - 11 only
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var cssPrefixes = [ "Webkit", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style,
+	vendorProps = {};
+
+// Return a vendor-prefixed property or undefined
+function vendorPropName( name ) {
+
+	// Check for vendor prefixed names
+	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
+function finalPropName( name ) {
+	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
+
+	if ( final ) {
+		return final;
+	}
+	if ( name in emptyStyle ) {
+		return name;
+	}
+	return vendorProps[ name ] = vendorPropName( name ) || name;
+}
+
+
+var
+
+	// Swappable if display is none or starts with table
+	// except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rcustomProp = /^--/,
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	};
+
+function setPositiveNumber( _elem, value, subtract ) {
+
+	// Any relative (+/-) values have already been
+	// normalized at this point
+	var matches = rcssNum.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+		value;
+}
+
+function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
+	var i = dimension === "width" ? 1 : 0,
+		extra = 0,
+		delta = 0;
+
+	// Adjustment may not be necessary
+	if ( box === ( isBorderBox ? "border" : "content" ) ) {
+		return 0;
+	}
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin
+		if ( box === "margin" ) {
+			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
+		}
+
+		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
+		if ( !isBorderBox ) {
+
+			// Add padding
+			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// For "border" or "margin", add border
+			if ( box !== "padding" ) {
+				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+
+			// But still keep track of it otherwise
+			} else {
+				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+
+		// If we get here with a border-box (content + padding + border), we're seeking "content" or
+		// "padding" or "margin"
+		} else {
+
+			// For "content", subtract padding
+			if ( box === "content" ) {
+				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// For "content" or "padding", subtract border
+			if ( box !== "margin" ) {
+				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	// Account for positive content-box scroll gutter when requested by providing computedVal
+	if ( !isBorderBox && computedVal >= 0 ) {
+
+		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
+		// Assuming integer scroll gutter, subtract the rest and round down
+		delta += Math.max( 0, Math.ceil(
+			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+			computedVal -
+			delta -
+			extra -
+			0.5
+
+		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
+		// Use an explicit zero to avoid NaN (gh-3964)
+		) ) || 0;
+	}
+
+	return delta;
+}
+
+function getWidthOrHeight( elem, dimension, extra ) {
+
+	// Start with computed style
+	var styles = getStyles( elem ),
+
+		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
+		// Fake content-box until we know it's needed to know the true value.
+		boxSizingNeeded = !support.boxSizingReliable() || extra,
+		isBorderBox = boxSizingNeeded &&
+			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+		valueIsBorderBox = isBorderBox,
+
+		val = curCSS( elem, dimension, styles ),
+		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
+
+	// Support: Firefox <=54
+	// Return a confounding non-pixel value or feign ignorance, as appropriate.
+	if ( rnumnonpx.test( val ) ) {
+		if ( !extra ) {
+			return val;
+		}
+		val = "auto";
+	}
+
+
+	// Support: IE 9 - 11 only
+	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
+	// In those cases, the computed value can be trusted to be border-box.
+	if ( ( !support.boxSizingReliable() && isBorderBox ||
+
+		// Support: IE 10 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
+		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
+
+		// Fall back to offsetWidth/offsetHeight when value is "auto"
+		// This happens for inline elements with no explicit setting (gh-3571)
+		val === "auto" ||
+
+		// Support: Android <=4.1 - 4.3 only
+		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
+		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
+
+		// Make sure the element is visible & connected
+		elem.getClientRects().length ) {
+
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
+		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
+		// retrieved value as a content box dimension.
+		valueIsBorderBox = offsetProp in elem;
+		if ( valueIsBorderBox ) {
+			val = elem[ offsetProp ];
+		}
+	}
+
+	// Normalize "" and auto
+	val = parseFloat( val ) || 0;
+
+	// Adjust for the element's box model
+	return ( val +
+		boxModelAdjustment(
+			elem,
+			dimension,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles,
+
+			// Provide the current computed size to request scroll gutter calculation (gh-3589)
+			val
+		)
+	) + "px";
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"gridArea": true,
+		"gridColumn": true,
+		"gridColumnEnd": true,
+		"gridColumnStart": true,
+		"gridRow": true,
+		"gridRowEnd": true,
+		"gridRowStart": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = camelCase( name ),
+			isCustomProp = rcustomProp.test( name ),
+			style = elem.style;
+
+		// Make sure that we're working with the right name. We don't
+		// want to query the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
+			// "px" to a few hardcoded values.
+			if ( type === "number" && !isCustomProp ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				if ( isCustomProp ) {
+					style.setProperty( name, value );
+				} else {
+					style[ name ] = value;
+				}
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = camelCase( name ),
+			isCustomProp = rcustomProp.test( name );
+
+		// Make sure that we're working with the right name. We don't
+		// want to modify the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( _i, dimension ) {
+	jQuery.cssHooks[ dimension ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+					// Support: Safari 8+
+					// Table columns in Safari have non-zero offsetWidth & zero
+					// getBoundingClientRect().width unless display is changed.
+					// Support: IE <=11 only
+					// Running getBoundingClientRect on a disconnected node
+					// in IE throws an error.
+					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, dimension, extra );
+						} ) :
+						getWidthOrHeight( elem, dimension, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = getStyles( elem ),
+
+				// Only read styles.position if the test has a chance to fail
+				// to avoid forcing a reflow.
+				scrollboxSizeBuggy = !support.scrollboxSize() &&
+					styles.position === "absolute",
+
+				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
+				boxSizingNeeded = scrollboxSizeBuggy || extra,
+				isBorderBox = boxSizingNeeded &&
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+				subtract = extra ?
+					boxModelAdjustment(
+						elem,
+						dimension,
+						extra,
+						isBorderBox,
+						styles
+					) :
+					0;
+
+			// Account for unreliable border-box dimensions by comparing offset* to computed and
+			// faking a content-box to get border and padding (gh-3699)
+			if ( isBorderBox && scrollboxSizeBuggy ) {
+				subtract -= Math.ceil(
+					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+					parseFloat( styles[ dimension ] ) -
+					boxModelAdjustment( elem, dimension, "border", false, styles ) -
+					0.5
+				);
+			}
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ dimension ] = value;
+				value = jQuery.css( elem, dimension );
+			}
+
+			return setPositiveNumber( elem, value, subtract );
+		}
+	};
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+				elem.getBoundingClientRect().left -
+					swap( elem, { marginLeft: 0 }, function() {
+						return elem.getBoundingClientRect().left;
+					} )
+				) + "px";
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( prefix !== "margin" ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( Array.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 && (
+					jQuery.cssHooks[ tween.prop ] ||
+					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, inProgress,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+function schedule() {
+	if ( inProgress ) {
+		if ( document.hidden === false && window.requestAnimationFrame ) {
+			window.requestAnimationFrame( schedule );
+		} else {
+			window.setTimeout( schedule, jQuery.fx.interval );
+		}
+
+		jQuery.fx.tick();
+	}
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = Date.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+		isBox = "width" in props || "height" in props,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHiddenWithinTree( elem ),
+		dataShow = dataPriv.get( elem, "fxshow" );
+
+	// Queue-skipping animations hijack the fx hooks
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// Ensure the complete handler is called before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// Detect show/hide animations
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.test( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// Pretend to be hidden if this is a "show" and
+				// there is still data from a stopped show/hide
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+
+				// Ignore all other no-op show/hide data
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+		}
+	}
+
+	// Bail out if this is a no-op like .hide().hide()
+	propTween = !jQuery.isEmptyObject( props );
+	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+		return;
+	}
+
+	// Restrict "overflow" and "display" styles during box animations
+	if ( isBox && elem.nodeType === 1 ) {
+
+		// Support: IE <=9 - 11, Edge 12 - 15
+		// Record all 3 overflow attributes because IE does not infer the shorthand
+		// from identically-valued overflowX and overflowY and Edge just mirrors
+		// the overflowX value there.
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Identify a display type, preferring old show/hide data over the CSS cascade
+		restoreDisplay = dataShow && dataShow.display;
+		if ( restoreDisplay == null ) {
+			restoreDisplay = dataPriv.get( elem, "display" );
+		}
+		display = jQuery.css( elem, "display" );
+		if ( display === "none" ) {
+			if ( restoreDisplay ) {
+				display = restoreDisplay;
+			} else {
+
+				// Get nonempty value(s) by temporarily forcing visibility
+				showHide( [ elem ], true );
+				restoreDisplay = elem.style.display || restoreDisplay;
+				display = jQuery.css( elem, "display" );
+				showHide( [ elem ] );
+			}
+		}
+
+		// Animate inline elements as inline-block
+		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+			if ( jQuery.css( elem, "float" ) === "none" ) {
+
+				// Restore the original display value at the end of pure show/hide animations
+				if ( !propTween ) {
+					anim.done( function() {
+						style.display = restoreDisplay;
+					} );
+					if ( restoreDisplay == null ) {
+						display = style.display;
+						restoreDisplay = display === "none" ? "" : display;
+					}
+				}
+				style.display = "inline-block";
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always( function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		} );
+	}
+
+	// Implement show/hide animations
+	propTween = false;
+	for ( prop in orig ) {
+
+		// General show/hide setup for this element animation
+		if ( !propTween ) {
+			if ( dataShow ) {
+				if ( "hidden" in dataShow ) {
+					hidden = dataShow.hidden;
+				}
+			} else {
+				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+			}
+
+			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+			if ( toggle ) {
+				dataShow.hidden = !hidden;
+			}
+
+			// Show elements before animating them
+			if ( hidden ) {
+				showHide( [ elem ], true );
+			}
+
+			/* eslint-disable no-loop-func */
+
+			anim.done( function() {
+
+			/* eslint-enable no-loop-func */
+
+				// The final step of a "hide" animation is actually hiding the element
+				if ( !hidden ) {
+					showHide( [ elem ] );
+				}
+				dataPriv.remove( elem, "fxshow" );
+				for ( prop in orig ) {
+					jQuery.style( elem, prop, orig[ prop ] );
+				}
+			} );
+		}
+
+		// Per-property setup
+		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+		if ( !( prop in dataShow ) ) {
+			dataShow[ prop ] = propTween.start;
+			if ( hidden ) {
+				propTween.end = propTween.start;
+				propTween.start = 0;
+			}
+		}
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( Array.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3 only
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			// If there's more to do, yield
+			if ( percent < 1 && length ) {
+				return remaining;
+			}
+
+			// If this was an empty animation, synthesize a final progress notification
+			if ( !length ) {
+				deferred.notifyWith( elem, [ animation, 1, 0 ] );
+			}
+
+			// Resolve the animation and report its conclusion
+			deferred.resolveWith( elem, [ animation ] );
+			return false;
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					result.stop.bind( result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	// Attach callbacks from options
+	animation
+		.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnothtmlwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !isFunction( easing ) && easing
+	};
+
+	// Go to the end state if fx are off
+	if ( jQuery.fx.off ) {
+		opt.duration = 0;
+
+	} else {
+		if ( typeof opt.duration !== "number" ) {
+			if ( opt.duration in jQuery.fx.speeds ) {
+				opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+			} else {
+				opt.duration = jQuery.fx.speeds._default;
+			}
+		}
+	}
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || dataPriv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = dataPriv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = dataPriv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = Date.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Run the timer and safely remove it when done (allowing for external removal)
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+	if ( inProgress ) {
+		return;
+	}
+
+	inProgress = true;
+	schedule();
+};
+
+jQuery.fx.stop = function() {
+	inProgress = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: Android <=4.3 only
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE <=11 only
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: IE <=11 only
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// Attribute hooks are determined by the lowercase version
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name,
+			i = 0,
+
+			// Attribute names can contain non-HTML whitespace characters
+			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+			attrNames = value && value.match( rnothtmlwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				elem.removeAttribute( name );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle,
+			lowercaseName = name.toLowerCase();
+
+		if ( !isXML ) {
+
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ lowercaseName ];
+			attrHandle[ lowercaseName ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				lowercaseName :
+				null;
+			attrHandle[ lowercaseName ] = handle;
+		}
+		return ret;
+	};
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each( function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// Support: IE <=9 - 11 only
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				if ( tabindex ) {
+					return parseInt( tabindex, 10 );
+				}
+
+				if (
+					rfocusable.test( elem.nodeName ) ||
+					rclickable.test( elem.nodeName ) &&
+					elem.href
+				) {
+					return 0;
+				}
+
+				return -1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		},
+		set: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent ) {
+				parent.selectedIndex;
+
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+	// Strip and collapse whitespace according to HTML spec
+	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
+	function stripAndCollapse( value ) {
+		var tokens = value.match( rnothtmlwhite ) || [];
+		return tokens.join( " " );
+	}
+
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+function classesToArray( value ) {
+	if ( Array.isArray( value ) ) {
+		return value;
+	}
+	if ( typeof value === "string" ) {
+		return value.match( rnothtmlwhite ) || [];
+	}
+	return [];
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isValidValue = type === "string" || Array.isArray( value );
+
+		if ( typeof stateVal === "boolean" && isValidValue ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( isValidValue ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = classesToArray( value );
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// Store className if set
+					dataPriv.set( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				if ( this.setAttribute ) {
+					this.setAttribute( "class",
+						className || value === false ?
+						"" :
+						dataPriv.get( this, "__className__" ) || ""
+					);
+				}
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+					return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, valueIsFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				// Handle most common string cases
+				if ( typeof ret === "string" ) {
+					return ret.replace( rreturn, "" );
+				}
+
+				// Handle cases where value is null/undef or number
+				return ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		valueIsFunction = isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( valueIsFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( Array.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE <=10 - 11 only
+					// option.text throws exceptions (#14686, #14858)
+					// Strip and collapse whitespace
+					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+					stripAndCollapse( jQuery.text( elem ) );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option, i,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one",
+					values = one ? null : [],
+					max = one ? index + 1 : options.length;
+
+				if ( index < 0 ) {
+					i = max;
+
+				} else {
+					i = one ? index : 0;
+				}
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// Support: IE <=9 only
+					// IE8-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							!option.disabled &&
+							( !option.parentNode.disabled ||
+								!nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+
+					/* eslint-disable no-cond-assign */
+
+					if ( option.selected =
+						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+					) {
+						optionSet = true;
+					}
+
+					/* eslint-enable no-cond-assign */
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( Array.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+support.focusin = "onfocusin" in window;
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	stopPropagationCallback = function( e ) {
+		e.stopPropagation();
+	};
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = lastElement = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+			lastElement = cur;
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = (
+					dataPriv.get( cur, "events" ) || Object.create( null )
+				)[ event.type ] &&
+				dataPriv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( ( !special._default ||
+				special._default.apply( eventPath.pop(), data ) === false ) &&
+				acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.addEventListener( type, stopPropagationCallback );
+					}
+
+					elem[ type ]();
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.removeEventListener( type, stopPropagationCallback );
+					}
+
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	// Used only for `focus(in | out)` events
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+	}
+
+} );
+
+jQuery.fn.extend( {
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+
+				// Handle: regular nodes (via `this.ownerDocument`), window
+				// (via `this.document`) & document (via `this`).
+				var doc = this.ownerDocument || this.document || this,
+					attaches = dataPriv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this.document || this,
+					attaches = dataPriv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					dataPriv.remove( doc, fix );
+
+				} else {
+					dataPriv.access( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+var location = window.location;
+
+var nonce = { guid: Date.now() };
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE 9 - 11 only
+	// IE throws on parseFromString with invalid input.
+	try {
+		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( Array.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && toType( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, valueOrFunction ) {
+
+			// If value is a function, invoke it and use its return value
+			var value = isFunction( valueOrFunction ) ?
+				valueOrFunction() :
+				valueOrFunction;
+
+			s[ s.length ] = encodeURIComponent( key ) + "=" +
+				encodeURIComponent( value == null ? "" : value );
+		};
+
+	if ( a == null ) {
+		return "";
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( _i, elem ) {
+			var val = jQuery( this ).val();
+
+			if ( val == null ) {
+				return null;
+			}
+
+			if ( Array.isArray( val ) ) {
+				return jQuery.map( val, function( val ) {
+					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+				} );
+			}
+
+			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+var
+	r20 = /%20/g,
+	rhash = /#.*$/,
+	rantiCache = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+		if ( isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+			// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": JSON.parse,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// Request state (becomes false upon send and true upon completion)
+			completed,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// uncached part of the url
+			uncached,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( completed ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
+									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
+										.concat( match[ 2 ] );
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() + " " ];
+					}
+					return match == null ? null : match.join( ", " );
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return completed ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( completed == null ) {
+						name = requestHeadersNames[ name.toLowerCase() ] =
+							requestHeadersNames[ name.toLowerCase() ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( completed == null ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( completed ) {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						} else {
+
+							// Lazy-add the new callbacks in a way that preserves old ones
+							for ( code in map ) {
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE <=8 - 11, Edge 12 - 15
+			// IE throws exception on accessing the href property if url is malformed,
+			// e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE <=8 - 11 only
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( completed ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		// Remove hash to simplify url manipulation
+		cacheURL = s.url.replace( rhash, "" );
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// Remember the hash so we can put it back
+			uncached = s.url.slice( cacheURL.length );
+
+			// If data is available and should be processed, append data to url
+			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
+				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add or update anti-cache param if needed
+			if ( s.cache === false ) {
+				cacheURL = cacheURL.replace( rantiCache, "$1" );
+				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
+					uncached;
+			}
+
+			// Put hash and anti-cache on the URL that will be requested (gh-1732)
+			s.url = cacheURL + uncached;
+
+		// Change '%20' to '+' if this is encoded form body content (gh-2658)
+		} else if ( s.data && s.processData &&
+			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+			s.data = s.data.replace( r20, "+" );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		completeDeferred.add( s.complete );
+		jqXHR.done( s.success );
+		jqXHR.fail( s.error );
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( completed ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				completed = false;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Rethrow post-completion exceptions
+				if ( completed ) {
+					throw e;
+				}
+
+				// Propagate others as results
+				done( -1, e );
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Ignore repeat invocations
+			if ( completed ) {
+				return;
+			}
+
+			completed = true;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Use a noop converter for missing script
+			if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
+				s.converters[ "text script" ] = function() {};
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( _i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+jQuery.ajaxPrefilter( function( s ) {
+	var i;
+	for ( i in s.headers ) {
+		if ( i.toLowerCase() === "content-type" ) {
+			s.contentType = s.headers[ i ] || "";
+		}
+	}
+} );
+
+
+jQuery._evalUrl = function( url, options, doc ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		cache: true,
+		async: false,
+		global: false,
+
+		// Only evaluate the response if it is successful (gh-4126)
+		// dataFilter is not invoked for failure responses, so using it instead
+		// of the default converter is kludgy but it works.
+		converters: {
+			"text script": function() {}
+		},
+		dataFilter: function( response ) {
+			jQuery.globalEval( response, options, doc );
+		}
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( this[ 0 ] ) {
+			if ( isFunction( html ) ) {
+				html = html.call( this[ 0 ] );
+			}
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var htmlIsFunction = isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function( selector ) {
+		this.parent( selector ).not( "body" ).each( function() {
+			jQuery( this ).replaceWith( this.childNodes );
+		} );
+		return this;
+	}
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+	return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+		// File protocol always yields status code 0, assume 200
+		0: 200,
+
+		// Support: IE <=9 only
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+	var callback, errorCallback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr();
+
+				xhr.open(
+					options.type,
+					options.url,
+					options.async,
+					options.username,
+					options.password
+				);
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+					headers[ "X-Requested-With" ] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							callback = errorCallback = xhr.onload =
+								xhr.onerror = xhr.onabort = xhr.ontimeout =
+									xhr.onreadystatechange = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+
+								// Support: IE <=9 only
+								// On a manual native abort, IE9 throws
+								// errors on any property access that is not readyState
+								if ( typeof xhr.status !== "number" ) {
+									complete( 0, "error" );
+								} else {
+									complete(
+
+										// File: protocol always yields status 0; see #8605, #14207
+										xhr.status,
+										xhr.statusText
+									);
+								}
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+
+									// Support: IE <=9 only
+									// IE9 has no XHR2 but throws on binary (trac-11426)
+									// For XHR2 non-text, let the caller handle it (gh-2498)
+									( xhr.responseType || "text" ) !== "text"  ||
+									typeof xhr.responseText !== "string" ?
+										{ binary: xhr.response } :
+										{ text: xhr.responseText },
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
+
+				// Support: IE 9 only
+				// Use onreadystatechange to replace onabort
+				// to handle uncaught aborts
+				if ( xhr.onabort !== undefined ) {
+					xhr.onabort = errorCallback;
+				} else {
+					xhr.onreadystatechange = function() {
+
+						// Check readyState before timeout as it changes
+						if ( xhr.readyState === 4 ) {
+
+							// Allow onerror to be called first,
+							// but that will not handle a native abort
+							// Also, save errorCallback to a variable
+							// as xhr.onerror cannot be accessed
+							window.setTimeout( function() {
+								if ( callback ) {
+									errorCallback();
+								}
+							} );
+						}
+					};
+				}
+
+				// Create the abort callback
+				callback = callback( "abort" );
+
+				try {
+
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+	if ( s.crossDomain ) {
+		s.contents.script = false;
+	}
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain or forced-by-attrs requests
+	if ( s.crossDomain || s.scriptAttrs ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery( "<script>" )
+					.attr( s.scriptAttrs || {} )
+					.prop( { charset: s.scriptCharset, src: s.url } )
+					.on( "load error", callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					} );
+
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+	var body = document.implementation.createHTMLDocument( "" ).body;
+	body.innerHTML = "<form></form><form></form>";
+	return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( typeof data !== "string" ) {
+		return [];
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+
+	var base, parsed, scripts;
+
+	if ( !context ) {
+
+		// Stop scripts or inline event handlers from being executed immediately
+		// by using document.implementation
+		if ( support.createHTMLDocument ) {
+			context = document.implementation.createHTMLDocument( "" );
+
+			// Set the base href for the created document
+			// so any parsed elements with URLs
+			// are based on the document's URL (gh-2965)
+			base = context.createElement( "base" );
+			base.href = document.location.href;
+			context.head.appendChild( base );
+		} else {
+			context = document;
+		}
+	}
+
+	parsed = rsingleTag.exec( data );
+	scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = stripAndCollapse( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			if ( typeof props.top === "number" ) {
+				props.top += "px";
+			}
+			if ( typeof props.left === "number" ) {
+				props.left += "px";
+			}
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+
+	// offset() relates an element's border box to the document origin
+	offset: function( options ) {
+
+		// Preserve chaining for setter
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var rect, win,
+			elem = this[ 0 ];
+
+		if ( !elem ) {
+			return;
+		}
+
+		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+		// Support: IE <=11 only
+		// Running getBoundingClientRect on a
+		// disconnected node in IE throws an error
+		if ( !elem.getClientRects().length ) {
+			return { top: 0, left: 0 };
+		}
+
+		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
+		rect = elem.getBoundingClientRect();
+		win = elem.ownerDocument.defaultView;
+		return {
+			top: rect.top + win.pageYOffset,
+			left: rect.left + win.pageXOffset
+		};
+	},
+
+	// position() relates an element's margin box to its offset parent's padding box
+	// This corresponds to the behavior of CSS absolute positioning
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset, doc,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// position:fixed elements are offset from the viewport, which itself always has zero offset
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume position:fixed implies availability of getBoundingClientRect
+			offset = elem.getBoundingClientRect();
+
+		} else {
+			offset = this.offset();
+
+			// Account for the *real* offset parent, which can be the document or its root element
+			// when a statically positioned element is identified
+			doc = elem.ownerDocument;
+			offsetParent = elem.offsetParent || doc.documentElement;
+			while ( offsetParent &&
+				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
+				jQuery.css( offsetParent, "position" ) === "static" ) {
+
+				offsetParent = offsetParent.parentNode;
+			}
+			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
+
+				// Incorporate borders into its offset, since they are outside its content origin
+				parentOffset = jQuery( offsetParent ).offset();
+				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
+				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
+			}
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	// This method will return documentElement in the following cases:
+	// 1) For the element inside the iframe without offsetParent, this method will return
+	//    documentElement of the parent window
+	// 2) For the hidden or detached element
+	// 3) For body or html element, i.e. in case of the html node - it will return itself
+	//
+	// but those exceptions were never presented as a real life use-cases
+	// and might be considered as more preferable results.
+	//
+	// This logic, however, is not guaranteed and can change at any point in the future
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+
+			// Coalesce documents and windows
+			var win;
+			if ( isWindow( elem ) ) {
+				win = elem;
+			} else if ( elem.nodeType === 9 ) {
+				win = elem.defaultView;
+			}
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : win.pageXOffset,
+					top ? val : win.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length );
+	};
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( _i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+		function( defaultExtra, funcName ) {
+
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( isWindow( elem ) ) {
+
+					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+					return funcName.indexOf( "outer" ) === 0 ?
+						elem[ "inner" + name ] :
+						elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable );
+		};
+	} );
+} );
+
+
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( _i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
+	function( _i, name ) {
+
+		// Handle event binding
+		jQuery.fn[ name ] = function( data, fn ) {
+			return arguments.length > 0 ?
+				this.on( name, null, data, fn ) :
+				this.trigger( name );
+		};
+	} );
+
+
+
+
+// Support: Android <=4.0 only
+// Make sure we trim BOM and NBSP
+var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
+// Bind a function to a context, optionally partially applying any
+// arguments.
+// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
+// However, it is not slated for removal any time soon
+jQuery.proxy = function( fn, context ) {
+	var tmp, args, proxy;
+
+	if ( typeof context === "string" ) {
+		tmp = fn[ context ];
+		context = fn;
+		fn = tmp;
+	}
+
+	// Quick check to determine if target is callable, in the spec
+	// this throws a TypeError, but we will just return undefined.
+	if ( !isFunction( fn ) ) {
+		return undefined;
+	}
+
+	// Simulated bind
+	args = slice.call( arguments, 2 );
+	proxy = function() {
+		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+	};
+
+	// Set the guid of unique handler to the same of original handler, so it can be removed
+	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+	return proxy;
+};
+
+jQuery.holdReady = function( hold ) {
+	if ( hold ) {
+		jQuery.readyWait++;
+	} else {
+		jQuery.ready( true );
+	}
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+jQuery.isFunction = isFunction;
+jQuery.isWindow = isWindow;
+jQuery.camelCase = camelCase;
+jQuery.type = toType;
+
+jQuery.now = Date.now;
+
+jQuery.isNumeric = function( obj ) {
+
+	// As of jQuery 3.0, isNumeric is limited to
+	// strings and numbers (primitives or objects)
+	// that can be coerced to finite numbers (gh-2662)
+	var type = jQuery.type( obj );
+	return ( type === "number" || type === "string" ) &&
+
+		// parseFloat NaNs numeric-cast false positives ("")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		!isNaN( obj - parseFloat( obj ) );
+};
+
+jQuery.trim = function( text ) {
+	return text == null ?
+		"" :
+		( text + "" ).replace( rtrim, "" );
+};
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( typeof noGlobal === "undefined" ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/jquery.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/jquery.js
new file mode 100644
index 0000000000000000000000000000000000000000..b0614034ad3a95e4ae9f53c2b015eeb3e8d68bde
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/jquery.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/js/badge_only.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/js/badge_only.js
new file mode 100644
index 0000000000000000000000000000000000000000..526d7234b6538603393d419ae2330b3fd6e57ee8
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/js/badge_only.js
@@ -0,0 +1 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/js/html5shiv-printshiv.min.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/js/html5shiv-printshiv.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b43bd062e9689f9f4016931d08e7143d555539d
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/js/html5shiv-printshiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/js/html5shiv.min.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/js/html5shiv.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd1c674f5e3a290a12386156500df3c50903a46b
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/js/html5shiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/js/theme.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/js/theme.js
new file mode 100644
index 0000000000000000000000000000000000000000..1fddb6ee4a60f30b4a4c4b3ad1f1604043f77981
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/js/theme.js
@@ -0,0 +1 @@
+!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),n("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),n("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n('<button class="toctree-expand" title="Open/close menu"></button>'),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e,t){var i=(new Date).getTime(),o=Math.max(0,16-(i-n)),r=window.setTimeout((function(){e(i+o)}),o);return n=i+o,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()}).call(window)},function(n,e){n.exports=jQuery},function(n,e,t){}]);
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/language_data.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/language_data.js
new file mode 100644
index 0000000000000000000000000000000000000000..ebe2f03bf03b7f72481f8f483039ef9b7013f062
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/language_data.js
@@ -0,0 +1,297 @@
+/*
+ * language_data.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * This script contains the language-specific data used by searchtools.js,
+ * namely the list of stopwords, stemmer, scorer and splitter.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
+
+
+/* Non-minified version is copied as a separate JS file, is available */
+
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
+
+
+
+var splitChars = (function() {
+    var result = {};
+    var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
+         1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
+         2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
+         2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
+         3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
+         3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
+         4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
+         8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
+         11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
+         43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
+    var i, j, start, end;
+    for (i = 0; i < singles.length; i++) {
+        result[singles[i]] = true;
+    }
+    var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
+         [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
+         [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
+         [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
+         [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
+         [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
+         [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
+         [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
+         [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
+         [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
+         [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
+         [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
+         [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
+         [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
+         [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
+         [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
+         [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
+         [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
+         [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
+         [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
+         [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
+         [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
+         [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
+         [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
+         [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
+         [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
+         [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
+         [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
+         [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
+         [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
+         [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
+         [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
+         [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
+         [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
+         [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
+         [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
+         [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
+         [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
+         [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
+         [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
+         [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
+         [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
+         [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
+         [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
+         [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
+         [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
+         [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
+         [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
+         [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
+    for (i = 0; i < ranges.length; i++) {
+        start = ranges[i][0];
+        end = ranges[i][1];
+        for (j = start; j <= end; j++) {
+            result[j] = true;
+        }
+    }
+    return result;
+})();
+
+function splitQuery(query) {
+    var result = [];
+    var start = -1;
+    for (var i = 0; i < query.length; i++) {
+        if (splitChars[query.charCodeAt(i)]) {
+            if (start !== -1) {
+                result.push(query.slice(start, i));
+                start = -1;
+            }
+        } else if (start === -1) {
+            start = i;
+        }
+    }
+    if (start !== -1) {
+        result.push(query.slice(start));
+    }
+    return result;
+}
+
+
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/minus.png b/VimbaX/doc/VmbCPP_Function_Reference/_static/minus.png
new file mode 100644
index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/minus.png differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/plus.png b/VimbaX/doc/VmbCPP_Function_Reference/_static/plus.png
new file mode 100644
index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/_static/plus.png differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/pygments.css b/VimbaX/doc/VmbCPP_Function_Reference/_static/pygments.css
new file mode 100644
index 0000000000000000000000000000000000000000..08bec689d3306e6c13d1973f61a01bee9a307e87
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/pygments.css
@@ -0,0 +1,74 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #9C6500 } /* Comment.Preproc */
+.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #E40000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #008400 } /* Generic.Inserted */
+.highlight .go { color: #717171 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #687822 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #767600 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #666666 } /* Literal.Number.Bin */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0000FF } /* Name.Function.Magic */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .vm { color: #19177C } /* Name.Variable.Magic */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/pygments_new.css b/VimbaX/doc/VmbCPP_Function_Reference/_static/pygments_new.css
new file mode 100644
index 0000000000000000000000000000000000000000..feced5a969a074d6abb8d67c0f279d43d1558bb3
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/pygments_new.css
@@ -0,0 +1,69 @@
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #f8f8f8; }
+.highlight .c { color: #308000; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #308000; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #308000; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
+.highlight .cpf { color: #308000; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #308000; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #308000; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #7D9029 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #A0A000 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #666666 } /* Literal.Number.Bin */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0000FF } /* Name.Function.Magic */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .vm { color: #19177C } /* Name.Variable.Magic */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/searchtools.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/searchtools.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a44e8582f6eda32047831d454c09eced81622d2
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/searchtools.js
@@ -0,0 +1,525 @@
+/*
+ * searchtools.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for the full-text search.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+if (!Scorer) {
+  /**
+   * Simple result scoring code.
+   */
+  var Scorer = {
+    // Implement the following function to further tweak the score for each result
+    // The function takes a result array [filename, title, anchor, descr, score]
+    // and returns the new score.
+    /*
+    score: function(result) {
+      return result[4];
+    },
+    */
+
+    // query matches the full name of an object
+    objNameMatch: 11,
+    // or matches in the last dotted part of the object name
+    objPartialMatch: 6,
+    // Additive scores depending on the priority of the object
+    objPrio: {0:  15,   // used to be importantResults
+              1:  5,   // used to be objectResults
+              2: -5},  // used to be unimportantResults
+    //  Used when the priority is not in the mapping.
+    objPrioDefault: 0,
+
+    // query found in title
+    title: 15,
+    partialTitle: 7,
+    // query found in terms
+    term: 5,
+    partialTerm: 2
+  };
+}
+
+if (!splitQuery) {
+  function splitQuery(query) {
+    return query.split(/\s+/);
+  }
+}
+
+/**
+ * Search Module
+ */
+var Search = {
+
+  _index : null,
+  _queued_query : null,
+  _pulse_status : -1,
+
+  htmlToText : function(htmlString) {
+      var virtualDocument = document.implementation.createHTMLDocument('virtual');
+      var htmlElement = $(htmlString, virtualDocument);
+      htmlElement.find('.headerlink').remove();
+      docContent = htmlElement.find('[role=main]')[0];
+      if(docContent === undefined) {
+          console.warn("Content block not found. Sphinx search tries to obtain it " +
+                       "via '[role=main]'. Could you check your theme or template.");
+          return "";
+      }
+      return docContent.textContent || docContent.innerText;
+  },
+
+  init : function() {
+      var params = $.getQueryParameters();
+      if (params.q) {
+          var query = params.q[0];
+          $('input[name="q"]')[0].value = query;
+          this.performSearch(query);
+      }
+  },
+
+  loadIndex : function(url) {
+    $.ajax({type: "GET", url: url, data: null,
+            dataType: "script", cache: true,
+            complete: function(jqxhr, textstatus) {
+              if (textstatus != "success") {
+                document.getElementById("searchindexloader").src = url;
+              }
+            }});
+  },
+
+  setIndex : function(index) {
+    var q;
+    this._index = index;
+    if ((q = this._queued_query) !== null) {
+      this._queued_query = null;
+      Search.query(q);
+    }
+  },
+
+  hasIndex : function() {
+      return this._index !== null;
+  },
+
+  deferQuery : function(query) {
+      this._queued_query = query;
+  },
+
+  stopPulse : function() {
+      this._pulse_status = 0;
+  },
+
+  startPulse : function() {
+    if (this._pulse_status >= 0)
+        return;
+    function pulse() {
+      var i;
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      var dotString = '';
+      for (i = 0; i < Search._pulse_status; i++)
+        dotString += '.';
+      Search.dots.text(dotString);
+      if (Search._pulse_status > -1)
+        window.setTimeout(pulse, 500);
+    }
+    pulse();
+  },
+
+  /**
+   * perform a search for something (or wait until index is loaded)
+   */
+  performSearch : function(query) {
+    // create the required interface elements
+    this.out = $('#search-results');
+    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
+    this.dots = $('<span></span>').appendTo(this.title);
+    this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
+    this.output = $('<ul class="search"/>').appendTo(this.out);
+
+    $('#search-progress').text(_('Preparing search...'));
+    this.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (this.hasIndex())
+      this.query(query);
+    else
+      this.deferQuery(query);
+  },
+
+  /**
+   * execute search (requires search index to be loaded)
+   */
+  query : function(query) {
+    var i;
+
+    // stem the searchterms and add them to the correct list
+    var stemmer = new Stemmer();
+    var searchterms = [];
+    var excluded = [];
+    var hlterms = [];
+    var tmp = splitQuery(query);
+    var objectterms = [];
+    for (i = 0; i < tmp.length; i++) {
+      if (tmp[i] !== "") {
+          objectterms.push(tmp[i].toLowerCase());
+      }
+
+      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
+        // skip this "word"
+        continue;
+      }
+      // stem the word
+      var word = stemmer.stemWord(tmp[i].toLowerCase());
+      var toAppend;
+      // select the correct list
+      if (word[0] == '-') {
+        toAppend = excluded;
+        word = word.substr(1);
+      }
+      else {
+        toAppend = searchterms;
+        hlterms.push(tmp[i].toLowerCase());
+      }
+      // only add if not already in the list
+      if (!$u.contains(toAppend, word))
+        toAppend.push(word);
+    }
+    var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
+
+    // console.debug('SEARCH: searching for:');
+    // console.info('required: ', searchterms);
+    // console.info('excluded: ', excluded);
+
+    // prepare search
+    var terms = this._index.terms;
+    var titleterms = this._index.titleterms;
+
+    // array of [filename, title, anchor, descr, score]
+    var results = [];
+    $('#search-progress').empty();
+
+    // lookup as object
+    for (i = 0; i < objectterms.length; i++) {
+      var others = [].concat(objectterms.slice(0, i),
+                             objectterms.slice(i+1, objectterms.length));
+      results = results.concat(this.performObjectSearch(objectterms[i], others));
+    }
+
+    // lookup as search terms in fulltext
+    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
+
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) {
+      for (i = 0; i < results.length; i++)
+        results[i][4] = Scorer.score(results[i]);
+    }
+
+    // now sort the results by score (in opposite order of appearance, since the
+    // display function below uses pop() to retrieve items) and then
+    // alphabetically
+    results.sort(function(a, b) {
+      var left = a[4];
+      var right = b[4];
+      if (left > right) {
+        return 1;
+      } else if (left < right) {
+        return -1;
+      } else {
+        // same score: sort alphabetically
+        left = a[1].toLowerCase();
+        right = b[1].toLowerCase();
+        return (left > right) ? -1 : ((left < right) ? 1 : 0);
+      }
+    });
+
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    //console.info('search results:', Search.lastresults);
+
+    // print the results
+    var resultCount = results.length;
+    function displayNextItem() {
+      // results left, load the summary and display it
+      if (results.length) {
+        var item = results.pop();
+        var listItem = $('<li></li>');
+        var requestUrl = "";
+        var linkUrl = "";
+        if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
+          // dirhtml builder
+          var dirname = item[0] + '/';
+          if (dirname.match(/\/index\/$/)) {
+            dirname = dirname.substring(0, dirname.length-6);
+          } else if (dirname == 'index/') {
+            dirname = '';
+          }
+          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
+          linkUrl = requestUrl;
+
+        } else {
+          // normal html builders
+          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+          linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
+        }
+        listItem.append($('<a/>').attr('href',
+            linkUrl +
+            highlightstring + item[2]).html(item[1]));
+        if (item[3]) {
+          listItem.append($('<span> (' + item[3] + ')</span>'));
+          Search.output.append(listItem);
+          setTimeout(function() {
+            displayNextItem();
+          }, 5);
+        } else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) {
+          $.ajax({url: requestUrl,
+                  dataType: "text",
+                  complete: function(jqxhr, textstatus) {
+                    var data = jqxhr.responseText;
+                    if (data !== '' && data !== undefined) {
+                      var summary = Search.makeSearchSummary(data, searchterms, hlterms);
+                      if (summary) {
+                        listItem.append(summary);
+                      }
+                    }
+                    Search.output.append(listItem);
+                    setTimeout(function() {
+                      displayNextItem();
+                    }, 5);
+                  }});
+        } else {
+          // just display title
+          Search.output.append(listItem);
+          setTimeout(function() {
+            displayNextItem();
+          }, 5);
+        }
+      }
+      // search finished, update title and status message
+      else {
+        Search.stopPulse();
+        Search.title.text(_('Search Results'));
+        if (!resultCount)
+          Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
+        else
+            Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
+        Search.status.fadeIn(500);
+      }
+    }
+    displayNextItem();
+  },
+
+  /**
+   * search for object names
+   */
+  performObjectSearch : function(object, otherterms) {
+    var filenames = this._index.filenames;
+    var docnames = this._index.docnames;
+    var objects = this._index.objects;
+    var objnames = this._index.objnames;
+    var titles = this._index.titles;
+
+    var i;
+    var results = [];
+
+    for (var prefix in objects) {
+      for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
+        var match = objects[prefix][iMatch];
+        var name = match[4];
+        var fullname = (prefix ? prefix + '.' : '') + name;
+        var fullnameLower = fullname.toLowerCase()
+        if (fullnameLower.indexOf(object) > -1) {
+          var score = 0;
+          var parts = fullnameLower.split('.');
+          // check for different match types: exact matches of full name or
+          // "last name" (i.e. last dotted part)
+          if (fullnameLower == object || parts[parts.length - 1] == object) {
+            score += Scorer.objNameMatch;
+          // matches in last name
+          } else if (parts[parts.length - 1].indexOf(object) > -1) {
+            score += Scorer.objPartialMatch;
+          }
+          var objname = objnames[match[1]][2];
+          var title = titles[match[0]];
+          // If more than one term searched for, we require other words to be
+          // found in the name/title/description
+          if (otherterms.length > 0) {
+            var haystack = (prefix + ' ' + name + ' ' +
+                            objname + ' ' + title).toLowerCase();
+            var allfound = true;
+            for (i = 0; i < otherterms.length; i++) {
+              if (haystack.indexOf(otherterms[i]) == -1) {
+                allfound = false;
+                break;
+              }
+            }
+            if (!allfound) {
+              continue;
+            }
+          }
+          var descr = objname + _(', in ') + title;
+
+          var anchor = match[3];
+          if (anchor === '')
+            anchor = fullname;
+          else if (anchor == '-')
+            anchor = objnames[match[1]][1] + '-' + fullname;
+          // add custom score for some objects according to scorer
+          if (Scorer.objPrio.hasOwnProperty(match[2])) {
+            score += Scorer.objPrio[match[2]];
+          } else {
+            score += Scorer.objPrioDefault;
+          }
+          results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
+        }
+      }
+    }
+
+    return results;
+  },
+
+  /**
+   * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+   */
+  escapeRegExp : function(string) {
+    return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+  },
+
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch : function(searchterms, excluded, terms, titleterms) {
+    var docnames = this._index.docnames;
+    var filenames = this._index.filenames;
+    var titles = this._index.titles;
+
+    var i, j, file;
+    var fileMap = {};
+    var scoreMap = {};
+    var results = [];
+
+    // perform the search on the required terms
+    for (i = 0; i < searchterms.length; i++) {
+      var word = searchterms[i];
+      var files = [];
+      var _o = [
+        {files: terms[word], score: Scorer.term},
+        {files: titleterms[word], score: Scorer.title}
+      ];
+      // add support for partial matches
+      if (word.length > 2) {
+        var word_regex = this.escapeRegExp(word);
+        for (var w in terms) {
+          if (w.match(word_regex) && !terms[word]) {
+            _o.push({files: terms[w], score: Scorer.partialTerm})
+          }
+        }
+        for (var w in titleterms) {
+          if (w.match(word_regex) && !titleterms[word]) {
+              _o.push({files: titleterms[w], score: Scorer.partialTitle})
+          }
+        }
+      }
+
+      // no match but word was a required one
+      if ($u.every(_o, function(o){return o.files === undefined;})) {
+        break;
+      }
+      // found search word in contents
+      $u.each(_o, function(o) {
+        var _files = o.files;
+        if (_files === undefined)
+          return
+
+        if (_files.length === undefined)
+          _files = [_files];
+        files = files.concat(_files);
+
+        // set score for the word in each file to Scorer.term
+        for (j = 0; j < _files.length; j++) {
+          file = _files[j];
+          if (!(file in scoreMap))
+            scoreMap[file] = {};
+          scoreMap[file][word] = o.score;
+        }
+      });
+
+      // create the mapping
+      for (j = 0; j < files.length; j++) {
+        file = files[j];
+        if (file in fileMap && fileMap[file].indexOf(word) === -1)
+          fileMap[file].push(word);
+        else
+          fileMap[file] = [word];
+      }
+    }
+
+    // now check if the files don't contain excluded terms
+    for (file in fileMap) {
+      var valid = true;
+
+      // check if all requirements are matched
+      var filteredTermCount = // as search terms with length < 3 are discarded: ignore
+        searchterms.filter(function(term){return term.length > 2}).length
+      if (
+        fileMap[file].length != searchterms.length &&
+        fileMap[file].length != filteredTermCount
+      ) continue;
+
+      // ensure that none of the excluded terms is in the search result
+      for (i = 0; i < excluded.length; i++) {
+        if (terms[excluded[i]] == file ||
+            titleterms[excluded[i]] == file ||
+            $u.contains(terms[excluded[i]] || [], file) ||
+            $u.contains(titleterms[excluded[i]] || [], file)) {
+          valid = false;
+          break;
+        }
+      }
+
+      // if we have still a valid result we can add it to the result list
+      if (valid) {
+        // select one (max) score for the file.
+        // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
+        var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
+        results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
+      }
+    }
+    return results;
+  },
+
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words, hlwords is the list of normal, unstemmed
+   * words. the first one is used to find the occurrence, the
+   * latter for highlighting it.
+   */
+  makeSearchSummary : function(htmlText, keywords, hlwords) {
+    var text = Search.htmlToText(htmlText);
+    if (text == "") {
+      return null;
+    }
+    var textLower = text.toLowerCase();
+    var start = 0;
+    $.each(keywords, function() {
+      var i = textLower.indexOf(this.toLowerCase());
+      if (i > -1)
+        start = i;
+    });
+    start = Math.max(start - 120, 0);
+    var excerpt = ((start > 0) ? '...' : '') +
+      $.trim(text.substr(start, 240)) +
+      ((start + 240 - text.length) ? '...' : '');
+    var rv = $('<p class="context"></p>').text(excerpt);
+    $.each(hlwords, function() {
+      rv = rv.highlightText(this, 'highlighted');
+    });
+    return rv;
+  }
+};
+
+$(document).ready(function() {
+  Search.init();
+});
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/underscore-1.13.1.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/underscore-1.13.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..ffd77af9648a47d389f2d6976d4aa1c44d7ce7ce
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/underscore-1.13.1.js
@@ -0,0 +1,2042 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define('underscore', factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
+    var current = global._;
+    var exports = global._ = factory();
+    exports.noConflict = function () { global._ = current; return exports; };
+  }()));
+}(this, (function () {
+  //     Underscore.js 1.13.1
+  //     https://underscorejs.org
+  //     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
+  //     Underscore may be freely distributed under the MIT license.
+
+  // Current version.
+  var VERSION = '1.13.1';
+
+  // Establish the root object, `window` (`self`) in the browser, `global`
+  // on the server, or `this` in some virtual machines. We use `self`
+  // instead of `window` for `WebWorker` support.
+  var root = typeof self == 'object' && self.self === self && self ||
+            typeof global == 'object' && global.global === global && global ||
+            Function('return this')() ||
+            {};
+
+  // Save bytes in the minified (but not gzipped) version:
+  var ArrayProto = Array.prototype, ObjProto = Object.prototype;
+  var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
+
+  // Create quick reference variables for speed access to core prototypes.
+  var push = ArrayProto.push,
+      slice = ArrayProto.slice,
+      toString = ObjProto.toString,
+      hasOwnProperty = ObjProto.hasOwnProperty;
+
+  // Modern feature detection.
+  var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
+      supportsDataView = typeof DataView !== 'undefined';
+
+  // All **ECMAScript 5+** native function implementations that we hope to use
+  // are declared here.
+  var nativeIsArray = Array.isArray,
+      nativeKeys = Object.keys,
+      nativeCreate = Object.create,
+      nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;
+
+  // Create references to these builtin functions because we override them.
+  var _isNaN = isNaN,
+      _isFinite = isFinite;
+
+  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
+  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
+    'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
+
+  // The largest integer that can be represented exactly.
+  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
+
+  // Some functions take a variable number of arguments, or a few expected
+  // arguments at the beginning and then a variable number of values to operate
+  // on. This helper accumulates all remaining arguments past the function’s
+  // argument length (or an explicit `startIndex`), into an array that becomes
+  // the last argument. Similar to ES6’s "rest parameter".
+  function restArguments(func, startIndex) {
+    startIndex = startIndex == null ? func.length - 1 : +startIndex;
+    return function() {
+      var length = Math.max(arguments.length - startIndex, 0),
+          rest = Array(length),
+          index = 0;
+      for (; index < length; index++) {
+        rest[index] = arguments[index + startIndex];
+      }
+      switch (startIndex) {
+        case 0: return func.call(this, rest);
+        case 1: return func.call(this, arguments[0], rest);
+        case 2: return func.call(this, arguments[0], arguments[1], rest);
+      }
+      var args = Array(startIndex + 1);
+      for (index = 0; index < startIndex; index++) {
+        args[index] = arguments[index];
+      }
+      args[startIndex] = rest;
+      return func.apply(this, args);
+    };
+  }
+
+  // Is a given variable an object?
+  function isObject(obj) {
+    var type = typeof obj;
+    return type === 'function' || type === 'object' && !!obj;
+  }
+
+  // Is a given value equal to null?
+  function isNull(obj) {
+    return obj === null;
+  }
+
+  // Is a given variable undefined?
+  function isUndefined(obj) {
+    return obj === void 0;
+  }
+
+  // Is a given value a boolean?
+  function isBoolean(obj) {
+    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+  }
+
+  // Is a given value a DOM element?
+  function isElement(obj) {
+    return !!(obj && obj.nodeType === 1);
+  }
+
+  // Internal function for creating a `toString`-based type tester.
+  function tagTester(name) {
+    var tag = '[object ' + name + ']';
+    return function(obj) {
+      return toString.call(obj) === tag;
+    };
+  }
+
+  var isString = tagTester('String');
+
+  var isNumber = tagTester('Number');
+
+  var isDate = tagTester('Date');
+
+  var isRegExp = tagTester('RegExp');
+
+  var isError = tagTester('Error');
+
+  var isSymbol = tagTester('Symbol');
+
+  var isArrayBuffer = tagTester('ArrayBuffer');
+
+  var isFunction = tagTester('Function');
+
+  // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old
+  // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
+  var nodelist = root.document && root.document.childNodes;
+  if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
+    isFunction = function(obj) {
+      return typeof obj == 'function' || false;
+    };
+  }
+
+  var isFunction$1 = isFunction;
+
+  var hasObjectTag = tagTester('Object');
+
+  // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.
+  // In IE 11, the most common among them, this problem also applies to
+  // `Map`, `WeakMap` and `Set`.
+  var hasStringTagBug = (
+        supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))
+      ),
+      isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));
+
+  var isDataView = tagTester('DataView');
+
+  // In IE 10 - Edge 13, we need a different heuristic
+  // to determine whether an object is a `DataView`.
+  function ie10IsDataView(obj) {
+    return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);
+  }
+
+  var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);
+
+  // Is a given value an array?
+  // Delegates to ECMA5's native `Array.isArray`.
+  var isArray = nativeIsArray || tagTester('Array');
+
+  // Internal function to check whether `key` is an own property name of `obj`.
+  function has$1(obj, key) {
+    return obj != null && hasOwnProperty.call(obj, key);
+  }
+
+  var isArguments = tagTester('Arguments');
+
+  // Define a fallback version of the method in browsers (ahem, IE < 9), where
+  // there isn't any inspectable "Arguments" type.
+  (function() {
+    if (!isArguments(arguments)) {
+      isArguments = function(obj) {
+        return has$1(obj, 'callee');
+      };
+    }
+  }());
+
+  var isArguments$1 = isArguments;
+
+  // Is a given object a finite number?
+  function isFinite$1(obj) {
+    return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));
+  }
+
+  // Is the given value `NaN`?
+  function isNaN$1(obj) {
+    return isNumber(obj) && _isNaN(obj);
+  }
+
+  // Predicate-generating function. Often useful outside of Underscore.
+  function constant(value) {
+    return function() {
+      return value;
+    };
+  }
+
+  // Common internal logic for `isArrayLike` and `isBufferLike`.
+  function createSizePropertyCheck(getSizeProperty) {
+    return function(collection) {
+      var sizeProperty = getSizeProperty(collection);
+      return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;
+    }
+  }
+
+  // Internal helper to generate a function to obtain property `key` from `obj`.
+  function shallowProperty(key) {
+    return function(obj) {
+      return obj == null ? void 0 : obj[key];
+    };
+  }
+
+  // Internal helper to obtain the `byteLength` property of an object.
+  var getByteLength = shallowProperty('byteLength');
+
+  // Internal helper to determine whether we should spend extensive checks against
+  // `ArrayBuffer` et al.
+  var isBufferLike = createSizePropertyCheck(getByteLength);
+
+  // Is a given value a typed array?
+  var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;
+  function isTypedArray(obj) {
+    // `ArrayBuffer.isView` is the most future-proof, so use it when available.
+    // Otherwise, fall back on the above regular expression.
+    return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :
+                  isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));
+  }
+
+  var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);
+
+  // Internal helper to obtain the `length` property of an object.
+  var getLength = shallowProperty('length');
+
+  // Internal helper to create a simple lookup structure.
+  // `collectNonEnumProps` used to depend on `_.contains`, but this led to
+  // circular imports. `emulatedSet` is a one-off solution that only works for
+  // arrays of strings.
+  function emulatedSet(keys) {
+    var hash = {};
+    for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;
+    return {
+      contains: function(key) { return hash[key]; },
+      push: function(key) {
+        hash[key] = true;
+        return keys.push(key);
+      }
+    };
+  }
+
+  // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
+  // be iterated by `for key in ...` and thus missed. Extends `keys` in place if
+  // needed.
+  function collectNonEnumProps(obj, keys) {
+    keys = emulatedSet(keys);
+    var nonEnumIdx = nonEnumerableProps.length;
+    var constructor = obj.constructor;
+    var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;
+
+    // Constructor is a special case.
+    var prop = 'constructor';
+    if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);
+
+    while (nonEnumIdx--) {
+      prop = nonEnumerableProps[nonEnumIdx];
+      if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {
+        keys.push(prop);
+      }
+    }
+  }
+
+  // Retrieve the names of an object's own properties.
+  // Delegates to **ECMAScript 5**'s native `Object.keys`.
+  function keys(obj) {
+    if (!isObject(obj)) return [];
+    if (nativeKeys) return nativeKeys(obj);
+    var keys = [];
+    for (var key in obj) if (has$1(obj, key)) keys.push(key);
+    // Ahem, IE < 9.
+    if (hasEnumBug) collectNonEnumProps(obj, keys);
+    return keys;
+  }
+
+  // Is a given array, string, or object empty?
+  // An "empty" object has no enumerable own-properties.
+  function isEmpty(obj) {
+    if (obj == null) return true;
+    // Skip the more expensive `toString`-based type checks if `obj` has no
+    // `.length`.
+    var length = getLength(obj);
+    if (typeof length == 'number' && (
+      isArray(obj) || isString(obj) || isArguments$1(obj)
+    )) return length === 0;
+    return getLength(keys(obj)) === 0;
+  }
+
+  // Returns whether an object has a given set of `key:value` pairs.
+  function isMatch(object, attrs) {
+    var _keys = keys(attrs), length = _keys.length;
+    if (object == null) return !length;
+    var obj = Object(object);
+    for (var i = 0; i < length; i++) {
+      var key = _keys[i];
+      if (attrs[key] !== obj[key] || !(key in obj)) return false;
+    }
+    return true;
+  }
+
+  // If Underscore is called as a function, it returns a wrapped object that can
+  // be used OO-style. This wrapper holds altered versions of all functions added
+  // through `_.mixin`. Wrapped objects may be chained.
+  function _$1(obj) {
+    if (obj instanceof _$1) return obj;
+    if (!(this instanceof _$1)) return new _$1(obj);
+    this._wrapped = obj;
+  }
+
+  _$1.VERSION = VERSION;
+
+  // Extracts the result from a wrapped and chained object.
+  _$1.prototype.value = function() {
+    return this._wrapped;
+  };
+
+  // Provide unwrapping proxies for some methods used in engine operations
+  // such as arithmetic and JSON stringification.
+  _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;
+
+  _$1.prototype.toString = function() {
+    return String(this._wrapped);
+  };
+
+  // Internal function to wrap or shallow-copy an ArrayBuffer,
+  // typed array or DataView to a new view, reusing the buffer.
+  function toBufferView(bufferSource) {
+    return new Uint8Array(
+      bufferSource.buffer || bufferSource,
+      bufferSource.byteOffset || 0,
+      getByteLength(bufferSource)
+    );
+  }
+
+  // We use this string twice, so give it a name for minification.
+  var tagDataView = '[object DataView]';
+
+  // Internal recursive comparison function for `_.isEqual`.
+  function eq(a, b, aStack, bStack) {
+    // Identical objects are equal. `0 === -0`, but they aren't identical.
+    // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
+    if (a === b) return a !== 0 || 1 / a === 1 / b;
+    // `null` or `undefined` only equal to itself (strict comparison).
+    if (a == null || b == null) return false;
+    // `NaN`s are equivalent, but non-reflexive.
+    if (a !== a) return b !== b;
+    // Exhaust primitive checks
+    var type = typeof a;
+    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
+    return deepEq(a, b, aStack, bStack);
+  }
+
+  // Internal recursive comparison function for `_.isEqual`.
+  function deepEq(a, b, aStack, bStack) {
+    // Unwrap any wrapped objects.
+    if (a instanceof _$1) a = a._wrapped;
+    if (b instanceof _$1) b = b._wrapped;
+    // Compare `[[Class]]` names.
+    var className = toString.call(a);
+    if (className !== toString.call(b)) return false;
+    // Work around a bug in IE 10 - Edge 13.
+    if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {
+      if (!isDataView$1(b)) return false;
+      className = tagDataView;
+    }
+    switch (className) {
+      // These types are compared by value.
+      case '[object RegExp]':
+        // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+      case '[object String]':
+        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+        // equivalent to `new String("5")`.
+        return '' + a === '' + b;
+      case '[object Number]':
+        // `NaN`s are equivalent, but non-reflexive.
+        // Object(NaN) is equivalent to NaN.
+        if (+a !== +a) return +b !== +b;
+        // An `egal` comparison is performed for other numeric values.
+        return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+      case '[object Date]':
+      case '[object Boolean]':
+        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+        // millisecond representations. Note that invalid dates with millisecond representations
+        // of `NaN` are not equivalent.
+        return +a === +b;
+      case '[object Symbol]':
+        return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
+      case '[object ArrayBuffer]':
+      case tagDataView:
+        // Coerce to typed array so we can fall through.
+        return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);
+    }
+
+    var areArrays = className === '[object Array]';
+    if (!areArrays && isTypedArray$1(a)) {
+        var byteLength = getByteLength(a);
+        if (byteLength !== getByteLength(b)) return false;
+        if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;
+        areArrays = true;
+    }
+    if (!areArrays) {
+      if (typeof a != 'object' || typeof b != 'object') return false;
+
+      // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+      // from different frames are.
+      var aCtor = a.constructor, bCtor = b.constructor;
+      if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&
+                               isFunction$1(bCtor) && bCtor instanceof bCtor)
+                          && ('constructor' in a && 'constructor' in b)) {
+        return false;
+      }
+    }
+    // Assume equality for cyclic structures. The algorithm for detecting cyclic
+    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+
+    // Initializing stack of traversed objects.
+    // It's done here since we only need them for objects and arrays comparison.
+    aStack = aStack || [];
+    bStack = bStack || [];
+    var length = aStack.length;
+    while (length--) {
+      // Linear search. Performance is inversely proportional to the number of
+      // unique nested structures.
+      if (aStack[length] === a) return bStack[length] === b;
+    }
+
+    // Add the first object to the stack of traversed objects.
+    aStack.push(a);
+    bStack.push(b);
+
+    // Recursively compare objects and arrays.
+    if (areArrays) {
+      // Compare array lengths to determine if a deep comparison is necessary.
+      length = a.length;
+      if (length !== b.length) return false;
+      // Deep compare the contents, ignoring non-numeric properties.
+      while (length--) {
+        if (!eq(a[length], b[length], aStack, bStack)) return false;
+      }
+    } else {
+      // Deep compare objects.
+      var _keys = keys(a), key;
+      length = _keys.length;
+      // Ensure that both objects contain the same number of properties before comparing deep equality.
+      if (keys(b).length !== length) return false;
+      while (length--) {
+        // Deep compare each member
+        key = _keys[length];
+        if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
+      }
+    }
+    // Remove the first object from the stack of traversed objects.
+    aStack.pop();
+    bStack.pop();
+    return true;
+  }
+
+  // Perform a deep comparison to check if two objects are equal.
+  function isEqual(a, b) {
+    return eq(a, b);
+  }
+
+  // Retrieve all the enumerable property names of an object.
+  function allKeys(obj) {
+    if (!isObject(obj)) return [];
+    var keys = [];
+    for (var key in obj) keys.push(key);
+    // Ahem, IE < 9.
+    if (hasEnumBug) collectNonEnumProps(obj, keys);
+    return keys;
+  }
+
+  // Since the regular `Object.prototype.toString` type tests don't work for
+  // some types in IE 11, we use a fingerprinting heuristic instead, based
+  // on the methods. It's not great, but it's the best we got.
+  // The fingerprint method lists are defined below.
+  function ie11fingerprint(methods) {
+    var length = getLength(methods);
+    return function(obj) {
+      if (obj == null) return false;
+      // `Map`, `WeakMap` and `Set` have no enumerable keys.
+      var keys = allKeys(obj);
+      if (getLength(keys)) return false;
+      for (var i = 0; i < length; i++) {
+        if (!isFunction$1(obj[methods[i]])) return false;
+      }
+      // If we are testing against `WeakMap`, we need to ensure that
+      // `obj` doesn't have a `forEach` method in order to distinguish
+      // it from a regular `Map`.
+      return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);
+    };
+  }
+
+  // In the interest of compact minification, we write
+  // each string in the fingerprints only once.
+  var forEachName = 'forEach',
+      hasName = 'has',
+      commonInit = ['clear', 'delete'],
+      mapTail = ['get', hasName, 'set'];
+
+  // `Map`, `WeakMap` and `Set` each have slightly different
+  // combinations of the above sublists.
+  var mapMethods = commonInit.concat(forEachName, mapTail),
+      weakMapMethods = commonInit.concat(mapTail),
+      setMethods = ['add'].concat(commonInit, forEachName, hasName);
+
+  var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');
+
+  var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');
+
+  var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');
+
+  var isWeakSet = tagTester('WeakSet');
+
+  // Retrieve the values of an object's properties.
+  function values(obj) {
+    var _keys = keys(obj);
+    var length = _keys.length;
+    var values = Array(length);
+    for (var i = 0; i < length; i++) {
+      values[i] = obj[_keys[i]];
+    }
+    return values;
+  }
+
+  // Convert an object into a list of `[key, value]` pairs.
+  // The opposite of `_.object` with one argument.
+  function pairs(obj) {
+    var _keys = keys(obj);
+    var length = _keys.length;
+    var pairs = Array(length);
+    for (var i = 0; i < length; i++) {
+      pairs[i] = [_keys[i], obj[_keys[i]]];
+    }
+    return pairs;
+  }
+
+  // Invert the keys and values of an object. The values must be serializable.
+  function invert(obj) {
+    var result = {};
+    var _keys = keys(obj);
+    for (var i = 0, length = _keys.length; i < length; i++) {
+      result[obj[_keys[i]]] = _keys[i];
+    }
+    return result;
+  }
+
+  // Return a sorted list of the function names available on the object.
+  function functions(obj) {
+    var names = [];
+    for (var key in obj) {
+      if (isFunction$1(obj[key])) names.push(key);
+    }
+    return names.sort();
+  }
+
+  // An internal function for creating assigner functions.
+  function createAssigner(keysFunc, defaults) {
+    return function(obj) {
+      var length = arguments.length;
+      if (defaults) obj = Object(obj);
+      if (length < 2 || obj == null) return obj;
+      for (var index = 1; index < length; index++) {
+        var source = arguments[index],
+            keys = keysFunc(source),
+            l = keys.length;
+        for (var i = 0; i < l; i++) {
+          var key = keys[i];
+          if (!defaults || obj[key] === void 0) obj[key] = source[key];
+        }
+      }
+      return obj;
+    };
+  }
+
+  // Extend a given object with all the properties in passed-in object(s).
+  var extend = createAssigner(allKeys);
+
+  // Assigns a given object with all the own properties in the passed-in
+  // object(s).
+  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+  var extendOwn = createAssigner(keys);
+
+  // Fill in a given object with default properties.
+  var defaults = createAssigner(allKeys, true);
+
+  // Create a naked function reference for surrogate-prototype-swapping.
+  function ctor() {
+    return function(){};
+  }
+
+  // An internal function for creating a new object that inherits from another.
+  function baseCreate(prototype) {
+    if (!isObject(prototype)) return {};
+    if (nativeCreate) return nativeCreate(prototype);
+    var Ctor = ctor();
+    Ctor.prototype = prototype;
+    var result = new Ctor;
+    Ctor.prototype = null;
+    return result;
+  }
+
+  // Creates an object that inherits from the given prototype object.
+  // If additional properties are provided then they will be added to the
+  // created object.
+  function create(prototype, props) {
+    var result = baseCreate(prototype);
+    if (props) extendOwn(result, props);
+    return result;
+  }
+
+  // Create a (shallow-cloned) duplicate of an object.
+  function clone(obj) {
+    if (!isObject(obj)) return obj;
+    return isArray(obj) ? obj.slice() : extend({}, obj);
+  }
+
+  // Invokes `interceptor` with the `obj` and then returns `obj`.
+  // The primary purpose of this method is to "tap into" a method chain, in
+  // order to perform operations on intermediate results within the chain.
+  function tap(obj, interceptor) {
+    interceptor(obj);
+    return obj;
+  }
+
+  // Normalize a (deep) property `path` to array.
+  // Like `_.iteratee`, this function can be customized.
+  function toPath$1(path) {
+    return isArray(path) ? path : [path];
+  }
+  _$1.toPath = toPath$1;
+
+  // Internal wrapper for `_.toPath` to enable minification.
+  // Similar to `cb` for `_.iteratee`.
+  function toPath(path) {
+    return _$1.toPath(path);
+  }
+
+  // Internal function to obtain a nested property in `obj` along `path`.
+  function deepGet(obj, path) {
+    var length = path.length;
+    for (var i = 0; i < length; i++) {
+      if (obj == null) return void 0;
+      obj = obj[path[i]];
+    }
+    return length ? obj : void 0;
+  }
+
+  // Get the value of the (deep) property on `path` from `object`.
+  // If any property in `path` does not exist or if the value is
+  // `undefined`, return `defaultValue` instead.
+  // The `path` is normalized through `_.toPath`.
+  function get(object, path, defaultValue) {
+    var value = deepGet(object, toPath(path));
+    return isUndefined(value) ? defaultValue : value;
+  }
+
+  // Shortcut function for checking if an object has a given property directly on
+  // itself (in other words, not on a prototype). Unlike the internal `has`
+  // function, this public version can also traverse nested properties.
+  function has(obj, path) {
+    path = toPath(path);
+    var length = path.length;
+    for (var i = 0; i < length; i++) {
+      var key = path[i];
+      if (!has$1(obj, key)) return false;
+      obj = obj[key];
+    }
+    return !!length;
+  }
+
+  // Keep the identity function around for default iteratees.
+  function identity(value) {
+    return value;
+  }
+
+  // Returns a predicate for checking whether an object has a given set of
+  // `key:value` pairs.
+  function matcher(attrs) {
+    attrs = extendOwn({}, attrs);
+    return function(obj) {
+      return isMatch(obj, attrs);
+    };
+  }
+
+  // Creates a function that, when passed an object, will traverse that object’s
+  // properties down the given `path`, specified as an array of keys or indices.
+  function property(path) {
+    path = toPath(path);
+    return function(obj) {
+      return deepGet(obj, path);
+    };
+  }
+
+  // Internal function that returns an efficient (for current engines) version
+  // of the passed-in callback, to be repeatedly applied in other Underscore
+  // functions.
+  function optimizeCb(func, context, argCount) {
+    if (context === void 0) return func;
+    switch (argCount == null ? 3 : argCount) {
+      case 1: return function(value) {
+        return func.call(context, value);
+      };
+      // The 2-argument case is omitted because we’re not using it.
+      case 3: return function(value, index, collection) {
+        return func.call(context, value, index, collection);
+      };
+      case 4: return function(accumulator, value, index, collection) {
+        return func.call(context, accumulator, value, index, collection);
+      };
+    }
+    return function() {
+      return func.apply(context, arguments);
+    };
+  }
+
+  // An internal function to generate callbacks that can be applied to each
+  // element in a collection, returning the desired result — either `_.identity`,
+  // an arbitrary callback, a property matcher, or a property accessor.
+  function baseIteratee(value, context, argCount) {
+    if (value == null) return identity;
+    if (isFunction$1(value)) return optimizeCb(value, context, argCount);
+    if (isObject(value) && !isArray(value)) return matcher(value);
+    return property(value);
+  }
+
+  // External wrapper for our callback generator. Users may customize
+  // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
+  // This abstraction hides the internal-only `argCount` argument.
+  function iteratee(value, context) {
+    return baseIteratee(value, context, Infinity);
+  }
+  _$1.iteratee = iteratee;
+
+  // The function we call internally to generate a callback. It invokes
+  // `_.iteratee` if overridden, otherwise `baseIteratee`.
+  function cb(value, context, argCount) {
+    if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);
+    return baseIteratee(value, context, argCount);
+  }
+
+  // Returns the results of applying the `iteratee` to each element of `obj`.
+  // In contrast to `_.map` it returns an object.
+  function mapObject(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    var _keys = keys(obj),
+        length = _keys.length,
+        results = {};
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys[index];
+      results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
+    }
+    return results;
+  }
+
+  // Predicate-generating function. Often useful outside of Underscore.
+  function noop(){}
+
+  // Generates a function for a given object that returns a given property.
+  function propertyOf(obj) {
+    if (obj == null) return noop;
+    return function(path) {
+      return get(obj, path);
+    };
+  }
+
+  // Run a function **n** times.
+  function times(n, iteratee, context) {
+    var accum = Array(Math.max(0, n));
+    iteratee = optimizeCb(iteratee, context, 1);
+    for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+    return accum;
+  }
+
+  // Return a random integer between `min` and `max` (inclusive).
+  function random(min, max) {
+    if (max == null) {
+      max = min;
+      min = 0;
+    }
+    return min + Math.floor(Math.random() * (max - min + 1));
+  }
+
+  // A (possibly faster) way to get the current timestamp as an integer.
+  var now = Date.now || function() {
+    return new Date().getTime();
+  };
+
+  // Internal helper to generate functions for escaping and unescaping strings
+  // to/from HTML interpolation.
+  function createEscaper(map) {
+    var escaper = function(match) {
+      return map[match];
+    };
+    // Regexes for identifying a key that needs to be escaped.
+    var source = '(?:' + keys(map).join('|') + ')';
+    var testRegexp = RegExp(source);
+    var replaceRegexp = RegExp(source, 'g');
+    return function(string) {
+      string = string == null ? '' : '' + string;
+      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+    };
+  }
+
+  // Internal list of HTML entities for escaping.
+  var escapeMap = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#x27;',
+    '`': '&#x60;'
+  };
+
+  // Function for escaping strings to HTML interpolation.
+  var _escape = createEscaper(escapeMap);
+
+  // Internal list of HTML entities for unescaping.
+  var unescapeMap = invert(escapeMap);
+
+  // Function for unescaping strings from HTML interpolation.
+  var _unescape = createEscaper(unescapeMap);
+
+  // By default, Underscore uses ERB-style template delimiters. Change the
+  // following template settings to use alternative delimiters.
+  var templateSettings = _$1.templateSettings = {
+    evaluate: /<%([\s\S]+?)%>/g,
+    interpolate: /<%=([\s\S]+?)%>/g,
+    escape: /<%-([\s\S]+?)%>/g
+  };
+
+  // When customizing `_.templateSettings`, if you don't want to define an
+  // interpolation, evaluation or escaping regex, we need one that is
+  // guaranteed not to match.
+  var noMatch = /(.)^/;
+
+  // Certain characters need to be escaped so that they can be put into a
+  // string literal.
+  var escapes = {
+    "'": "'",
+    '\\': '\\',
+    '\r': 'r',
+    '\n': 'n',
+    '\u2028': 'u2028',
+    '\u2029': 'u2029'
+  };
+
+  var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
+
+  function escapeChar(match) {
+    return '\\' + escapes[match];
+  }
+
+  // In order to prevent third-party code injection through
+  // `_.templateSettings.variable`, we test it against the following regular
+  // expression. It is intentionally a bit more liberal than just matching valid
+  // identifiers, but still prevents possible loopholes through defaults or
+  // destructuring assignment.
+  var bareIdentifier = /^\s*(\w|\$)+\s*$/;
+
+  // JavaScript micro-templating, similar to John Resig's implementation.
+  // Underscore templating handles arbitrary delimiters, preserves whitespace,
+  // and correctly escapes quotes within interpolated code.
+  // NB: `oldSettings` only exists for backwards compatibility.
+  function template(text, settings, oldSettings) {
+    if (!settings && oldSettings) settings = oldSettings;
+    settings = defaults({}, settings, _$1.templateSettings);
+
+    // Combine delimiters into one regular expression via alternation.
+    var matcher = RegExp([
+      (settings.escape || noMatch).source,
+      (settings.interpolate || noMatch).source,
+      (settings.evaluate || noMatch).source
+    ].join('|') + '|$', 'g');
+
+    // Compile the template source, escaping string literals appropriately.
+    var index = 0;
+    var source = "__p+='";
+    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+      source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
+      index = offset + match.length;
+
+      if (escape) {
+        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+      } else if (interpolate) {
+        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+      } else if (evaluate) {
+        source += "';\n" + evaluate + "\n__p+='";
+      }
+
+      // Adobe VMs need the match returned to produce the correct offset.
+      return match;
+    });
+    source += "';\n";
+
+    var argument = settings.variable;
+    if (argument) {
+      // Insure against third-party code injection. (CVE-2021-23358)
+      if (!bareIdentifier.test(argument)) throw new Error(
+        'variable is not a bare identifier: ' + argument
+      );
+    } else {
+      // If a variable is not specified, place data values in local scope.
+      source = 'with(obj||{}){\n' + source + '}\n';
+      argument = 'obj';
+    }
+
+    source = "var __t,__p='',__j=Array.prototype.join," +
+      "print=function(){__p+=__j.call(arguments,'');};\n" +
+      source + 'return __p;\n';
+
+    var render;
+    try {
+      render = new Function(argument, '_', source);
+    } catch (e) {
+      e.source = source;
+      throw e;
+    }
+
+    var template = function(data) {
+      return render.call(this, data, _$1);
+    };
+
+    // Provide the compiled source as a convenience for precompilation.
+    template.source = 'function(' + argument + '){\n' + source + '}';
+
+    return template;
+  }
+
+  // Traverses the children of `obj` along `path`. If a child is a function, it
+  // is invoked with its parent as context. Returns the value of the final
+  // child, or `fallback` if any child is undefined.
+  function result(obj, path, fallback) {
+    path = toPath(path);
+    var length = path.length;
+    if (!length) {
+      return isFunction$1(fallback) ? fallback.call(obj) : fallback;
+    }
+    for (var i = 0; i < length; i++) {
+      var prop = obj == null ? void 0 : obj[path[i]];
+      if (prop === void 0) {
+        prop = fallback;
+        i = length; // Ensure we don't continue iterating.
+      }
+      obj = isFunction$1(prop) ? prop.call(obj) : prop;
+    }
+    return obj;
+  }
+
+  // Generate a unique integer id (unique within the entire client session).
+  // Useful for temporary DOM ids.
+  var idCounter = 0;
+  function uniqueId(prefix) {
+    var id = ++idCounter + '';
+    return prefix ? prefix + id : id;
+  }
+
+  // Start chaining a wrapped Underscore object.
+  function chain(obj) {
+    var instance = _$1(obj);
+    instance._chain = true;
+    return instance;
+  }
+
+  // Internal function to execute `sourceFunc` bound to `context` with optional
+  // `args`. Determines whether to execute a function as a constructor or as a
+  // normal function.
+  function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
+    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
+    var self = baseCreate(sourceFunc.prototype);
+    var result = sourceFunc.apply(self, args);
+    if (isObject(result)) return result;
+    return self;
+  }
+
+  // Partially apply a function by creating a version that has had some of its
+  // arguments pre-filled, without changing its dynamic `this` context. `_` acts
+  // as a placeholder by default, allowing any combination of arguments to be
+  // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
+  var partial = restArguments(function(func, boundArgs) {
+    var placeholder = partial.placeholder;
+    var bound = function() {
+      var position = 0, length = boundArgs.length;
+      var args = Array(length);
+      for (var i = 0; i < length; i++) {
+        args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
+      }
+      while (position < arguments.length) args.push(arguments[position++]);
+      return executeBound(func, bound, this, this, args);
+    };
+    return bound;
+  });
+
+  partial.placeholder = _$1;
+
+  // Create a function bound to a given object (assigning `this`, and arguments,
+  // optionally).
+  var bind = restArguments(function(func, context, args) {
+    if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');
+    var bound = restArguments(function(callArgs) {
+      return executeBound(func, bound, context, this, args.concat(callArgs));
+    });
+    return bound;
+  });
+
+  // Internal helper for collection methods to determine whether a collection
+  // should be iterated as an array or as an object.
+  // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
+  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
+  var isArrayLike = createSizePropertyCheck(getLength);
+
+  // Internal implementation of a recursive `flatten` function.
+  function flatten$1(input, depth, strict, output) {
+    output = output || [];
+    if (!depth && depth !== 0) {
+      depth = Infinity;
+    } else if (depth <= 0) {
+      return output.concat(input);
+    }
+    var idx = output.length;
+    for (var i = 0, length = getLength(input); i < length; i++) {
+      var value = input[i];
+      if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
+        // Flatten current level of array or arguments object.
+        if (depth > 1) {
+          flatten$1(value, depth - 1, strict, output);
+          idx = output.length;
+        } else {
+          var j = 0, len = value.length;
+          while (j < len) output[idx++] = value[j++];
+        }
+      } else if (!strict) {
+        output[idx++] = value;
+      }
+    }
+    return output;
+  }
+
+  // Bind a number of an object's methods to that object. Remaining arguments
+  // are the method names to be bound. Useful for ensuring that all callbacks
+  // defined on an object belong to it.
+  var bindAll = restArguments(function(obj, keys) {
+    keys = flatten$1(keys, false, false);
+    var index = keys.length;
+    if (index < 1) throw new Error('bindAll must be passed function names');
+    while (index--) {
+      var key = keys[index];
+      obj[key] = bind(obj[key], obj);
+    }
+    return obj;
+  });
+
+  // Memoize an expensive function by storing its results.
+  function memoize(func, hasher) {
+    var memoize = function(key) {
+      var cache = memoize.cache;
+      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+      if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);
+      return cache[address];
+    };
+    memoize.cache = {};
+    return memoize;
+  }
+
+  // Delays a function for the given number of milliseconds, and then calls
+  // it with the arguments supplied.
+  var delay = restArguments(function(func, wait, args) {
+    return setTimeout(function() {
+      return func.apply(null, args);
+    }, wait);
+  });
+
+  // Defers a function, scheduling it to run after the current call stack has
+  // cleared.
+  var defer = partial(delay, _$1, 1);
+
+  // Returns a function, that, when invoked, will only be triggered at most once
+  // during a given window of time. Normally, the throttled function will run
+  // as much as it can, without ever going more than once per `wait` duration;
+  // but if you'd like to disable the execution on the leading edge, pass
+  // `{leading: false}`. To disable execution on the trailing edge, ditto.
+  function throttle(func, wait, options) {
+    var timeout, context, args, result;
+    var previous = 0;
+    if (!options) options = {};
+
+    var later = function() {
+      previous = options.leading === false ? 0 : now();
+      timeout = null;
+      result = func.apply(context, args);
+      if (!timeout) context = args = null;
+    };
+
+    var throttled = function() {
+      var _now = now();
+      if (!previous && options.leading === false) previous = _now;
+      var remaining = wait - (_now - previous);
+      context = this;
+      args = arguments;
+      if (remaining <= 0 || remaining > wait) {
+        if (timeout) {
+          clearTimeout(timeout);
+          timeout = null;
+        }
+        previous = _now;
+        result = func.apply(context, args);
+        if (!timeout) context = args = null;
+      } else if (!timeout && options.trailing !== false) {
+        timeout = setTimeout(later, remaining);
+      }
+      return result;
+    };
+
+    throttled.cancel = function() {
+      clearTimeout(timeout);
+      previous = 0;
+      timeout = context = args = null;
+    };
+
+    return throttled;
+  }
+
+  // When a sequence of calls of the returned function ends, the argument
+  // function is triggered. The end of a sequence is defined by the `wait`
+  // parameter. If `immediate` is passed, the argument function will be
+  // triggered at the beginning of the sequence instead of at the end.
+  function debounce(func, wait, immediate) {
+    var timeout, previous, args, result, context;
+
+    var later = function() {
+      var passed = now() - previous;
+      if (wait > passed) {
+        timeout = setTimeout(later, wait - passed);
+      } else {
+        timeout = null;
+        if (!immediate) result = func.apply(context, args);
+        // This check is needed because `func` can recursively invoke `debounced`.
+        if (!timeout) args = context = null;
+      }
+    };
+
+    var debounced = restArguments(function(_args) {
+      context = this;
+      args = _args;
+      previous = now();
+      if (!timeout) {
+        timeout = setTimeout(later, wait);
+        if (immediate) result = func.apply(context, args);
+      }
+      return result;
+    });
+
+    debounced.cancel = function() {
+      clearTimeout(timeout);
+      timeout = args = context = null;
+    };
+
+    return debounced;
+  }
+
+  // Returns the first function passed as an argument to the second,
+  // allowing you to adjust arguments, run code before and after, and
+  // conditionally execute the original function.
+  function wrap(func, wrapper) {
+    return partial(wrapper, func);
+  }
+
+  // Returns a negated version of the passed-in predicate.
+  function negate(predicate) {
+    return function() {
+      return !predicate.apply(this, arguments);
+    };
+  }
+
+  // Returns a function that is the composition of a list of functions, each
+  // consuming the return value of the function that follows.
+  function compose() {
+    var args = arguments;
+    var start = args.length - 1;
+    return function() {
+      var i = start;
+      var result = args[start].apply(this, arguments);
+      while (i--) result = args[i].call(this, result);
+      return result;
+    };
+  }
+
+  // Returns a function that will only be executed on and after the Nth call.
+  function after(times, func) {
+    return function() {
+      if (--times < 1) {
+        return func.apply(this, arguments);
+      }
+    };
+  }
+
+  // Returns a function that will only be executed up to (but not including) the
+  // Nth call.
+  function before(times, func) {
+    var memo;
+    return function() {
+      if (--times > 0) {
+        memo = func.apply(this, arguments);
+      }
+      if (times <= 1) func = null;
+      return memo;
+    };
+  }
+
+  // Returns a function that will be executed at most one time, no matter how
+  // often you call it. Useful for lazy initialization.
+  var once = partial(before, 2);
+
+  // Returns the first key on an object that passes a truth test.
+  function findKey(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = keys(obj), key;
+    for (var i = 0, length = _keys.length; i < length; i++) {
+      key = _keys[i];
+      if (predicate(obj[key], key, obj)) return key;
+    }
+  }
+
+  // Internal function to generate `_.findIndex` and `_.findLastIndex`.
+  function createPredicateIndexFinder(dir) {
+    return function(array, predicate, context) {
+      predicate = cb(predicate, context);
+      var length = getLength(array);
+      var index = dir > 0 ? 0 : length - 1;
+      for (; index >= 0 && index < length; index += dir) {
+        if (predicate(array[index], index, array)) return index;
+      }
+      return -1;
+    };
+  }
+
+  // Returns the first index on an array-like that passes a truth test.
+  var findIndex = createPredicateIndexFinder(1);
+
+  // Returns the last index on an array-like that passes a truth test.
+  var findLastIndex = createPredicateIndexFinder(-1);
+
+  // Use a comparator function to figure out the smallest index at which
+  // an object should be inserted so as to maintain order. Uses binary search.
+  function sortedIndex(array, obj, iteratee, context) {
+    iteratee = cb(iteratee, context, 1);
+    var value = iteratee(obj);
+    var low = 0, high = getLength(array);
+    while (low < high) {
+      var mid = Math.floor((low + high) / 2);
+      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
+    }
+    return low;
+  }
+
+  // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.
+  function createIndexFinder(dir, predicateFind, sortedIndex) {
+    return function(array, item, idx) {
+      var i = 0, length = getLength(array);
+      if (typeof idx == 'number') {
+        if (dir > 0) {
+          i = idx >= 0 ? idx : Math.max(idx + length, i);
+        } else {
+          length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
+        }
+      } else if (sortedIndex && idx && length) {
+        idx = sortedIndex(array, item);
+        return array[idx] === item ? idx : -1;
+      }
+      if (item !== item) {
+        idx = predicateFind(slice.call(array, i, length), isNaN$1);
+        return idx >= 0 ? idx + i : -1;
+      }
+      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
+        if (array[idx] === item) return idx;
+      }
+      return -1;
+    };
+  }
+
+  // Return the position of the first occurrence of an item in an array,
+  // or -1 if the item is not included in the array.
+  // If the array is large and already in sort order, pass `true`
+  // for **isSorted** to use binary search.
+  var indexOf = createIndexFinder(1, findIndex, sortedIndex);
+
+  // Return the position of the last occurrence of an item in an array,
+  // or -1 if the item is not included in the array.
+  var lastIndexOf = createIndexFinder(-1, findLastIndex);
+
+  // Return the first value which passes a truth test.
+  function find(obj, predicate, context) {
+    var keyFinder = isArrayLike(obj) ? findIndex : findKey;
+    var key = keyFinder(obj, predicate, context);
+    if (key !== void 0 && key !== -1) return obj[key];
+  }
+
+  // Convenience version of a common use case of `_.find`: getting the first
+  // object containing specific `key:value` pairs.
+  function findWhere(obj, attrs) {
+    return find(obj, matcher(attrs));
+  }
+
+  // The cornerstone for collection functions, an `each`
+  // implementation, aka `forEach`.
+  // Handles raw objects in addition to array-likes. Treats all
+  // sparse array-likes as if they were dense.
+  function each(obj, iteratee, context) {
+    iteratee = optimizeCb(iteratee, context);
+    var i, length;
+    if (isArrayLike(obj)) {
+      for (i = 0, length = obj.length; i < length; i++) {
+        iteratee(obj[i], i, obj);
+      }
+    } else {
+      var _keys = keys(obj);
+      for (i = 0, length = _keys.length; i < length; i++) {
+        iteratee(obj[_keys[i]], _keys[i], obj);
+      }
+    }
+    return obj;
+  }
+
+  // Return the results of applying the iteratee to each element.
+  function map(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length,
+        results = Array(length);
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      results[index] = iteratee(obj[currentKey], currentKey, obj);
+    }
+    return results;
+  }
+
+  // Internal helper to create a reducing function, iterating left or right.
+  function createReduce(dir) {
+    // Wrap code that reassigns argument variables in a separate function than
+    // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
+    var reducer = function(obj, iteratee, memo, initial) {
+      var _keys = !isArrayLike(obj) && keys(obj),
+          length = (_keys || obj).length,
+          index = dir > 0 ? 0 : length - 1;
+      if (!initial) {
+        memo = obj[_keys ? _keys[index] : index];
+        index += dir;
+      }
+      for (; index >= 0 && index < length; index += dir) {
+        var currentKey = _keys ? _keys[index] : index;
+        memo = iteratee(memo, obj[currentKey], currentKey, obj);
+      }
+      return memo;
+    };
+
+    return function(obj, iteratee, memo, context) {
+      var initial = arguments.length >= 3;
+      return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
+    };
+  }
+
+  // **Reduce** builds up a single result from a list of values, aka `inject`,
+  // or `foldl`.
+  var reduce = createReduce(1);
+
+  // The right-associative version of reduce, also known as `foldr`.
+  var reduceRight = createReduce(-1);
+
+  // Return all the elements that pass a truth test.
+  function filter(obj, predicate, context) {
+    var results = [];
+    predicate = cb(predicate, context);
+    each(obj, function(value, index, list) {
+      if (predicate(value, index, list)) results.push(value);
+    });
+    return results;
+  }
+
+  // Return all the elements for which a truth test fails.
+  function reject(obj, predicate, context) {
+    return filter(obj, negate(cb(predicate)), context);
+  }
+
+  // Determine whether all of the elements pass a truth test.
+  function every(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length;
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      if (!predicate(obj[currentKey], currentKey, obj)) return false;
+    }
+    return true;
+  }
+
+  // Determine if at least one element in the object passes a truth test.
+  function some(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length;
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      if (predicate(obj[currentKey], currentKey, obj)) return true;
+    }
+    return false;
+  }
+
+  // Determine if the array or object contains a given item (using `===`).
+  function contains(obj, item, fromIndex, guard) {
+    if (!isArrayLike(obj)) obj = values(obj);
+    if (typeof fromIndex != 'number' || guard) fromIndex = 0;
+    return indexOf(obj, item, fromIndex) >= 0;
+  }
+
+  // Invoke a method (with arguments) on every item in a collection.
+  var invoke = restArguments(function(obj, path, args) {
+    var contextPath, func;
+    if (isFunction$1(path)) {
+      func = path;
+    } else {
+      path = toPath(path);
+      contextPath = path.slice(0, -1);
+      path = path[path.length - 1];
+    }
+    return map(obj, function(context) {
+      var method = func;
+      if (!method) {
+        if (contextPath && contextPath.length) {
+          context = deepGet(context, contextPath);
+        }
+        if (context == null) return void 0;
+        method = context[path];
+      }
+      return method == null ? method : method.apply(context, args);
+    });
+  });
+
+  // Convenience version of a common use case of `_.map`: fetching a property.
+  function pluck(obj, key) {
+    return map(obj, property(key));
+  }
+
+  // Convenience version of a common use case of `_.filter`: selecting only
+  // objects containing specific `key:value` pairs.
+  function where(obj, attrs) {
+    return filter(obj, matcher(attrs));
+  }
+
+  // Return the maximum element (or element-based computation).
+  function max(obj, iteratee, context) {
+    var result = -Infinity, lastComputed = -Infinity,
+        value, computed;
+    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+      obj = isArrayLike(obj) ? obj : values(obj);
+      for (var i = 0, length = obj.length; i < length; i++) {
+        value = obj[i];
+        if (value != null && value > result) {
+          result = value;
+        }
+      }
+    } else {
+      iteratee = cb(iteratee, context);
+      each(obj, function(v, index, list) {
+        computed = iteratee(v, index, list);
+        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+          result = v;
+          lastComputed = computed;
+        }
+      });
+    }
+    return result;
+  }
+
+  // Return the minimum element (or element-based computation).
+  function min(obj, iteratee, context) {
+    var result = Infinity, lastComputed = Infinity,
+        value, computed;
+    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+      obj = isArrayLike(obj) ? obj : values(obj);
+      for (var i = 0, length = obj.length; i < length; i++) {
+        value = obj[i];
+        if (value != null && value < result) {
+          result = value;
+        }
+      }
+    } else {
+      iteratee = cb(iteratee, context);
+      each(obj, function(v, index, list) {
+        computed = iteratee(v, index, list);
+        if (computed < lastComputed || computed === Infinity && result === Infinity) {
+          result = v;
+          lastComputed = computed;
+        }
+      });
+    }
+    return result;
+  }
+
+  // Sample **n** random values from a collection using the modern version of the
+  // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+  // If **n** is not specified, returns a single random element.
+  // The internal `guard` argument allows it to work with `_.map`.
+  function sample(obj, n, guard) {
+    if (n == null || guard) {
+      if (!isArrayLike(obj)) obj = values(obj);
+      return obj[random(obj.length - 1)];
+    }
+    var sample = isArrayLike(obj) ? clone(obj) : values(obj);
+    var length = getLength(sample);
+    n = Math.max(Math.min(n, length), 0);
+    var last = length - 1;
+    for (var index = 0; index < n; index++) {
+      var rand = random(index, last);
+      var temp = sample[index];
+      sample[index] = sample[rand];
+      sample[rand] = temp;
+    }
+    return sample.slice(0, n);
+  }
+
+  // Shuffle a collection.
+  function shuffle(obj) {
+    return sample(obj, Infinity);
+  }
+
+  // Sort the object's values by a criterion produced by an iteratee.
+  function sortBy(obj, iteratee, context) {
+    var index = 0;
+    iteratee = cb(iteratee, context);
+    return pluck(map(obj, function(value, key, list) {
+      return {
+        value: value,
+        index: index++,
+        criteria: iteratee(value, key, list)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria;
+      var b = right.criteria;
+      if (a !== b) {
+        if (a > b || a === void 0) return 1;
+        if (a < b || b === void 0) return -1;
+      }
+      return left.index - right.index;
+    }), 'value');
+  }
+
+  // An internal function used for aggregate "group by" operations.
+  function group(behavior, partition) {
+    return function(obj, iteratee, context) {
+      var result = partition ? [[], []] : {};
+      iteratee = cb(iteratee, context);
+      each(obj, function(value, index) {
+        var key = iteratee(value, index, obj);
+        behavior(result, value, key);
+      });
+      return result;
+    };
+  }
+
+  // Groups the object's values by a criterion. Pass either a string attribute
+  // to group by, or a function that returns the criterion.
+  var groupBy = group(function(result, value, key) {
+    if (has$1(result, key)) result[key].push(value); else result[key] = [value];
+  });
+
+  // Indexes the object's values by a criterion, similar to `_.groupBy`, but for
+  // when you know that your index values will be unique.
+  var indexBy = group(function(result, value, key) {
+    result[key] = value;
+  });
+
+  // Counts instances of an object that group by a certain criterion. Pass
+  // either a string attribute to count by, or a function that returns the
+  // criterion.
+  var countBy = group(function(result, value, key) {
+    if (has$1(result, key)) result[key]++; else result[key] = 1;
+  });
+
+  // Split a collection into two arrays: one whose elements all pass the given
+  // truth test, and one whose elements all do not pass the truth test.
+  var partition = group(function(result, value, pass) {
+    result[pass ? 0 : 1].push(value);
+  }, true);
+
+  // Safely create a real, live array from anything iterable.
+  var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
+  function toArray(obj) {
+    if (!obj) return [];
+    if (isArray(obj)) return slice.call(obj);
+    if (isString(obj)) {
+      // Keep surrogate pair characters together.
+      return obj.match(reStrSymbol);
+    }
+    if (isArrayLike(obj)) return map(obj, identity);
+    return values(obj);
+  }
+
+  // Return the number of elements in a collection.
+  function size(obj) {
+    if (obj == null) return 0;
+    return isArrayLike(obj) ? obj.length : keys(obj).length;
+  }
+
+  // Internal `_.pick` helper function to determine whether `key` is an enumerable
+  // property name of `obj`.
+  function keyInObj(value, key, obj) {
+    return key in obj;
+  }
+
+  // Return a copy of the object only containing the allowed properties.
+  var pick = restArguments(function(obj, keys) {
+    var result = {}, iteratee = keys[0];
+    if (obj == null) return result;
+    if (isFunction$1(iteratee)) {
+      if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
+      keys = allKeys(obj);
+    } else {
+      iteratee = keyInObj;
+      keys = flatten$1(keys, false, false);
+      obj = Object(obj);
+    }
+    for (var i = 0, length = keys.length; i < length; i++) {
+      var key = keys[i];
+      var value = obj[key];
+      if (iteratee(value, key, obj)) result[key] = value;
+    }
+    return result;
+  });
+
+  // Return a copy of the object without the disallowed properties.
+  var omit = restArguments(function(obj, keys) {
+    var iteratee = keys[0], context;
+    if (isFunction$1(iteratee)) {
+      iteratee = negate(iteratee);
+      if (keys.length > 1) context = keys[1];
+    } else {
+      keys = map(flatten$1(keys, false, false), String);
+      iteratee = function(value, key) {
+        return !contains(keys, key);
+      };
+    }
+    return pick(obj, iteratee, context);
+  });
+
+  // Returns everything but the last entry of the array. Especially useful on
+  // the arguments object. Passing **n** will return all the values in
+  // the array, excluding the last N.
+  function initial(array, n, guard) {
+    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+  }
+
+  // Get the first element of an array. Passing **n** will return the first N
+  // values in the array. The **guard** check allows it to work with `_.map`.
+  function first(array, n, guard) {
+    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
+    if (n == null || guard) return array[0];
+    return initial(array, array.length - n);
+  }
+
+  // Returns everything but the first entry of the `array`. Especially useful on
+  // the `arguments` object. Passing an **n** will return the rest N values in the
+  // `array`.
+  function rest(array, n, guard) {
+    return slice.call(array, n == null || guard ? 1 : n);
+  }
+
+  // Get the last element of an array. Passing **n** will return the last N
+  // values in the array.
+  function last(array, n, guard) {
+    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
+    if (n == null || guard) return array[array.length - 1];
+    return rest(array, Math.max(0, array.length - n));
+  }
+
+  // Trim out all falsy values from an array.
+  function compact(array) {
+    return filter(array, Boolean);
+  }
+
+  // Flatten out an array, either recursively (by default), or up to `depth`.
+  // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
+  function flatten(array, depth) {
+    return flatten$1(array, depth, false);
+  }
+
+  // Take the difference between one array and a number of other arrays.
+  // Only the elements present in just the first array will remain.
+  var difference = restArguments(function(array, rest) {
+    rest = flatten$1(rest, true, true);
+    return filter(array, function(value){
+      return !contains(rest, value);
+    });
+  });
+
+  // Return a version of the array that does not contain the specified value(s).
+  var without = restArguments(function(array, otherArrays) {
+    return difference(array, otherArrays);
+  });
+
+  // Produce a duplicate-free version of the array. If the array has already
+  // been sorted, you have the option of using a faster algorithm.
+  // The faster algorithm will not work with an iteratee if the iteratee
+  // is not a one-to-one function, so providing an iteratee will disable
+  // the faster algorithm.
+  function uniq(array, isSorted, iteratee, context) {
+    if (!isBoolean(isSorted)) {
+      context = iteratee;
+      iteratee = isSorted;
+      isSorted = false;
+    }
+    if (iteratee != null) iteratee = cb(iteratee, context);
+    var result = [];
+    var seen = [];
+    for (var i = 0, length = getLength(array); i < length; i++) {
+      var value = array[i],
+          computed = iteratee ? iteratee(value, i, array) : value;
+      if (isSorted && !iteratee) {
+        if (!i || seen !== computed) result.push(value);
+        seen = computed;
+      } else if (iteratee) {
+        if (!contains(seen, computed)) {
+          seen.push(computed);
+          result.push(value);
+        }
+      } else if (!contains(result, value)) {
+        result.push(value);
+      }
+    }
+    return result;
+  }
+
+  // Produce an array that contains the union: each distinct element from all of
+  // the passed-in arrays.
+  var union = restArguments(function(arrays) {
+    return uniq(flatten$1(arrays, true, true));
+  });
+
+  // Produce an array that contains every item shared between all the
+  // passed-in arrays.
+  function intersection(array) {
+    var result = [];
+    var argsLength = arguments.length;
+    for (var i = 0, length = getLength(array); i < length; i++) {
+      var item = array[i];
+      if (contains(result, item)) continue;
+      var j;
+      for (j = 1; j < argsLength; j++) {
+        if (!contains(arguments[j], item)) break;
+      }
+      if (j === argsLength) result.push(item);
+    }
+    return result;
+  }
+
+  // Complement of zip. Unzip accepts an array of arrays and groups
+  // each array's elements on shared indices.
+  function unzip(array) {
+    var length = array && max(array, getLength).length || 0;
+    var result = Array(length);
+
+    for (var index = 0; index < length; index++) {
+      result[index] = pluck(array, index);
+    }
+    return result;
+  }
+
+  // Zip together multiple lists into a single array -- elements that share
+  // an index go together.
+  var zip = restArguments(unzip);
+
+  // Converts lists into objects. Pass either a single array of `[key, value]`
+  // pairs, or two parallel arrays of the same length -- one of keys, and one of
+  // the corresponding values. Passing by pairs is the reverse of `_.pairs`.
+  function object(list, values) {
+    var result = {};
+    for (var i = 0, length = getLength(list); i < length; i++) {
+      if (values) {
+        result[list[i]] = values[i];
+      } else {
+        result[list[i][0]] = list[i][1];
+      }
+    }
+    return result;
+  }
+
+  // Generate an integer Array containing an arithmetic progression. A port of
+  // the native Python `range()` function. See
+  // [the Python documentation](https://docs.python.org/library/functions.html#range).
+  function range(start, stop, step) {
+    if (stop == null) {
+      stop = start || 0;
+      start = 0;
+    }
+    if (!step) {
+      step = stop < start ? -1 : 1;
+    }
+
+    var length = Math.max(Math.ceil((stop - start) / step), 0);
+    var range = Array(length);
+
+    for (var idx = 0; idx < length; idx++, start += step) {
+      range[idx] = start;
+    }
+
+    return range;
+  }
+
+  // Chunk a single array into multiple arrays, each containing `count` or fewer
+  // items.
+  function chunk(array, count) {
+    if (count == null || count < 1) return [];
+    var result = [];
+    var i = 0, length = array.length;
+    while (i < length) {
+      result.push(slice.call(array, i, i += count));
+    }
+    return result;
+  }
+
+  // Helper function to continue chaining intermediate results.
+  function chainResult(instance, obj) {
+    return instance._chain ? _$1(obj).chain() : obj;
+  }
+
+  // Add your own custom functions to the Underscore object.
+  function mixin(obj) {
+    each(functions(obj), function(name) {
+      var func = _$1[name] = obj[name];
+      _$1.prototype[name] = function() {
+        var args = [this._wrapped];
+        push.apply(args, arguments);
+        return chainResult(this, func.apply(_$1, args));
+      };
+    });
+    return _$1;
+  }
+
+  // Add all mutator `Array` functions to the wrapper.
+  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+    var method = ArrayProto[name];
+    _$1.prototype[name] = function() {
+      var obj = this._wrapped;
+      if (obj != null) {
+        method.apply(obj, arguments);
+        if ((name === 'shift' || name === 'splice') && obj.length === 0) {
+          delete obj[0];
+        }
+      }
+      return chainResult(this, obj);
+    };
+  });
+
+  // Add all accessor `Array` functions to the wrapper.
+  each(['concat', 'join', 'slice'], function(name) {
+    var method = ArrayProto[name];
+    _$1.prototype[name] = function() {
+      var obj = this._wrapped;
+      if (obj != null) obj = method.apply(obj, arguments);
+      return chainResult(this, obj);
+    };
+  });
+
+  // Named Exports
+
+  var allExports = {
+    __proto__: null,
+    VERSION: VERSION,
+    restArguments: restArguments,
+    isObject: isObject,
+    isNull: isNull,
+    isUndefined: isUndefined,
+    isBoolean: isBoolean,
+    isElement: isElement,
+    isString: isString,
+    isNumber: isNumber,
+    isDate: isDate,
+    isRegExp: isRegExp,
+    isError: isError,
+    isSymbol: isSymbol,
+    isArrayBuffer: isArrayBuffer,
+    isDataView: isDataView$1,
+    isArray: isArray,
+    isFunction: isFunction$1,
+    isArguments: isArguments$1,
+    isFinite: isFinite$1,
+    isNaN: isNaN$1,
+    isTypedArray: isTypedArray$1,
+    isEmpty: isEmpty,
+    isMatch: isMatch,
+    isEqual: isEqual,
+    isMap: isMap,
+    isWeakMap: isWeakMap,
+    isSet: isSet,
+    isWeakSet: isWeakSet,
+    keys: keys,
+    allKeys: allKeys,
+    values: values,
+    pairs: pairs,
+    invert: invert,
+    functions: functions,
+    methods: functions,
+    extend: extend,
+    extendOwn: extendOwn,
+    assign: extendOwn,
+    defaults: defaults,
+    create: create,
+    clone: clone,
+    tap: tap,
+    get: get,
+    has: has,
+    mapObject: mapObject,
+    identity: identity,
+    constant: constant,
+    noop: noop,
+    toPath: toPath$1,
+    property: property,
+    propertyOf: propertyOf,
+    matcher: matcher,
+    matches: matcher,
+    times: times,
+    random: random,
+    now: now,
+    escape: _escape,
+    unescape: _unescape,
+    templateSettings: templateSettings,
+    template: template,
+    result: result,
+    uniqueId: uniqueId,
+    chain: chain,
+    iteratee: iteratee,
+    partial: partial,
+    bind: bind,
+    bindAll: bindAll,
+    memoize: memoize,
+    delay: delay,
+    defer: defer,
+    throttle: throttle,
+    debounce: debounce,
+    wrap: wrap,
+    negate: negate,
+    compose: compose,
+    after: after,
+    before: before,
+    once: once,
+    findKey: findKey,
+    findIndex: findIndex,
+    findLastIndex: findLastIndex,
+    sortedIndex: sortedIndex,
+    indexOf: indexOf,
+    lastIndexOf: lastIndexOf,
+    find: find,
+    detect: find,
+    findWhere: findWhere,
+    each: each,
+    forEach: each,
+    map: map,
+    collect: map,
+    reduce: reduce,
+    foldl: reduce,
+    inject: reduce,
+    reduceRight: reduceRight,
+    foldr: reduceRight,
+    filter: filter,
+    select: filter,
+    reject: reject,
+    every: every,
+    all: every,
+    some: some,
+    any: some,
+    contains: contains,
+    includes: contains,
+    include: contains,
+    invoke: invoke,
+    pluck: pluck,
+    where: where,
+    max: max,
+    min: min,
+    shuffle: shuffle,
+    sample: sample,
+    sortBy: sortBy,
+    groupBy: groupBy,
+    indexBy: indexBy,
+    countBy: countBy,
+    partition: partition,
+    toArray: toArray,
+    size: size,
+    pick: pick,
+    omit: omit,
+    first: first,
+    head: first,
+    take: first,
+    initial: initial,
+    last: last,
+    rest: rest,
+    tail: rest,
+    drop: rest,
+    compact: compact,
+    flatten: flatten,
+    without: without,
+    uniq: uniq,
+    unique: uniq,
+    union: union,
+    intersection: intersection,
+    difference: difference,
+    unzip: unzip,
+    transpose: unzip,
+    zip: zip,
+    object: object,
+    range: range,
+    chunk: chunk,
+    mixin: mixin,
+    'default': _$1
+  };
+
+  // Default Export
+
+  // Add all of the Underscore functions to the wrapper object.
+  var _ = mixin(allExports);
+  // Legacy Node.js API.
+  _._ = _;
+
+  return _;
+
+})));
+//# sourceMappingURL=underscore-umd.js.map
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/_static/underscore.js b/VimbaX/doc/VmbCPP_Function_Reference/_static/underscore.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf177d4285ab55fbc16406a5ec827b80e7eecd53
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/_static/underscore.js
@@ -0,0 +1,6 @@
+!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){
+//     Underscore.js 1.13.1
+//     https://underscorejs.org
+//     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
+//     Underscore may be freely distributed under the MIT license.
+var n="1.13.1",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u<t;u++)e[u]=arguments[u+r];switch(r){case 0:return n.call(this,e);case 1:return n.call(this,arguments[0],e);case 2:return n.call(this,arguments[0],arguments[1],e)}var o=Array(r+1);for(u=0;u<r;u++)o[u]=arguments[u];return o[r]=e,n.apply(this,o)}}function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}function w(n){return void 0===n}function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}function x(n){var r="[object "+n+"]";return function(n){return a.call(n)===r}}var S=x("String"),O=x("Number"),M=x("Date"),E=x("RegExp"),B=x("Error"),N=x("Symbol"),I=x("ArrayBuffer"),T=x("Function"),k=r.document&&r.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof k&&(T=function(n){return"function"==typeof n||!1});var D=T,R=x("Object"),F=l&&R(new DataView(new ArrayBuffer(8))),V="undefined"!=typeof Map&&R(new Map),P=x("DataView");var q=F?function(n){return null!=n&&D(n.getInt8)&&I(n.buffer)}:P,U=s||x("Array");function W(n,r){return null!=n&&f.call(n,r)}var z=x("Arguments");!function(){z(arguments)||(z=function(n){return W(n,"callee")})}();var L=z;function $(n){return O(n)&&y(n)}function C(n){return function(){return n}}function K(n){return function(r){var t=n(r);return"number"==typeof t&&t>=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]]=!0;return{contains:function(n){return r[n]},push:function(t){return r[t]=!0,n.push(t)}}}(r);var t=b.length,u=n.constructor,o=D(u)&&u.prototype||e,i="constructor";for(W(n,i)&&!r.contains(i)&&r.push(i);t--;)(i=b[t])in n&&n[i]!==o[i]&&!r.contains(i)&&r.push(i)}function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in n)W(n,t)&&r.push(t);return g&&Z(n,r),r}function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wrapped=n):new tn(n)}function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}tn.VERSION=n,tn.prototype.value=function(){return this._wrapped},tn.prototype.valueOf=tn.prototype.toJSON=tn.prototype.value,tn.prototype.toString=function(){return String(this._wrapped)};var un="[object DataView]";function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var o=typeof n;return("function"===o||"object"===o||"object"==typeof r)&&function n(r,t,e,o){r instanceof tn&&(r=r._wrapped);t instanceof tn&&(t=t._wrapped);var i=a.call(r);if(i!==a.call(t))return!1;if(F&&"[object Object]"==i&&q(r)){if(!q(t))return!1;i=un}switch(i){case"[object RegExp]":case"[object String]":return""+r==""+t;case"[object Number]":return+r!=+r?+t!=+t:0==+r?1/+r==1/t:+r==+t;case"[object Date]":case"[object Boolean]":return+r==+t;case"[object Symbol]":return u.valueOf.call(r)===u.valueOf.call(t);case"[object ArrayBuffer]":case un:return n(en(r),en(t),e,o)}var f="[object Array]"===i;if(!f&&X(r)){if(G(r)!==G(t))return!1;if(r.buffer===t.buffer&&r.byteOffset===t.byteOffset)return!0;f=!0}if(!f){if("object"!=typeof r||"object"!=typeof t)return!1;var c=r.constructor,l=t.constructor;if(c!==l&&!(D(c)&&c instanceof c&&D(l)&&l instanceof l)&&"constructor"in r&&"constructor"in t)return!1}o=o||[];var s=(e=e||[]).length;for(;s--;)if(e[s]===r)return o[s]===t;if(e.push(r),o.push(t),f){if((s=r.length)!==t.length)return!1;for(;s--;)if(!on(r[s],t[s],e,o))return!1}else{var p,v=nn(r);if(s=v.length,nn(t).length!==s)return!1;for(;s--;)if(p=v[s],!W(t,p)||!on(r[p],t[p],e,o))return!1}return e.pop(),o.pop(),!0}(n,r,t,e)}function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);return g&&Z(n,r),r}function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=an(t);if(Y(e))return!1;for(var u=0;u<r;u++)if(!D(t[n[u]]))return!1;return n!==hn||!D(t[cn])}}var cn="forEach",ln="has",sn=["clear","delete"],pn=["get",ln,"set"],vn=sn.concat(cn,pn),hn=sn.concat(pn),yn=["add"].concat(sn,cn,ln),dn=V?fn(vn):x("Map"),gn=V?fn(hn):x("WeakMap"),bn=V?fn(yn):x("Set"),mn=x("WeakSet");function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Object(t)),e<2||null==t)return t;for(var u=1;u<e;u++)for(var o=arguments[u],i=n(o),a=i.length,f=0;f<a;f++){var c=i[f];r&&void 0!==t[c]||(t[c]=o[c])}return t}}var xn=An(an),Sn=An(nn),On=An(an,!0);function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.prototype=n;var t=new r;return r.prototype=null,t}function En(n){return _(n)?U(n)?n.slice():xn({},n):n}function Bn(n){return U(n)?n:[n]}function Nn(n){return tn.toPath(n)}function In(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function Tn(n,r,t){var e=In(n,Nn(r));return w(e)?t:e}function kn(n){return n}function Dn(n){return n=Sn({},n),function(r){return rn(r,n)}}function Rn(n){return n=Nn(n),function(r){return In(r,n)}}function Fn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:return function(t){return n.call(r,t)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return function(){return n.apply(r,arguments)}}function Vn(n,r,t){return null==n?kn:D(n)?Fn(n,r,t):_(n)&&!U(n)?Dn(n):Rn(n)}function Pn(n,r){return Vn(n,r,1/0)}function qn(n,r,t){return tn.iteratee!==Pn?tn.iteratee(n,r):Vn(n,r,t)}function Un(){}function Wn(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}tn.toPath=Bn,tn.iteratee=Pn;var zn=Date.now||function(){return(new Date).getTime()};function Ln(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")",e=RegExp(t),u=RegExp(t,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,r):n}}var $n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a<o;a++)i[a]=r[a]===t?arguments[u++]:r[a];for(;u<arguments.length;)i.push(arguments[u++]);return nr(n,e,this,this,i)};return e}));rr.placeholder=tn;var tr=j((function(n,r,t){if(!D(n))throw new TypeError("Bind must be called on a function");var e=j((function(u){return nr(n,e,r,this,t.concat(u))}));return e})),er=K(Y);function ur(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}else r=1/0;for(var u=e.length,o=0,i=Y(n);o<i;o++){var a=n[o];if(er(a)&&(U(a)||L(a)))if(r>1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else t||(e[u++]=a)}return e}var or=j((function(n,r){var t=(r=ur(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=tr(n[e],n)}return n}));var ir=j((function(n,r,t){return setTimeout((function(){return n.apply(null,t)}),r)})),ar=rr(ir,tn,1);function fr(n){return function(){return!n.apply(this,arguments)}}function cr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function pr(n){return function(r,t,e){t=qn(t,e);for(var u=Y(r),o=n>0?0:u-1;o>=0&&o<u;o+=n)if(t(r[o],o,r))return o;return-1}}var vr=pr(1),hr=pr(-1);function yr(n,r,t,e){for(var u=(t=qn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function dr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==typeof o)n>0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o<f;o+=n)if(e[o]===u)return o;return-1}}var gr=dr(1,vr,yr),br=dr(-1,hr);function mr(n,r,t){var e=(er(n)?vr:sr)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function jr(n,r,t){var e,u;if(r=Fn(r,t),er(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=nn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function _r(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function wr(n){var r=function(r,t,e,u){var o=!er(r)&&nn(r),i=(o||r).length,a=n>0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a<i;a+=n){var f=o?o[a]:a;e=t(e,r[f],f,r)}return e};return function(n,t,e,u){var o=arguments.length>=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function Mr(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function Er(n,r,t,e){return er(n)||(n=jn(n)),("number"!=typeof t||e)&&(t=0),gr(n,r,t)>=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e>o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=Wn(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function kr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=qn(e,u),jr(t,(function(r,u){var i=e(r,u,t);n(o,r,i)})),o}}var Dr=kr((function(n,r,t){W(n,t)?n[t].push(r):n[t]=[r]})),Rr=kr((function(n,r,t){n[t]=r})),Fr=kr((function(n,r,t){W(n,t)?n[t]++:n[t]=1})),Vr=kr((function(n,r,t){n[t?0:1].push(r)}),!0),Pr=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function qr(n,r,t){return r in t}var Ur=j((function(n,r){var t={},e=r[0];if(null==n)return t;D(e)?(r.length>1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t})),Wr=j((function(n,r){var t,e=r[0];return D(e)?(e=fr(e),r.length>1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?Er(o,c)||(o.push(c),u.push(f)):Er(u,f)||u.push(f)}return u}var Gr=j((function(n){return Jr(ur(n,!0,!0))}));function Hr(n){for(var r=n&&Ir(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e]=Nr(n,e);return t}var Qr=j(Hr);function Xr(n,r){return n._chain?tn(r).chain():r}function Yr(n){return jr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototype[r]=function(){var n=[this._wrapped];return o.apply(n,arguments),Xr(this,t.apply(tn,n))}})),tn}jr(["pop","push","reverse","shift","sort","splice","unshift"],(function(n){var r=t[n];tn.prototype[n]=function(){var t=this._wrapped;return null!=t&&(r.apply(t,arguments),"shift"!==n&&"splice"!==n||0!==t.length||delete t[0]),Xr(this,t)}})),jr(["concat","join","slice"],(function(n){var r=t[n];tn.prototype[n]=function(){var n=this._wrapped;return null!=n&&(n=r.apply(n,arguments)),Xr(this,n)}}));var Zr=Yr({__proto__:null,VERSION:n,restArguments:j,isObject:_,isNull:function(n){return null===n},isUndefined:w,isBoolean:A,isElement:function(n){return!(!n||1!==n.nodeType)},isString:S,isNumber:O,isDate:M,isRegExp:E,isError:B,isSymbol:N,isArrayBuffer:I,isDataView:q,isArray:U,isFunction:D,isArguments:L,isFinite:function(n){return!N(n)&&d(n)&&!isNaN(parseFloat(n))},isNaN:$,isTypedArray:X,isEmpty:function(n){if(null==n)return!0;var r=Y(n);return"number"==typeof r&&(U(n)||S(n)||L(n))?0===r:0===Y(nn(n))},isMatch:rn,isEqual:function(n,r){return on(n,r)},isMap:dn,isWeakMap:gn,isSet:bn,isWeakSet:mn,keys:nn,allKeys:an,values:jn,pairs:function(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:_n,functions:wn,methods:wn,extend:xn,extendOwn:Sn,assign:Sn,defaults:On,create:function(n,r){var t=Mn(n);return r&&Sn(t,r),t},clone:En,tap:function(n,r){return r(n),n},get:Tn,has:function(n,r){for(var t=(r=Nn(r)).length,e=0;e<t;e++){var u=r[e];if(!W(n,u))return!1;n=n[u]}return!!t},mapObject:function(n,r,t){r=qn(r,t);for(var e=nn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},identity:kn,constant:C,noop:Un,toPath:Bn,property:Rn,propertyOf:function(n){return null==n?Un:function(r){return Tn(n,r)}},matcher:Dn,matches:Dn,times:function(n,r,t){var e=Array(Math.max(0,n));r=Fn(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:Wn,now:zn,escape:Cn,unescape:Kn,templateSettings:Jn,template:function(n,r,t){!r&&t&&(r=t),r=On({},r,tn.templateSettings);var e=RegExp([(r.escape||Gn).source,(r.interpolate||Gn).source,(r.evaluate||Gn).source].join("|")+"|$","g"),u=0,o="__p+='";n.replace(e,(function(r,t,e,i,a){return o+=n.slice(u,a).replace(Qn,Xn),u=a+r.length,t?o+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?o+="'+\n((__t=("+e+"))==null?'':__t)+\n'":i&&(o+="';\n"+i+"\n__p+='"),r})),o+="';\n";var i,a=r.variable;if(a){if(!Yn.test(a))throw new Error("variable is not a bare identifier: "+a)}else o="with(obj||{}){\n"+o+"}\n",a="obj";o="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{i=new Function(a,"_",o)}catch(n){throw n.source=o,n}var f=function(n){return i.call(this,n,tn)};return f.source="function("+a+"){\n"+o+"}",f},result:function(n,r,t){var e=(r=Nn(r)).length;if(!e)return D(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=D(o)?o.call(n):o}return n},uniqueId:function(n){var r=++Zn+"";return n?n+r:r},chain:function(n){var r=tn(n);return r._chain=!0,r},iteratee:Pn,partial:rr,bind:tr,bindAll:or,memoize:function(n,r){var t=function(e){var u=t.cache,o=""+(r?r.apply(this,arguments):e);return W(u,o)||(u[o]=n.apply(this,arguments)),u[o]};return t.cache={},t},delay:ir,defer:ar,throttle:function(n,r,t){var e,u,o,i,a=0;t||(t={});var f=function(){a=!1===t.leading?0:zn(),e=null,i=n.apply(u,o),e||(u=o=null)},c=function(){var c=zn();a||!1!==t.leading||(a=c);var l=r-(c-a);return u=this,o=arguments,l<=0||l>r?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e<o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))<i||u===1/0&&o===1/0)&&(o=n,i=u)}));return o},shuffle:function(n){return Tr(n,1/0)},sample:Tr,sortBy:function(n,r,t){var e=0;return r=qn(r,t),Nr(_r(n,(function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}})).sort((function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(t>e||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index})),"value")},groupBy:Dr,indexBy:Rr,countBy:Fr,partition:Vr,toArray:function(n){return n?U(n)?i.call(n):S(n)?n.match(Pr):er(n)?_r(n,kn):jn(n):[]},size:function(n){return null==n?0:er(n)?n.length:nn(n).length},pick:Ur,omit:Wr,first:Lr,head:Lr,take:Lr,initial:zr,last:function(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[n.length-1]:$r(n,Math.max(0,n.length-r))},rest:$r,tail:$r,drop:$r,compact:function(n){return Sr(n,Boolean)},flatten:function(n,r){return ur(n,r,!1)},without:Kr,uniq:Jr,unique:Jr,union:Gr,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=Y(n);e<u;e++){var o=n[e];if(!Er(r,o)){var i;for(i=1;i<t&&Er(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:Cr,unzip:Hr,transpose:Hr,zip:Qr,object:function(n,r){for(var t={},e=0,u=Y(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(i.call(n,e,e+=r));return t},mixin:Yr,default:tn});return Zr._=Zr,Zr}));
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/cppAPIReference.html b/VimbaX/doc/VmbCPP_Function_Reference/cppAPIReference.html
new file mode 100644
index 0000000000000000000000000000000000000000..63f350dabf354829e7938b9f1018816b2dd6d7fc
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/cppAPIReference.html
@@ -0,0 +1,6274 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>VmbCPP C++ API Function Reference &mdash; VmbCPP 1.0.2 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="prev" title="VmbCPP API Function Reference" href="index.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> VmbCPP
+          </a>
+              <div class="version">
+                1.0.2
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">VmbCPP C++ API Function Reference</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#classes">Classes</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#vmbsystem">VmbSystem</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#transportlayer">TransportLayer</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#interface">Interface</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#camera">Camera</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#localdevice">LocalDevice</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#stream">Stream</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#frame">Frame</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#featurecontainer">FeatureContainer</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#persistablefeaturecontainer">PersistableFeatureContainer</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#feature">Feature</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#interfaces">Interfaces</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#icameralistobserver">ICameraListObserver</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#iinterfacelistobserver">IInterfaceListObserver</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#icapturingmodule">ICapturingModule</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#ifeatureobserver">IFeatureObserver</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#iframeobserver">IFrameObserver</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#common-types-constants">Common Types &amp; Constants</a></li>
+</ul>
+</li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">VmbCPP</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>VmbCPP C++ API Function Reference</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vmbcpp-c-api-function-reference">
+<h1>VmbCPP C++ API Function Reference<a class="headerlink" href="#vmbcpp-c-api-function-reference" title="Permalink to this headline"></a></h1>
+<section id="classes">
+<h2>Classes<a class="headerlink" href="#classes" title="Permalink to this headline"></a></h2>
+<section id="vmbsystem">
+<h3>VmbSystem<a class="headerlink" href="#vmbsystem" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9VmbSystemE">
+<span id="_CPPv3N6VmbCPP9VmbSystemE"></span><span id="_CPPv2N6VmbCPP9VmbSystemE"></span><span id="VmbCPP::VmbSystem"></span><span class="target" id="classVmbCPP_1_1VmbSystem"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbSystem</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv46VmbCPP" title="VmbCPP"><span class="n"><span class="pre">VmbCPP</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP16FeatureContainerE" title="VmbCPP::FeatureContainer"><span class="n"><span class="pre">FeatureContainer</span></span></a><a class="headerlink" href="#_CPPv4N6VmbCPP9VmbSystemE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A class providing access to functionality and information about the Vmb API itself. </p>
+<p>A singleton object is provided by the GetInstance function.</p>
+<p>Access to any information other than the version of the VmbCPP API can only be accessed after calling Startup and before calling Shutdown.</p>
+<p>If a custom camera factory is used, this must be set before calling Startup. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9VmbSystem9VmbSystemERK9VmbSystem">
+<span id="_CPPv3N6VmbCPP9VmbSystem9VmbSystemERK9VmbSystem"></span><span id="_CPPv2N6VmbCPP9VmbSystem9VmbSystemERK9VmbSystem"></span><span id="VmbCPP::VmbSystem::VmbSystem__VmbSystemCR"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1a6270b113b362fff49bb0dc64c2f15dc9"></span><span class="sig-name descname"><span class="n"><span class="pre">VmbSystem</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP9VmbSystem9VmbSystemERK9VmbSystem" title="VmbCPP::VmbSystem::VmbSystem"><span class="n"><span class="pre">VmbSystem</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9VmbSystem9VmbSystemERK9VmbSystem" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the class is not copyable </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9VmbSystemaSERK9VmbSystem">
+<span id="_CPPv3N6VmbCPP9VmbSystemaSERK9VmbSystem"></span><span id="_CPPv2N6VmbCPP9VmbSystemaSERK9VmbSystem"></span><span id="VmbCPP::VmbSystem::assign-operator__VmbSystemCR"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1add5d8e65271eb51515b2097c45d20c09"></span><a class="reference internal" href="#_CPPv4N6VmbCPP9VmbSystemE" title="VmbCPP::VmbSystem"><span class="n"><span class="pre">VmbSystem</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP9VmbSystemE" title="VmbCPP::VmbSystem"><span class="n"><span class="pre">VmbSystem</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">system</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9VmbSystemaSERK9VmbSystem" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the class is not copyable </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1a643de629a944a62ee1eaf6c08c770c49"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">QueryVersion</span> <span class="pre">(VmbVersionInfo_t</span> <span class="pre">&amp;version)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Retrieve the version number of VmbCPP. </p>
+<p>This function can be called at any time, even before the API is initialized. All other version numbers can be queried via feature access</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>version</strong> – <strong>[out]</strong> Reference to the struct where version information is copied</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – always returned </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1a4864d2f8fc9bf54360c342031fff25b9"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">Startup</span> <span class="pre">(const</span> <span class="pre">VmbFilePathChar_t</span> <span class="pre">*pathConfiguration)</span></span></dt>
+<dd><p>Initialize the VmbCPP module. </p>
+<p>On successful return, the API is initialized; this is a necessary call. This method must be called before any other VmbCPP function is run.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pathConfiguration</strong> – <strong>[in]</strong> A string containing the semicolon separated list of paths. The paths contain directories to search for .cti files, paths to .cti files and optionally the path to a configuration xml file. If null is passed the parameter is considered to contain the values from the GENICAM_GENTLXX_PATH environment variable </p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorInternalFault</strong> – An internal fault occurred </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1ac5e684b285281c6ab2d4942d63c5096e"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">Startup</span> <span class="pre">()</span></span></dt>
+<dd><p>Initialize the VmbCPP module (overload, without starting parameter pathConfiguration) </p>
+<p>On successful return, the API is initialized; this is a necessary call. This method must be called before any other VmbCPP function is run.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorInternalFault</strong> – An internal fault occurred </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1ac28595e988f75cc9b290a907376eb020"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">Shutdown</span> <span class="pre">()</span></span></dt>
+<dd><p>Perform a shutdown of the API module. This will free some resources and deallocate all physical resources if applicable. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><p><strong>VmbErrorSuccess</strong> – always returned </p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9VmbSystem13GetInterfacesER18InterfacePtrVector">
+<span id="_CPPv3N6VmbCPP9VmbSystem13GetInterfacesER18InterfacePtrVector"></span><span id="_CPPv2N6VmbCPP9VmbSystem13GetInterfacesER18InterfacePtrVector"></span><span id="VmbCPP::VmbSystem::GetInterfaces__InterfacePtrVectorR"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1a85fc4124284110a7d0b0f3376224be55"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetInterfaces</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">InterfacePtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">interfaces</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP9VmbSystem13GetInterfacesER18InterfacePtrVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>List all the interfaces currently visible to VmbCPP. </p>
+<p>All the interfaces known via a GenTL are listed by this command and filled into the vector provided. If the vector is not empty, new elements will be appended. Interfaces can be adapter cards or frame grabber cards, for instance.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>interfaces</strong> – <strong>[out]</strong> Vector of shared pointer to <a class="reference internal" href="#classVmbCPP_1_1Interface"><span class="std std-ref">Interface</span></a> object</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version </p></li>
+<li><p><strong>VmbErrorMoreData</strong> – More data were returned than space was provided </p></li>
+<li><p><strong>VmbErrorInternalFault</strong> – An internal fault occurred </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1a32b4643d7909e889de605e4257a19988"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetInterfaceByID</span> <span class="pre">(const</span> <span class="pre">char</span> <span class="pre">*pID,</span> <span class="pre">InterfacePtr</span> <span class="pre">&amp;pInterface)</span></span></dt>
+<dd><p>Gets a specific interface identified by an ID. </p>
+<p>An interface known via a GenTL is listed by this command and filled into the pointer provided. <a class="reference internal" href="#classVmbCPP_1_1Interface"><span class="std std-ref">Interface</span></a> can be an adapter card or a frame grabber card, for instance.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pID</strong> – <strong>[in]</strong> The ID of the interface to get (returned by <a class="reference internal" href="#classVmbCPP_1_1VmbSystem_1a85fc4124284110a7d0b0f3376224be55"><span class="std std-ref">GetInterfaces()</span></a>) </p></li>
+<li><p><strong>pInterface</strong> – <strong>[out]</strong> Shared pointer to <a class="reference internal" href="#classVmbCPP_1_1Interface"><span class="std std-ref">Interface</span></a> object</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pID</span></code> is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version </p></li>
+<li><p><strong>VmbErrorMoreData</strong> – More data were returned than space was provided </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9VmbSystem16GetInterfaceByIDENSt9nullptr_tER12InterfacePtr">
+<span id="_CPPv3N6VmbCPP9VmbSystem16GetInterfaceByIDENSt9nullptr_tER12InterfacePtr"></span><span id="_CPPv2N6VmbCPP9VmbSystem16GetInterfaceByIDENSt9nullptr_tER12InterfacePtr"></span><span id="VmbCPP::VmbSystem::GetInterfaceByID__std::nullptr_t.InterfacePtrR"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1a8443d0c7492b3e33b4a929bdbb47765a"></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetInterfaceByID</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">nullptr_t</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP12InterfacePtrE" title="VmbCPP::InterfacePtr"><span class="n"><span class="pre">InterfacePtr</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9VmbSystem16GetInterfaceByIDENSt9nullptr_tER12InterfacePtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>null is not allowed as interface id parameter </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4I0EN6VmbCPP9VmbSystem16GetInterfaceByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR12InterfacePtr">
+<span id="_CPPv3I0EN6VmbCPP9VmbSystem16GetInterfaceByIDERK1TR12InterfacePtr"></span><span id="_CPPv2I0EN6VmbCPP9VmbSystem16GetInterfaceByIDERK1TR12InterfacePtr"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">T</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classVmbCPP_1_1VmbSystem_1a0d9561090e03fcba95611891960604b1"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">enable_if</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">CStringLikeTraits</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP9VmbSystem16GetInterfaceByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR12InterfacePtr" title="VmbCPP::VmbSystem::GetInterfaceByID::T"><span class="n"><span class="pre">T</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">IsCStringLike</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">type</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetInterfaceByID</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP9VmbSystem16GetInterfaceByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR12InterfacePtr" title="VmbCPP::VmbSystem::GetInterfaceByID::T"><span class="n"><span class="pre">T</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">id</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP12InterfacePtrE" title="VmbCPP::InterfacePtr"><span class="n"><span class="pre">InterfacePtr</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">pInterface</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I0EN6VmbCPP9VmbSystem16GetInterfaceByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR12InterfacePtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Convenience function for calling <a class="reference internal" href="#classVmbCPP_1_1VmbSystem_1a32b4643d7909e889de605e4257a19988"><span class="std std-ref">GetInterfaceByID(char const*, InterfacePtr&amp;)</span></a> with <code class="docutils literal notranslate"><span class="pre">id</span></code> converted to <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char*</span></code>. </p>
+<p>This is a convenience function for calling <code class="docutils literal notranslate"><span class="pre">GetInterfaceById(</span><span class="pre">CStringLikeTraits</span><span class="pre">&lt;T&gt;::ToString(id),</span> <span class="pre">pInterface)</span></code>.</p>
+<p>Types other than std::string may be passed to this function, if CStringLikeTraits is specialized before including this header.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Template Parameters</dt>
+<dd class="field-odd"><p><strong>T</strong> – a type that is considered to be a c string like </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9VmbSystem10GetCamerasER15CameraPtrVector">
+<span id="_CPPv3N6VmbCPP9VmbSystem10GetCamerasER15CameraPtrVector"></span><span id="_CPPv2N6VmbCPP9VmbSystem10GetCamerasER15CameraPtrVector"></span><span id="VmbCPP::VmbSystem::GetCameras__CameraPtrVectorR"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1a59719ef5d6ca62521801933084566790"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetCameras</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">CameraPtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">cameras</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP9VmbSystem10GetCamerasER15CameraPtrVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Retrieve a list of all cameras. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>cameras</strong> – <strong>[out]</strong> Vector of shared pointer to <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> object A camera known via a GenTL is listed by this command and filled into the pointer provided.</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version </p></li>
+<li><p><strong>VmbErrorMoreData</strong> – More data were returned than space was provided </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1aa845ca1728b5a46905c5006376a69221"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetCameraByID</span> <span class="pre">(const</span> <span class="pre">char</span> <span class="pre">*pID,</span> <span class="pre">CameraPtr</span> <span class="pre">&amp;pCamera)</span></span></dt>
+<dd><p>Gets a specific camera identified by an ID. The returned camera is still closed. </p>
+<p>A camera known via a GenTL is listed by this command and filled into the pointer provided. Only static properties of the camera can be fetched until the camera has been opened. “pID” can be one of the following:<ul class="simple">
+<li><p>”169.254.12.13” for an IP address,</p></li>
+<li><p>”000F314C4BE5” for a MAC address or</p></li>
+<li><p>”DEV_1234567890” for an ID as reported by VmbCPP</p></li>
+</ul>
+</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pID</strong> – <strong>[in]</strong> The ID of the camera to get </p></li>
+<li><p><strong>pCamera</strong> – <strong>[out]</strong> Shared pointer to camera object</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pID</span></code> is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version </p></li>
+<li><p><strong>VmbErrorMoreData</strong> – More data were returned than space was provided </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9VmbSystem13GetCameraByIDENSt9nullptr_tER9CameraPtr">
+<span id="_CPPv3N6VmbCPP9VmbSystem13GetCameraByIDENSt9nullptr_tER9CameraPtr"></span><span id="_CPPv2N6VmbCPP9VmbSystem13GetCameraByIDENSt9nullptr_tER9CameraPtr"></span><span id="VmbCPP::VmbSystem::GetCameraByID__std::nullptr_t.CameraPtrR"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1a35cd85d7d6fddef8cc4d47d4fe0b7b54"></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetCameraByID</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">nullptr_t</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP9CameraPtrE" title="VmbCPP::CameraPtr"><span class="n"><span class="pre">CameraPtr</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9VmbSystem13GetCameraByIDENSt9nullptr_tER9CameraPtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>It’s not possible to identify a camera given null as id. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4I0EN6VmbCPP9VmbSystem13GetCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr">
+<span id="_CPPv3I0EN6VmbCPP9VmbSystem13GetCameraByIDERK6IdType17VmbAccessModeTypeR9CameraPtr"></span><span id="_CPPv2I0EN6VmbCPP9VmbSystem13GetCameraByIDERK6IdType17VmbAccessModeTypeR9CameraPtr"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">IdType</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classVmbCPP_1_1VmbSystem_1aeb8edec7d02d29cf8eb22eb2b736bcbd"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">enable_if</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">CStringLikeTraits</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP9VmbSystem13GetCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr" title="VmbCPP::VmbSystem::GetCameraByID::IdType"><span class="n"><span class="pre">IdType</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">IsCStringLike</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">type</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetCameraByID</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP9VmbSystem13GetCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr" title="VmbCPP::VmbSystem::GetCameraByID::IdType"><span class="n"><span class="pre">IdType</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">id</span></span>, <a class="reference internal" href="#_CPPv417VmbAccessModeType" title="VmbAccessModeType"><span class="n"><span class="pre">VmbAccessModeType</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">eAccessMode</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP9CameraPtrE" title="VmbCPP::CameraPtr"><span class="n"><span class="pre">CameraPtr</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">pCamera</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I0EN6VmbCPP9VmbSystem13GetCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Convenience function for calling <a class="reference internal" href="#classVmbCPP_1_1VmbSystem_1aa845ca1728b5a46905c5006376a69221"><span class="std std-ref">GetCameraByID(char const*, CameraPtr&amp;)</span></a> with <code class="docutils literal notranslate"><span class="pre">id</span></code> converted to <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char*</span></code>. </p>
+<p>This is a convenience function for calling <code class="docutils literal notranslate"><span class="pre">GetCameraByID(</span><span class="pre">CStringLikeTraits</span><span class="pre">&lt;T&gt;::ToString(id),</span> <span class="pre">pCamera)</span></code>.</p>
+<p>Types other than std::string may be passed to this function, if CStringLikeTraits is specialized before including this header.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Template Parameters</dt>
+<dd class="field-odd"><p><strong>IdType</strong> – a type that is considered to be a c string like </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1aab1afc2a36b692b25b5e18ca8788c819"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">OpenCameraByID</span> <span class="pre">(const</span> <span class="pre">char</span> <span class="pre">*pID,</span> <span class="pre">VmbAccessModeType</span> <span class="pre">eAccessMode,</span> <span class="pre">CameraPtr</span> <span class="pre">&amp;pCamera)</span></span></dt>
+<dd><p>Gets a specific camera identified by an ID. The returned camera is already open. </p>
+<p>A camera can be opened if camera-specific control is required, such as I/O pins on a frame grabber card. Control is then possible via feature access methods. “pID” can be one of the following:<ul class="simple">
+<li><p>”169.254.12.13” for an IP address,</p></li>
+<li><p>”000F314C4BE5” for a MAC address or</p></li>
+<li><p>”DEV_1234567890” for an ID as reported by VmbCPP</p></li>
+</ul>
+</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pID</strong> – <strong>[in]</strong> The unique ID of the camera to get </p></li>
+<li><p><strong>eAccessMode</strong> – <strong>[in]</strong> The requested access mode </p></li>
+<li><p><strong>pCamera</strong> – <strong>[out]</strong> A shared pointer to the camera</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The designated interface cannot be found </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pID</span></code> is null. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9VmbSystem14OpenCameraByIDENSt9nullptr_tE17VmbAccessModeTypeR9CameraPtr">
+<span id="_CPPv3N6VmbCPP9VmbSystem14OpenCameraByIDENSt9nullptr_tE17VmbAccessModeTypeR9CameraPtr"></span><span id="_CPPv2N6VmbCPP9VmbSystem14OpenCameraByIDENSt9nullptr_tE17VmbAccessModeTypeR9CameraPtr"></span><span id="VmbCPP::VmbSystem::OpenCameraByID__std::nullptr_t.VmbAccessModeType.CameraPtrR"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1a47d9b786d7e03911488d2c27f110d078"></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OpenCameraByID</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">nullptr_t</span></span>, <a class="reference internal" href="#_CPPv417VmbAccessModeType" title="VmbAccessModeType"><span class="n"><span class="pre">VmbAccessModeType</span></span></a>, <a class="reference internal" href="#_CPPv4N6VmbCPP9CameraPtrE" title="VmbCPP::CameraPtr"><span class="n"><span class="pre">CameraPtr</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9VmbSystem14OpenCameraByIDENSt9nullptr_tE17VmbAccessModeTypeR9CameraPtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>It’s not possible to identify a camera given null as id. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4I0EN6VmbCPP9VmbSystem14OpenCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr">
+<span id="_CPPv3I0EN6VmbCPP9VmbSystem14OpenCameraByIDERK6IdType17VmbAccessModeTypeR9CameraPtr"></span><span id="_CPPv2I0EN6VmbCPP9VmbSystem14OpenCameraByIDERK6IdType17VmbAccessModeTypeR9CameraPtr"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">IdType</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classVmbCPP_1_1VmbSystem_1a7751657c3dc05888bcbae3d8a37dbade"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">enable_if</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">CStringLikeTraits</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP9VmbSystem14OpenCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr" title="VmbCPP::VmbSystem::OpenCameraByID::IdType"><span class="n"><span class="pre">IdType</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">IsCStringLike</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">type</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OpenCameraByID</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP9VmbSystem14OpenCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr" title="VmbCPP::VmbSystem::OpenCameraByID::IdType"><span class="n"><span class="pre">IdType</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">id</span></span>, <a class="reference internal" href="#_CPPv417VmbAccessModeType" title="VmbAccessModeType"><span class="n"><span class="pre">VmbAccessModeType</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">eAccessMode</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP9CameraPtrE" title="VmbCPP::CameraPtr"><span class="n"><span class="pre">CameraPtr</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">pCamera</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I0EN6VmbCPP9VmbSystem14OpenCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Convenience function for calling <a class="reference internal" href="#classVmbCPP_1_1VmbSystem_1aab1afc2a36b692b25b5e18ca8788c819"><span class="std std-ref">OpenCameraByID(char const*, VmbAccessModeType, CameraPtr&amp;)</span></a> with <code class="docutils literal notranslate"><span class="pre">id</span></code> converted to <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char*</span></code>. </p>
+<p>This is a convenience function for calling <code class="docutils literal notranslate"><span class="pre">OpenCameraByID(</span><span class="pre">CStringLikeTraits</span><span class="pre">&lt;T&gt;::ToString(id),</span> <span class="pre">eAccessMode,</span> <span class="pre">pCamera)</span></code>.</p>
+<p>Types other than std::string may be passed to this function, if CStringLikeTraits is specialized before including this header.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Template Parameters</dt>
+<dd class="field-odd"><p><strong>IdType</strong> – a type that is considered to be a c string like </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1ad2dd531436ef08b0aedfc33b2186fc9c"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RegisterCameraListObserver</span> <span class="pre">(const</span> <span class="pre">ICameraListObserverPtr</span> <span class="pre">&amp;pObserver)</span></span></dt>
+<dd><p>Registers an instance of camera observer whose CameraListChanged() method gets called as soon as a camera is plugged in, plugged out, or changes its access status. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pObserver</strong> – <strong>[in]</strong> A shared pointer to an object derived from <a class="reference internal" href="#classVmbCPP_1_1ICameraListObserver"><span class="std std-ref">ICameraListObserver</span></a></p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pObserver</span></code> is null. </p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If the very same observer is already registered </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1a6dfc3b697e2dd3b7b894a728d547cea0"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">UnregisterCameraListObserver</span> <span class="pre">(const</span> <span class="pre">ICameraListObserverPtr</span> <span class="pre">&amp;pObserver)</span></span></dt>
+<dd><p>Unregisters a camera observer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pObserver</strong> – <strong>[in]</strong> A shared pointer to an object derived from <a class="reference internal" href="#classVmbCPP_1_1ICameraListObserver"><span class="std std-ref">ICameraListObserver</span></a></p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorNotFound</strong> – If the observer is not registered </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pObserver</span></code> is null. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1ae7d30c9751111c7e770e3eaaca240828"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RegisterInterfaceListObserver</span> <span class="pre">(const</span> <span class="pre">IInterfaceListObserverPtr</span> <span class="pre">&amp;pObserver)</span></span></dt>
+<dd><p>Registers an instance of interface observer whose InterfaceListChanged() method gets called as soon as an interface is plugged in, plugged out, or changes its access status. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pObserver</strong> – <strong>[in]</strong> A shared pointer to an object derived from <a class="reference internal" href="#classVmbCPP_1_1IInterfaceListObserver"><span class="std std-ref">IInterfaceListObserver</span></a></p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pObserver</span></code> is null. </p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If the very same observer is already registered </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1a741fa5bda9855f93945df239829c5b45"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">UnregisterInterfaceListObserver</span> <span class="pre">(const</span> <span class="pre">IInterfaceListObserverPtr</span> <span class="pre">&amp;pObserver)</span></span></dt>
+<dd><p>Unregisters an interface observer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pObserver</strong> – <strong>[in]</strong> A shared pointer to an object derived from <a class="reference internal" href="#classVmbCPP_1_1IInterfaceListObserver"><span class="std std-ref">IInterfaceListObserver</span></a></p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorNotFound</strong> – If the observer is not registered </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pObserver</span></code> is null. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1a50ba5d84af3305dd3e863acc9a214d0b"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RegisterCameraFactory</span> <span class="pre">(const</span> <span class="pre">ICameraFactoryPtr</span> <span class="pre">&amp;pCameraFactory)</span></span></dt>
+<dd><p>Registers an instance of camera factory. When a custom camera factory is registered, all instances of type camera will be set up accordingly. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pCameraFactory</strong> – <strong>[in]</strong> A shared pointer to an object derived from ICameraFactory</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pCameraFactory</span></code> is null. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1ad6439c1f713d7aa052b95bab9f1750c5"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">UnregisterCameraFactory</span> <span class="pre">()</span></span></dt>
+<dd><p>Unregisters the camera factory. After unregistering the default camera class is used. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9VmbSystem18GetTransportLayersER23TransportLayerPtrVector">
+<span id="_CPPv3N6VmbCPP9VmbSystem18GetTransportLayersER23TransportLayerPtrVector"></span><span id="_CPPv2N6VmbCPP9VmbSystem18GetTransportLayersER23TransportLayerPtrVector"></span><span id="VmbCPP::VmbSystem::GetTransportLayers__TransportLayerPtrVectorR"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1ad1af27afe4b7f03a5cd244e56e80a9db"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetTransportLayers</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">TransportLayerPtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">transportLayers</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP9VmbSystem18GetTransportLayersER23TransportLayerPtrVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Retrieve a list of all transport layers. </p>
+<p>
+All transport layers known via GenTL are listed by this command and filled into the pointer provided.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>transportLayers</strong> – <strong>[out]</strong> Vector of shared pointer to <a class="reference internal" href="#classVmbCPP_1_1TransportLayer"><span class="std std-ref">TransportLayer</span></a> object</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version </p></li>
+<li><p><strong>VmbErrorMoreData</strong> – More data were returned than space was provided </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1a8134fb9f14b8871a7daa2108d471cef3"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetTransportLayerByID</span> <span class="pre">(const</span> <span class="pre">char</span> <span class="pre">*pID,</span> <span class="pre">TransportLayerPtr</span> <span class="pre">&amp;pTransportLayer)</span></span></dt>
+<dd><p>Gets a specific transport layer identified by an ID. </p>
+<p>An interface known via a GenTL is listed by this command and filled into the pointer provided. <a class="reference internal" href="#classVmbCPP_1_1Interface"><span class="std std-ref">Interface</span></a> can be an adapter card or a frame grabber card, for instance.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pID</strong> – <strong>[in]</strong> The ID of the interface to get (returned by <a class="reference internal" href="#classVmbCPP_1_1VmbSystem_1a85fc4124284110a7d0b0f3376224be55"><span class="std std-ref">GetInterfaces()</span></a>) </p></li>
+<li><p><strong>pTransportLayer</strong> – <strong>[out]</strong> Shared pointer to Transport Layer object</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pID</span></code> is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version </p></li>
+<li><p><strong>VmbErrorMoreData</strong> – More data were returned than space was provided </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR17TransportLayerPtr">
+<span id="_CPPv3I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDERK1TR17TransportLayerPtr"></span><span id="_CPPv2I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDERK1TR17TransportLayerPtr"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">T</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classVmbCPP_1_1VmbSystem_1a8dd8d1ffe7841e94b46e2d93b73e0832"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">enable_if</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">CStringLikeTraits</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR17TransportLayerPtr" title="VmbCPP::VmbSystem::GetTransportLayerByID::T"><span class="n"><span class="pre">T</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">IsCStringLike</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">type</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetTransportLayerByID</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR17TransportLayerPtr" title="VmbCPP::VmbSystem::GetTransportLayerByID::T"><span class="n"><span class="pre">T</span></span></a><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">id</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP17TransportLayerPtrE" title="VmbCPP::TransportLayerPtr"><span class="n"><span class="pre">TransportLayerPtr</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">pTransportLayer</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR17TransportLayerPtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Convenience function for calling <a class="reference internal" href="#classVmbCPP_1_1VmbSystem_1a8134fb9f14b8871a7daa2108d471cef3"><span class="std std-ref">GetTransportLayerByID(char const*, TransportLayerPtr&amp;)</span></a> with <code class="docutils literal notranslate"><span class="pre">id</span></code> converted to <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char*</span></code>. </p>
+<p>This is a convenience function for calling <code class="docutils literal notranslate"><span class="pre">GetTransportLayerByID(</span><span class="pre">CStringLikeTraits</span><span class="pre">&lt;T&gt;::ToString(id),</span> <span class="pre">pTransportLayer)</span></code>.</p>
+<p>Types other than std::string may be passed to this function, if CStringLikeTraits is specialized before including this header.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Template Parameters</dt>
+<dd class="field-odd"><p><strong>T</strong> – a type that is considered to be a c string like </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9nullptr_tER17TransportLayerPtr">
+<span id="_CPPv3N6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9nullptr_tER17TransportLayerPtr"></span><span id="_CPPv2N6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9nullptr_tER17TransportLayerPtr"></span><span id="VmbCPP::VmbSystem::GetTransportLayerByID__std::nullptr_t.TransportLayerPtrR"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1ab347c90c2c035a569be4b3e7b0cc201b"></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetTransportLayerByID</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">nullptr_t</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP17TransportLayerPtrE" title="VmbCPP::TransportLayerPtr"><span class="n"><span class="pre">TransportLayerPtr</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9nullptr_tER17TransportLayerPtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the transport layer cannot retrieved given null as id. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP9VmbSystem20GetCameraPtrByHandleEK11VmbHandle_t">
+<span id="_CPPv3NK6VmbCPP9VmbSystem20GetCameraPtrByHandleEK11VmbHandle_t"></span><span id="_CPPv2NK6VmbCPP9VmbSystem20GetCameraPtrByHandleEK11VmbHandle_t"></span><span id="VmbCPP::VmbSystem::GetCameraPtrByHandle__VmbHandle_tCC"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1afb051c7a885bd587fc04befb91f12d8c"></span><a class="reference internal" href="#_CPPv4N6VmbCPP9CameraPtrE" title="VmbCPP::CameraPtr"><span class="n"><span class="pre">CameraPtr</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetCameraPtrByHandle</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">handle</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP9VmbSystem20GetCameraPtrByHandleEK11VmbHandle_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Mapping of handle to CameraPtr. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP9VmbSystem9GetLoggerEv">
+<span id="_CPPv3NK6VmbCPP9VmbSystem9GetLoggerEv"></span><span id="_CPPv2NK6VmbCPP9VmbSystem9GetLoggerEv"></span><span id="VmbCPP::VmbSystem::GetLoggerC"></span><span class="target" id="classVmbCPP_1_1VmbSystem_1af7cfc2131701e0b2fc9193b87924dbb0"></span><span class="n"><span class="pre">Logger</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">GetLogger</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP9VmbSystem9GetLoggerEv" title="Permalink to this definition"></a><br /></dt>
+<dd><p>get the logger for the VmbCPP Api </p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>A pointer to the logger or null </p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-static-functions">Public Static Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1VmbSystem_1a66e4a407bd56cd5302cd94e7a22a8f31"></span><span class="sig-name descname"><span class="pre">static</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbSystem</span> <span class="pre">&amp;</span> <span class="pre">GetInstance</span> <span class="pre">()</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Returns a reference to the System singleton. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><p><strong>VmbSystem&amp;</strong> – </p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="transportlayer">
+<h3>TransportLayer<a class="headerlink" href="#transportlayer" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14TransportLayerE">
+<span id="_CPPv3N6VmbCPP14TransportLayerE"></span><span id="_CPPv2N6VmbCPP14TransportLayerE"></span><span id="VmbCPP::TransportLayer"></span><span class="target" id="classVmbCPP_1_1TransportLayer"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">TransportLayer</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv46VmbCPP" title="VmbCPP"><span class="n"><span class="pre">VmbCPP</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP27PersistableFeatureContainerE" title="VmbCPP::PersistableFeatureContainer"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></a><a class="headerlink" href="#_CPPv4N6VmbCPP14TransportLayerE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A class providing access to GenTL system module specific functionality and information. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-types">Public Types</p>
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14TransportLayer25GetInterfacesByTLFunctionE">
+<span id="_CPPv3N6VmbCPP14TransportLayer25GetInterfacesByTLFunctionE"></span><span id="_CPPv2N6VmbCPP14TransportLayer25GetInterfacesByTLFunctionE"></span><span id="VmbCPP::TransportLayer::GetInterfacesByTLFunction"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1a3a4a61caa4b8f2da804479e92aecbd1b"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">function</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="p"><span class="pre">(</span></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP14TransportLayerE" title="VmbCPP::TransportLayer"><span class="n"><span class="pre">TransportLayer</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">pTransportLayer</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP12InterfacePtrE" title="VmbCPP::InterfacePtr"><span class="n"><span class="pre">InterfacePtr</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">pInterfaces</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n"><span class="pre">size</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetInterfacesByTLFunction</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP14TransportLayer25GetInterfacesByTLFunctionE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for an std::function to retrieve a Transport Layer’s interfaces. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14TransportLayer22GetCamerasByTLFunctionE">
+<span id="_CPPv3N6VmbCPP14TransportLayer22GetCamerasByTLFunctionE"></span><span id="_CPPv2N6VmbCPP14TransportLayer22GetCamerasByTLFunctionE"></span><span id="VmbCPP::TransportLayer::GetCamerasByTLFunction"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1acf766bfa28e751419b2e1599ead29340"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">function</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="p"><span class="pre">(</span></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP14TransportLayerE" title="VmbCPP::TransportLayer"><span class="n"><span class="pre">TransportLayer</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">pTransportLayer</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP9CameraPtrE" title="VmbCPP::CameraPtr"><span class="n"><span class="pre">CameraPtr</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">pCameras</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n"><span class="pre">size</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetCamerasByTLFunction</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP14TransportLayer22GetCamerasByTLFunctionE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for an std::function to retrieve a Transport Layer’s cameras. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK23VmbTransportLayerInfo_t25GetInterfacesByTLFunction22GetCamerasByTLFunction">
+<span id="_CPPv3N6VmbCPP14TransportLayer14TransportLayerERK23VmbTransportLayerInfo_t25GetInterfacesByTLFunction22GetCamerasByTLFunction"></span><span id="_CPPv2N6VmbCPP14TransportLayer14TransportLayerERK23VmbTransportLayerInfo_t25GetInterfacesByTLFunction22GetCamerasByTLFunction"></span><span id="VmbCPP::TransportLayer::TransportLayer__VmbTransportLayerInfo_tCR.GetInterfacesByTLFunction.GetCamerasByTLFunction"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1a7e512684a1c28a8b978f26e789a20336"></span><span class="sig-name descname"><span class="n"><span class="pre">TransportLayer</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv423VmbTransportLayerInfo_t" title="VmbTransportLayerInfo_t"><span class="n"><span class="pre">VmbTransportLayerInfo_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">transportLayerInfo</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP14TransportLayer25GetInterfacesByTLFunctionE" title="VmbCPP::TransportLayer::GetInterfacesByTLFunction"><span class="n"><span class="pre">GetInterfacesByTLFunction</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">getInterfacesByTL</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP14TransportLayer22GetCamerasByTLFunctionE" title="VmbCPP::TransportLayer::GetCamerasByTLFunction"><span class="n"><span class="pre">GetCamerasByTLFunction</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">getCamerasByTL</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK23VmbTransportLayerInfo_t25GetInterfacesByTLFunction22GetCamerasByTLFunction" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Transport Layer constructor. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>transportLayerInfo</strong> – <strong>[out]</strong> The transport layer info struct </p></li>
+<li><p><strong>getInterfacesByTL</strong> – <strong>[in]</strong> The function used to find interfaces </p></li>
+<li><p><strong>getCamerasByTL</strong> – <strong>[in]</strong> The function used to find transport layers</p></li>
+</ul>
+</dd>
+<dt class="field-even">Throws</dt>
+<dd class="field-even"><p><span><span class="cpp-expr sig sig-inline cpp"><span class="n">std</span><span class="p">::</span><span class="n">bad_alloc</span></span></span> – not enough memory is available to store the data for the object constructed </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14TransportLayer14TransportLayerEv">
+<span id="_CPPv3N6VmbCPP14TransportLayer14TransportLayerEv"></span><span id="_CPPv2N6VmbCPP14TransportLayer14TransportLayerEv"></span><span id="VmbCPP::TransportLayer::TransportLayer"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1acdfd6254b98383ed87d8d6adebfb95ee"></span><span class="sig-name descname"><span class="n"><span class="pre">TransportLayer</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP14TransportLayer14TransportLayerEv" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the class is non-default-constructible </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK14TransportLayer">
+<span id="_CPPv3N6VmbCPP14TransportLayer14TransportLayerERK14TransportLayer"></span><span id="_CPPv2N6VmbCPP14TransportLayer14TransportLayerERK14TransportLayer"></span><span id="VmbCPP::TransportLayer::TransportLayer__TransportLayerCR"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1aea012ff0d37c59a275dde5c30df1ef01"></span><span class="sig-name descname"><span class="n"><span class="pre">TransportLayer</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK14TransportLayer" title="VmbCPP::TransportLayer::TransportLayer"><span class="n"><span class="pre">TransportLayer</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK14TransportLayer" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the class is non-copyable </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14TransportLayeraSERK14TransportLayer">
+<span id="_CPPv3N6VmbCPP14TransportLayeraSERK14TransportLayer"></span><span id="_CPPv2N6VmbCPP14TransportLayeraSERK14TransportLayer"></span><span id="VmbCPP::TransportLayer::assign-operator__TransportLayerCR"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1a6c00180c5acd3c8b2a8c97c664f9593d"></span><a class="reference internal" href="#_CPPv4N6VmbCPP14TransportLayerE" title="VmbCPP::TransportLayer"><span class="n"><span class="pre">TransportLayer</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP14TransportLayerE" title="VmbCPP::TransportLayer"><span class="n"><span class="pre">TransportLayer</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP14TransportLayeraSERK14TransportLayer" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the class is non-copyable </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14TransportLayer13GetInterfacesER18InterfacePtrVector">
+<span id="_CPPv3N6VmbCPP14TransportLayer13GetInterfacesER18InterfacePtrVector"></span><span id="_CPPv2N6VmbCPP14TransportLayer13GetInterfacesER18InterfacePtrVector"></span><span id="VmbCPP::TransportLayer::GetInterfaces__InterfacePtrVectorR"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1aa08462a8080f03b2b14e1fcfc7ee1aa6"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetInterfaces</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">InterfacePtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">interfaces</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP14TransportLayer13GetInterfacesER18InterfacePtrVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Get all interfaces related to this transport layer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>interfaces</strong> – <strong>[out]</strong> Returned list of related interfaces</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The handle is not valid </p></li>
+<li><p><strong>VmbErrorResources</strong> – Resources not available (e.g. memory) </p></li>
+<li><p><strong>VmbErrorInternalFault</strong> – An internal fault occurred </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14TransportLayer10GetCamerasER15CameraPtrVector">
+<span id="_CPPv3N6VmbCPP14TransportLayer10GetCamerasER15CameraPtrVector"></span><span id="_CPPv2N6VmbCPP14TransportLayer10GetCamerasER15CameraPtrVector"></span><span id="VmbCPP::TransportLayer::GetCameras__CameraPtrVectorR"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1a4b10f20ba3212b5a7914bfb8c1b93c9c"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetCameras</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">CameraPtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">cameras</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP14TransportLayer10GetCamerasER15CameraPtrVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Get all cameras related to this transport layer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>cameras</strong> – <strong>[out]</strong> Returned list of related cameras</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The handle is not valid </p></li>
+<li><p><strong>VmbErrorResources</strong> – Resources not available (e.g. memory) </p></li>
+<li><p><strong>VmbErrorInternalFault</strong> – An internal fault occurred </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP14TransportLayer5GetIDERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP14TransportLayer5GetIDERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP14TransportLayer5GetIDERNSt6stringE"></span><span id="VmbCPP::TransportLayer::GetID__ssRC"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1a23608b57399bfffecac7dd61908d5ae1"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetID</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">transportLayerID</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP14TransportLayer5GetIDERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the transport layer ID. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>transportLayerID</strong> – <strong>[out]</strong> The ID of the transport layer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP14TransportLayer7GetNameERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP14TransportLayer7GetNameERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP14TransportLayer7GetNameERNSt6stringE"></span><span id="VmbCPP::TransportLayer::GetName__ssRC"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1aff4d2b06410fc6c6a8c84125b76397b8"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetName</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">name</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP14TransportLayer7GetNameERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the transport layer name. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>name</strong> – <strong>[out]</strong> The name of the transport layer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP14TransportLayer12GetModelNameERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP14TransportLayer12GetModelNameERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP14TransportLayer12GetModelNameERNSt6stringE"></span><span id="VmbCPP::TransportLayer::GetModelName__ssRC"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1a29c3b0671ca7c5874053314f4a8efb52"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetModelName</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">modelName</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP14TransportLayer12GetModelNameERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the model name of the transport layer. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>modelName</strong> – <strong>[out]</strong> The model name of the transport layer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP14TransportLayer9GetVendorERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP14TransportLayer9GetVendorERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP14TransportLayer9GetVendorERNSt6stringE"></span><span id="VmbCPP::TransportLayer::GetVendor__ssRC"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1a6b48ad82769631efe9f692ef30596a12"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetVendor</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">vendor</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP14TransportLayer9GetVendorERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the vendor of the transport layer. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>vendor</strong> – <strong>[out]</strong> The vendor of the transport layer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP14TransportLayer10GetVersionERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP14TransportLayer10GetVersionERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP14TransportLayer10GetVersionERNSt6stringE"></span><span id="VmbCPP::TransportLayer::GetVersion__ssRC"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1ad9a5808beadec104f1725305703827fa"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetVersion</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">version</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP14TransportLayer10GetVersionERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the version of the transport layer. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>version</strong> – <strong>[out]</strong> The version of the transport layer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP14TransportLayer7GetPathERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP14TransportLayer7GetPathERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP14TransportLayer7GetPathERNSt6stringE"></span><span id="VmbCPP::TransportLayer::GetPath__ssRC"></span><span class="target" id="classVmbCPP_1_1TransportLayer_1afcd2b30e5d1cb63990b32b6a76e59fba"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetPath</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">path</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP14TransportLayer7GetPathERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the full path of the transport layer. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>path</strong> – <strong>[out]</strong> The full path of the transport layer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1TransportLayer_1a34777ad97f49098df3364ac526ebcf74"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetType</span> <span class="pre">(VmbTransportLayerType</span> <span class="pre">&amp;type)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Gets the type, e.g. GigE or USB of the transport layer. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>type</strong> – <strong>[out]</strong> The type of the transport layer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="interface">
+<h3>Interface<a class="headerlink" href="#interface" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9InterfaceE">
+<span id="_CPPv3N6VmbCPP9InterfaceE"></span><span id="_CPPv2N6VmbCPP9InterfaceE"></span><span id="VmbCPP::Interface"></span><span class="target" id="classVmbCPP_1_1Interface"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Interface</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv46VmbCPP" title="VmbCPP"><span class="n"><span class="pre">VmbCPP</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP27PersistableFeatureContainerE" title="VmbCPP::PersistableFeatureContainer"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></a><a class="headerlink" href="#_CPPv4N6VmbCPP9InterfaceE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An object representing the GenTL interface. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-types">Public Types</p>
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9Interface29GetCamerasByInterfaceFunctionE">
+<span id="_CPPv3N6VmbCPP9Interface29GetCamerasByInterfaceFunctionE"></span><span id="_CPPv2N6VmbCPP9Interface29GetCamerasByInterfaceFunctionE"></span><span class="target" id="classVmbCPP_1_1Interface_1a9c0b3f9725c40ad21cd51996daf0f03e"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetCamerasByInterfaceFunction</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">function</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="p"><span class="pre">(</span></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP9InterfaceE" title="VmbCPP::Interface"><span class="n"><span class="pre">Interface</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">pInterface</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP9CameraPtrE" title="VmbCPP::CameraPtr"><span class="n"><span class="pre">CameraPtr</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">pCameras</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n"><span class="pre">size</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9Interface29GetCamerasByInterfaceFunctionE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for an std::function to retrieve an <a class="reference internal" href="#classVmbCPP_1_1Interface"><span class="std std-ref">Interface</span></a>’s cameras. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9Interface9InterfaceEv">
+<span id="_CPPv3N6VmbCPP9Interface9InterfaceEv"></span><span id="_CPPv2N6VmbCPP9Interface9InterfaceEv"></span><span id="VmbCPP::Interface::Interface"></span><span class="target" id="classVmbCPP_1_1Interface_1ad1b4006c5661f46c520b5606225c0e36"></span><span class="sig-name descname"><span class="n"><span class="pre">Interface</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9Interface9InterfaceEv" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not default constructible. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9Interface9InterfaceERK9Interface">
+<span id="_CPPv3N6VmbCPP9Interface9InterfaceERK9Interface"></span><span id="_CPPv2N6VmbCPP9Interface9InterfaceERK9Interface"></span><span id="VmbCPP::Interface::Interface__InterfaceCR"></span><span class="target" id="classVmbCPP_1_1Interface_1a0e54b33b0e2a3ba7fcf6275cefcb1486"></span><span class="sig-name descname"><span class="n"><span class="pre">Interface</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP9Interface9InterfaceERK9Interface" title="VmbCPP::Interface::Interface"><span class="n"><span class="pre">Interface</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9Interface9InterfaceERK9Interface" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9InterfaceaSERK9Interface">
+<span id="_CPPv3N6VmbCPP9InterfaceaSERK9Interface"></span><span id="_CPPv2N6VmbCPP9InterfaceaSERK9Interface"></span><span id="VmbCPP::Interface::assign-operator__InterfaceCR"></span><span class="target" id="classVmbCPP_1_1Interface_1ab91a3388c6f4b989f0fba012408c7f7c"></span><a class="reference internal" href="#_CPPv4N6VmbCPP9InterfaceE" title="VmbCPP::Interface"><span class="n"><span class="pre">Interface</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP9InterfaceE" title="VmbCPP::Interface"><span class="n"><span class="pre">Interface</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9InterfaceaSERK9Interface" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9Interface9InterfaceERK18VmbInterfaceInfo_tRK17TransportLayerPtr29GetCamerasByInterfaceFunction">
+<span id="_CPPv3N6VmbCPP9Interface9InterfaceERK18VmbInterfaceInfo_tRK17TransportLayerPtr29GetCamerasByInterfaceFunction"></span><span id="_CPPv2N6VmbCPP9Interface9InterfaceERK18VmbInterfaceInfo_tRK17TransportLayerPtr29GetCamerasByInterfaceFunction"></span><span id="VmbCPP::Interface::Interface__VmbInterfaceInfo_tCR.TransportLayerPtrCR.GetCamerasByInterfaceFunction"></span><span class="target" id="classVmbCPP_1_1Interface_1aff60845ea138bcc76d12a3b45347ebc6"></span><span class="sig-name descname"><span class="n"><span class="pre">Interface</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv418VmbInterfaceInfo_t" title="VmbInterfaceInfo_t"><span class="n"><span class="pre">VmbInterfaceInfo_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">interfaceInfo</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP17TransportLayerPtrE" title="VmbCPP::TransportLayerPtr"><span class="n"><span class="pre">TransportLayerPtr</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">pTransportLayerPtr</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP9Interface29GetCamerasByInterfaceFunctionE" title="VmbCPP::Interface::GetCamerasByInterfaceFunction"><span class="n"><span class="pre">GetCamerasByInterfaceFunction</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">getCamerasByInterface</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP9Interface9InterfaceERK18VmbInterfaceInfo_tRK17TransportLayerPtr29GetCamerasByInterfaceFunction" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Create an interface given the interface info and info about related objects. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>interfaceInfo</strong> – <strong>[in]</strong> the information about the interface </p></li>
+<li><p><strong>pTransportLayerPtr</strong> – <strong>[in]</strong> the pointer to the transport layer providing this interface </p></li>
+<li><p><strong>getCamerasByInterface</strong> – <strong>[in]</strong> the function for retrieving the cameras of this interface </p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP9Interface5GetIDERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP9Interface5GetIDERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP9Interface5GetIDERNSt6stringE"></span><span id="VmbCPP::Interface::GetID__ssRC"></span><span class="target" id="classVmbCPP_1_1Interface_1a35a3370e423b88967dcf4e0461fb2a39"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetID</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">interfaceID</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP9Interface5GetIDERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the ID of an interface. </p>
+<p>
+This information remains static throughout the object’s lifetime </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>interfaceID</strong> – <strong>[out]</strong> The ID of the interface</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error</p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Interface_1a05b8d5108897d841d59789bf6c3d9ff5"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetType</span> <span class="pre">(VmbTransportLayerType</span> <span class="pre">&amp;type)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Gets the type, e.g. GigE or USB of an interface. </p>
+<p>
+This information remains static throughout the object’s lifetime </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>type</strong> – <strong>[out]</strong> The type of the interface</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error</p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP9Interface7GetNameERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP9Interface7GetNameERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP9Interface7GetNameERNSt6stringE"></span><span id="VmbCPP::Interface::GetName__ssRC"></span><span class="target" id="classVmbCPP_1_1Interface_1af9f734739ca7cc15619285384a79684f"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetName</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">name</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP9Interface7GetNameERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the name of an interface. </p>
+<p>
+Details: This information remains static throughout the object’s lifetime </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>name</strong> – <strong>[out]</strong> The name of the interface</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error</p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Interface_1a2c33a76437228de001a5fd4e6db65a29"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetTransportLayer</span> <span class="pre">(TransportLayerPtr</span> <span class="pre">&amp;pTransportLayer)</span> <span class="pre">const</span></span></dt>
+<dd><p>Gets the pointer of the related transport layer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pTransportLayer</strong> – <strong>[out]</strong> The pointer of the related transport layer.</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9Interface10GetCamerasER15CameraPtrVector">
+<span id="_CPPv3N6VmbCPP9Interface10GetCamerasER15CameraPtrVector"></span><span id="_CPPv2N6VmbCPP9Interface10GetCamerasER15CameraPtrVector"></span><span id="VmbCPP::Interface::GetCameras__CameraPtrVectorR"></span><span class="target" id="classVmbCPP_1_1Interface_1a4ba30a4140b6abaa20b8e77e2e1c5849"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetCameras</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">CameraPtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">cameras</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP9Interface10GetCamerasER15CameraPtrVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Get all cameras related to this transport layer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>cameras</strong> – <strong>[out]</strong> Returned list of related cameras</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The handle is not valid </p></li>
+<li><p><strong>VmbErrorResources</strong> – Resources not available (e.g. memory) </p></li>
+<li><p><strong>VmbErrorInternalFault</strong> – An internal fault occurred </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="camera">
+<h3>Camera<a class="headerlink" href="#camera" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6CameraE">
+<span id="_CPPv3N6VmbCPP6CameraE"></span><span id="_CPPv2N6VmbCPP6CameraE"></span><span id="VmbCPP::Camera"></span><span class="target" id="classVmbCPP_1_1Camera"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Camera</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv46VmbCPP" title="VmbCPP"><span class="n"><span class="pre">VmbCPP</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP27PersistableFeatureContainerE" title="VmbCPP::PersistableFeatureContainer"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></a><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv46VmbCPP" title="VmbCPP"><span class="n"><span class="pre">VmbCPP</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP16ICapturingModuleE" title="VmbCPP::ICapturingModule"><span class="n"><span class="pre">ICapturingModule</span></span></a><a class="headerlink" href="#_CPPv4N6VmbCPP6CameraE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A class for accessing camera related functionality. </p>
+<p>This object corresponds to the GenTL remote device. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6Camera6CameraERK15VmbCameraInfo_tRK12InterfacePtr">
+<span id="_CPPv3N6VmbCPP6Camera6CameraERK15VmbCameraInfo_tRK12InterfacePtr"></span><span id="_CPPv2N6VmbCPP6Camera6CameraERK15VmbCameraInfo_tRK12InterfacePtr"></span><span id="VmbCPP::Camera::Camera__VmbCameraInfo_tCR.InterfacePtrCR"></span><span class="target" id="classVmbCPP_1_1Camera_1ab8b2a229cc8ab62a275d3a4cb4d9da69"></span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Camera</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv415VmbCameraInfo_t" title="VmbCameraInfo_t"><span class="n"><span class="pre">VmbCameraInfo_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">cameraInfo</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP12InterfacePtrE" title="VmbCPP::InterfacePtr"><span class="n"><span class="pre">InterfacePtr</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">pInterface</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP6Camera6CameraERK15VmbCameraInfo_tRK12InterfacePtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Creates an instance of class <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> given the interface info object received from the Vmb C API. </p>
+<p>If “IP_OR_MAC&#64;” occurs in <a class="reference internal" href="#structVmbCameraInfo_1abaaff803bd593e5ec7e5a1711d2f86bc"><span class="std std-ref">VmbCameraInfo::cameraIdString</span></a> of <code class="docutils literal notranslate"><span class="pre">cameraInfo</span></code>, the camera id used to identify the camera is the substring starting after the first occurence of this string with the next occurence of the same string removed, should it exist. Otherwise <a class="reference internal" href="#structVmbCameraInfo_1a4ce8aeaa6602df59e829b1ddb7fe7e4d"><span class="std std-ref">VmbCameraInfo::cameraIdExtended</span></a> is used to identify the camera.</p>
+<p>If <a class="reference internal" href="#structVmbCameraInfo_1a4ce8aeaa6602df59e829b1ddb7fe7e4d"><span class="std std-ref">VmbCameraInfo::cameraIdExtended</span></a> is used, it needs to match the extended id retrieved from the VmbC API.</p>
+<p>Any strings in <code class="docutils literal notranslate"><span class="pre">cameraInfo</span></code> that are null are treated as the empty string.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>cameraInfo</strong> – <strong>[in]</strong> The struct containing the information about the camera. </p></li>
+<li><p><strong>pInterface</strong> – <strong>[in]</strong> The shared pointer to the interface providing the camera</p></li>
+</ul>
+</dd>
+<dt class="field-even">Throws</dt>
+<dd class="field-even"><p><span><span class="cpp-expr sig sig-inline cpp"><span class="n">std</span><span class="p">::</span><span class="n">bad_alloc</span></span></span> – The memory available is insufficient to allocate the storage required to store the data. </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6CameraD0Ev">
+<span id="_CPPv3N6VmbCPP6CameraD0Ev"></span><span id="_CPPv2N6VmbCPP6CameraD0Ev"></span><span id="VmbCPP::Camera::~Camera"></span><span class="target" id="classVmbCPP_1_1Camera_1a9b7066d94ef2b5e3a967add773937862"></span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">~Camera</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP6CameraD0Ev" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Destroys an instance of class <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a>. </p>
+<p>Destroying a camera implicitly closes it beforehand. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a3a8c5dba7f7c802adb89768d0b35db92"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">Open</span> <span class="pre">(VmbAccessModeType</span> <span class="pre">accessMode)</span></span></dt>
+<dd><p>Opens the specified camera. </p>
+<p>A camera may be opened in a specific access mode. This mode determines the level of control you have on a camera.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>accessMode</strong> – <strong>[in]</strong> Access mode determines the level of control you have on the camera</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from frame callback or chunk access callback</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The designated camera cannot be found </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a6d3ee4774aa1d5c91773b12e9b0a5b1e"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">Close</span> <span class="pre">()</span></span></dt>
+<dd><p>Closes the specified camera. </p>
+<p>Depending on the access mode this camera was opened in, events are killed, callbacks are unregistered, the frame queue is cleared, and camera control is released.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened before the current command</p></li>
+<li><p><strong>VmbErrorInUse</strong> – The camera is currently in use with VmbChunkDataAccess</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The handle does not correspond to an open camera</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from frame callback or chunk access callback </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP6Camera5GetIDERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP6Camera5GetIDERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP6Camera5GetIDERNSt6stringE"></span><span id="VmbCPP::Camera::GetID__ssRC"></span><span class="target" id="classVmbCPP_1_1Camera_1a18bb25c27e20df5716ee47b3f6363baa"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetID</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">cameraID</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP6Camera5GetIDERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the ID of a camera. </p>
+<p>The id is the id choosen by the transport layer. There’s no guarantee it’s human readable.</p>
+<p>The id same id may be used by multiple cameras provided by different interfaces.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>cameraID</strong> – <strong>[out]</strong> The string the camera id is written to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorResources</strong> – The attempt to allocate memory for storing the output failed. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP6Camera13GetExtendedIDERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP6Camera13GetExtendedIDERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP6Camera13GetExtendedIDERNSt6stringE"></span><span id="VmbCPP::Camera::GetExtendedID__ssRC"></span><span class="target" id="classVmbCPP_1_1Camera_1a0e46671a511cd80a5e8ddff702e6b1d1"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetExtendedID</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">extendedID</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP6Camera13GetExtendedIDERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the extenden ID of a camera (globally unique identifier) </p>
+<p>The extended id is unique for the camera. The same physical camera may be listed multiple times with different extended ids, if multiple ctis or multiple interfaces provide access to the device.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>extendedID</strong> – <strong>[out]</strong> The the extended id is written to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorResources</strong> – The attempt to allocate memory for storing the output failed. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP6Camera7GetNameERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP6Camera7GetNameERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP6Camera7GetNameERNSt6stringE"></span><span id="VmbCPP::Camera::GetName__ssRC"></span><span class="target" id="classVmbCPP_1_1Camera_1ab4b360bc39fae80efce8381327a2645d"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetName</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">name</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP6Camera7GetNameERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the display name of a camera. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>name</strong> – <strong>[out]</strong> The string the name of the camera is written to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorResources</strong> – The attempt to allocate memory for storing the output failed. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP6Camera8GetModelERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP6Camera8GetModelERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP6Camera8GetModelERNSt6stringE"></span><span id="VmbCPP::Camera::GetModel__ssRC"></span><span class="target" id="classVmbCPP_1_1Camera_1a95739f04688392e9f7cee403e19a30d0"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetModel</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">model</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP6Camera8GetModelERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the model name of a camera. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>model</strong> – <strong>[out]</strong> The string the model name of the camera is written to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorResources</strong> – The attempt to allocate memory for storing the output failed. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP6Camera15GetSerialNumberERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP6Camera15GetSerialNumberERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP6Camera15GetSerialNumberERNSt6stringE"></span><span id="VmbCPP::Camera::GetSerialNumber__ssRC"></span><span class="target" id="classVmbCPP_1_1Camera_1a76e50040d46adc9a01b7263ac588517a"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetSerialNumber</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">serialNumber</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP6Camera15GetSerialNumberERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the serial number of a camera. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>serialNumber</strong> – <strong>[out]</strong> The string to write the serial number of the camera to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorResources</strong> – The attempt to allocate memory for storing the output failed. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP6Camera14GetInterfaceIDERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP6Camera14GetInterfaceIDERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP6Camera14GetInterfaceIDERNSt6stringE"></span><span id="VmbCPP::Camera::GetInterfaceID__ssRC"></span><span class="target" id="classVmbCPP_1_1Camera_1aa5283d3302d2c7774862d241702606e3"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetInterfaceID</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">interfaceID</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP6Camera14GetInterfaceIDERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the interface ID of a camera. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This information remains static throughout the object’s lifetime</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>interfaceID</strong> – <strong>[out]</strong> The string to write the interface ID to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorResources</strong> – The attempt to allocate memory for storing the output failed. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1ab527fe96c805423680d70a25276401eb"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetInterfaceType</span> <span class="pre">(VmbTransportLayerType</span> <span class="pre">&amp;interfaceType)</span> <span class="pre">const</span></span></dt>
+<dd><p>Gets the type of the interface the camera is connected to. And therefore the type of the camera itself. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>interfaceType</strong> – <strong>[out]</strong> A reference to the interface type variable to write the output to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – No interface is currently associated with this object </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a793d92891fac45292b2da802382764b5"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetInterface</span> <span class="pre">(InterfacePtr</span> <span class="pre">&amp;pInterface)</span> <span class="pre">const</span></span></dt>
+<dd><p>Gets the shared pointer to the interface providing the camera. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pInterface</strong> – <strong>[out]</strong> The shared pointer to assign the interface assigned to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – No interface is currently associated with this object </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1ad45c7e3af0d4e6b1133cbbca4406d8fe"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetLocalDevice</span> <span class="pre">(LocalDevicePtr</span> <span class="pre">&amp;pLocalDevice)</span></span></dt>
+<dd><p>Gets the shared pointer to the local device module associated with this camera. </p>
+<p>This information is only available for open cameras.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pLocalDevice</strong> – <strong>[out]</strong> The shared pointer the local device is assigned to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not opened </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a56e6ba6d3b3f51168005ddf56023db88"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetTransportLayer</span> <span class="pre">(TransportLayerPtr</span> <span class="pre">&amp;pTransportLayer)</span> <span class="pre">const</span></span></dt>
+<dd><p>Gets the pointer of the related transport layer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pTransportLayer</strong> – <strong>[out]</strong> The shared pointer the transport layer is assigned to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – No interface is currently associated with this object or the interface is not associated with a transport layer </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6Camera10GetStreamsER15StreamPtrVector">
+<span id="_CPPv3N6VmbCPP6Camera10GetStreamsER15StreamPtrVector"></span><span id="_CPPv2N6VmbCPP6Camera10GetStreamsER15StreamPtrVector"></span><span id="VmbCPP::Camera::GetStreams__StreamPtrVectorR"></span><span class="target" id="classVmbCPP_1_1Camera_1a24777e7853d40547e688103776f42644"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetStreams</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">StreamPtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">streams</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP6Camera10GetStreamsER15StreamPtrVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the vector with the available streams of the camera. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>streams</strong> – <strong>[out]</strong> The vector the available streams of the camera are written to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorResources</strong> – The attempt to allocate memory for storing the output failed. </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open </p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a3b6fa7980009aeed2917834a80a6f377"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetPermittedAccess</span> <span class="pre">(VmbAccessModeType</span> <span class="pre">&amp;permittedAccess)</span> <span class="pre">const</span></span></dt>
+<dd><p>Gets the access modes of a camera. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>permittedAccess</strong> – <strong>[out]</strong> The possible access modes of the camera</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – No camera with the given id is found </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVector">
+<span id="_CPPv3NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVector"></span><span id="_CPPv2NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVector"></span><span id="VmbCPP::Camera::ReadMemory__VmbUint64_tCR.UcharVectorRC"></span><span class="target" id="classVmbCPP_1_1Camera_1ab3e8c97f1d584792549d13f5e503e82a"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ReadMemory</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint64_t" title="VmbUint64_t"><span class="n"><span class="pre">VmbUint64_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">address</span></span>, <span class="n"><span class="pre">UcharVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">buffer</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Reads a block of memory. The number of bytes to read is determined by the size of the provided buffer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>address</strong> – <strong>[in]</strong> The address to read from </p></li>
+<li><p><strong>buffer</strong> – <strong>[out]</strong> The returned data as vector</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If all requested bytes have been read</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – Vector <code class="docutils literal notranslate"><span class="pre">buffer</span></code> is empty.</p></li>
+<li><p><strong>VmbErrorIncomplete</strong> – If at least one, but not all bytes have been read. See overload <code class="docutils literal notranslate"><a class="reference internal" href="#classVmbCPP_1_1Camera_1aba7ed5a2b1dbc55f0e01c8b481bc6208"><span class="std std-ref"><span class="pre">ReadMemory(const</span> <span class="pre">VmbUint64_t&amp;,</span> <span class="pre">UcharVector&amp;,</span> <span class="pre">VmbUint32_t&amp;)</span> <span class="pre">const</span></span></a></code>.</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVectorR11VmbUint32_t">
+<span id="_CPPv3NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVectorR11VmbUint32_t"></span><span id="_CPPv2NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVectorR11VmbUint32_t"></span><span id="VmbCPP::Camera::ReadMemory__VmbUint64_tCR.UcharVectorR.VmbUint32_tRC"></span><span class="target" id="classVmbCPP_1_1Camera_1aba7ed5a2b1dbc55f0e01c8b481bc6208"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ReadMemory</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint64_t" title="VmbUint64_t"><span class="n"><span class="pre">VmbUint64_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">address</span></span>, <span class="n"><span class="pre">UcharVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">buffer</span></span>, <a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">completeReads</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVectorR11VmbUint32_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Same as <code class="docutils literal notranslate"><span class="pre">ReadMemory(const</span> <span class="pre">Uint64Vector&amp;,</span> <span class="pre">UcharVector&amp;)</span> <span class="pre">const</span></code>, but returns the number of bytes successfully read in case of an error <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139ae16c860ef921bbc1e0eac46efce66c82"><span class="std std-ref">VmbErrorIncomplete</span></a>. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>address</strong> – <strong>[in]</strong> The address to read from </p></li>
+<li><p><strong>buffer</strong> – <strong>[out]</strong> The returned data as vector </p></li>
+<li><p><strong>completeReads</strong> – <strong>[out]</strong> The number of successfully read bytes</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If all requested bytes have been read</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – Vector <code class="docutils literal notranslate"><span class="pre">buffer</span></code> is empty.</p></li>
+<li><p><strong>VmbErrorIncomplete</strong> – If at least one, but not all bytes have been read. See overload <code class="docutils literal notranslate"><a class="reference internal" href="#classVmbCPP_1_1Camera_1aba7ed5a2b1dbc55f0e01c8b481bc6208"><span class="std std-ref"><span class="pre">ReadMemory(const</span> <span class="pre">VmbUint64_t&amp;,</span> <span class="pre">UcharVector&amp;,</span> <span class="pre">VmbUint32_t&amp;)</span> <span class="pre">const</span></span></a></code>.</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVector">
+<span id="_CPPv3N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVector"></span><span id="_CPPv2N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVector"></span><span id="VmbCPP::Camera::WriteMemory__VmbUint64_tCR.UcharVectorCR"></span><span class="target" id="classVmbCPP_1_1Camera_1a2826e1ba4c1fc4c2bff518387fa9c9eb"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">WriteMemory</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint64_t" title="VmbUint64_t"><span class="n"><span class="pre">VmbUint64_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">address</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">UcharVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">buffer</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Writes a block of memory. The number of bytes to write is determined by the size of the provided buffer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>address</strong> – <strong>[in]</strong> The address to write to </p></li>
+<li><p><strong>buffer</strong> – <strong>[in]</strong> The data to write as vector</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If all requested bytes have been written</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – Vector <code class="docutils literal notranslate"><span class="pre">buffer</span></code> is empty.</p></li>
+<li><p><strong>VmbErrorIncomplete</strong> – If at least one, but not all bytes have been written. See overload <code class="docutils literal notranslate"><a class="reference internal" href="#classVmbCPP_1_1Camera_1a117e5970d4b9c03b1bcf3c563ce7f9c4"><span class="std std-ref"><span class="pre">WriteMemory(const</span> <span class="pre">VmbUint64_t&amp;,</span> <span class="pre">const</span> <span class="pre">UcharVector&amp;,</span> <span class="pre">VmbUint32_t&amp;)</span></span></a></code>.</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVectorR11VmbUint32_t">
+<span id="_CPPv3N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVectorR11VmbUint32_t"></span><span id="_CPPv2N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVectorR11VmbUint32_t"></span><span id="VmbCPP::Camera::WriteMemory__VmbUint64_tCR.UcharVectorCR.VmbUint32_tR"></span><span class="target" id="classVmbCPP_1_1Camera_1a117e5970d4b9c03b1bcf3c563ce7f9c4"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">WriteMemory</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint64_t" title="VmbUint64_t"><span class="n"><span class="pre">VmbUint64_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">address</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">UcharVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">buffer</span></span>, <a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">sizeComplete</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVectorR11VmbUint32_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Same as WriteMemory(const Uint64Vector&amp;, const UcharVector&amp;), but returns the number of bytes successfully written in case of an error <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139ae16c860ef921bbc1e0eac46efce66c82"><span class="std std-ref">VmbErrorIncomplete</span></a>. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>address</strong> – <strong>[in]</strong> The address to write to </p></li>
+<li><p><strong>buffer</strong> – <strong>[in]</strong> The data to write as vector </p></li>
+<li><p><strong>sizeComplete</strong> – <strong>[out]</strong> The number of successfully written bytes</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If all requested bytes have been written</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – Vector <code class="docutils literal notranslate"><span class="pre">buffer</span></code> is empty.</p></li>
+<li><p><strong>VmbErrorIncomplete</strong> – If at least one, but not all bytes have been written.</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1aaeff1a592c5b0a73325649bb14d3cded"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">AcquireSingleImage</span> <span class="pre">(FramePtr</span> <span class="pre">&amp;pFrame,</span> <span class="pre">VmbUint32_t</span> <span class="pre">timeout,</span> <span class="pre">FrameAllocationMode</span> <span class="pre">allocationMode=FrameAllocation_AnnounceFrame)</span></span></dt>
+<dd><p>Gets one image synchronously. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pFrame</strong> – <strong>[out]</strong> The frame that gets filled </p></li>
+<li><p><strong>timeout</strong> – <strong>[in]</strong> The time in milliseconds to wait until the frame got filled </p></li>
+<li><p><strong>allocationMode</strong> – <strong>[in]</strong> The frame allocation mode</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pFrame</span></code> is null.</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorInUse</strong> – If the frame was queued with a frame callback</p></li>
+<li><p><strong>VmbErrorTimeout</strong> – Call timed out</p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_t19FrameAllocationMode">
+<span id="_CPPv3N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_t19FrameAllocationMode"></span><span id="_CPPv2N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_t19FrameAllocationMode"></span><span id="VmbCPP::Camera::AcquireMultipleImages__FramePtrVectorR.VmbUint32_t.FrameAllocationMode"></span><span class="target" id="classVmbCPP_1_1Camera_1a7c4109ac150ba09a40eaa01b60dbe561"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">AcquireMultipleImages</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">FramePtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">frames</span></span>, <a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <span class="n"><span class="pre">FrameAllocationMode</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">allocationMode</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">FrameAllocation_AnnounceFrame</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_t19FrameAllocationMode" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets a certain number of images synchronously. </p>
+<p>The size of the frame vector determines the number of frames to use.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>frames</strong> – <strong>[inout]</strong> The frames that get filled </p></li>
+<li><p><strong>timeout</strong> – <strong>[in]</strong> The time in milliseconds to wait until one frame got filled </p></li>
+<li><p><strong>allocationMode</strong> – <strong>[in]</strong> The frame allocation mode</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorInternalFault</strong> – Filling all the frames was not successful.</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – Vector <code class="docutils literal notranslate"><span class="pre">frames</span></code> is empty or one of the frames is null.</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorInUse</strong> – If the frame was queued with a frame callback</p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_tR11VmbUint32_t19FrameAllocationMode">
+<span id="_CPPv3N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_tR11VmbUint32_t19FrameAllocationMode"></span><span id="_CPPv2N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_tR11VmbUint32_t19FrameAllocationMode"></span><span id="VmbCPP::Camera::AcquireMultipleImages__FramePtrVectorR.VmbUint32_t.VmbUint32_tR.FrameAllocationMode"></span><span class="target" id="classVmbCPP_1_1Camera_1a7647995c5c81c4e7f27d707c383a0e19"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">AcquireMultipleImages</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">FramePtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">frames</span></span>, <a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">timeout</span></span>, <a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">numFramesCompleted</span></span>, <span class="n"><span class="pre">FrameAllocationMode</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">allocationMode</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">FrameAllocation_AnnounceFrame</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_tR11VmbUint32_t19FrameAllocationMode" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Same as <code class="docutils literal notranslate"><a class="reference internal" href="#classVmbCPP_1_1Camera_1a7c4109ac150ba09a40eaa01b60dbe561"><span class="std std-ref"><span class="pre">AcquireMultipleImages(FramePtrVector&amp;,</span> <span class="pre">VmbUint32_t,</span> <span class="pre">FrameAllocationMode)</span></span></a></code>, but returns the number of frames that were filled completely. </p>
+<p>The size of the frame vector determines the number of frames to use. On return, <code class="docutils literal notranslate"><span class="pre">numFramesCompleted</span></code> holds the number of frames actually filled.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>frames</strong> – <strong>[inout]</strong> The frames to fill </p></li>
+<li><p><strong>timeout</strong> – <strong>[in]</strong> The time in milliseconds to wait until one frame got filled </p></li>
+<li><p><strong>numFramesCompleted</strong> – <strong>[out]</strong> The number of frames that were filled completely </p></li>
+<li><p><strong>allocationMode</strong> – <strong>[in]</strong> The frame allocation mode</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorInternalFault</strong> – Filling all the frames was not successful.</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – Vector <code class="docutils literal notranslate"><span class="pre">frames</span></code> is empty or one of the frames is null.</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorInUse</strong> – If the frame was queued with a frame callback</p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1ad1798d40048c683a50429e8c5869966a"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">StartContinuousImageAcquisition</span> <span class="pre">(int</span> <span class="pre">bufferCount,</span> <span class="pre">const</span> <span class="pre">IFrameObserverPtr</span> <span class="pre">&amp;pObserver,</span> <span class="pre">FrameAllocationMode</span> <span class="pre">allocationMode=FrameAllocation_AnnounceFrame)</span></span></dt>
+<dd><p>Starts streaming and allocates the needed frames. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>bufferCount</strong> – <strong>[in]</strong> The number of frames to use </p></li>
+<li><p><strong>pObserver</strong> – <strong>[out]</strong> The observer to use on arrival of acquired frames </p></li>
+<li><p><strong>allocationMode</strong> – <strong>[in]</strong> The frame allocation mode</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open </p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1ab8be1dcbcf75a6dc32eebe3e182b97c7"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">StopContinuousImageAcquisition</span> <span class="pre">()</span></span></dt>
+<dd><p>Stops streaming and deallocates the frames used. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1aa591c65f2a4a6c4cd9d8ec00ea456e95"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetPayloadSize</span> <span class="pre">(VmbUint32_t</span> <span class="pre">&amp;nPayloadSize)</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Get the necessary payload size for buffer allocation. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>nPayloadSize</strong> – <strong>[in]</strong> The variable to write the payload size to</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1aec80a0f2095406c3fb1b208ca0c9ffa3"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">AnnounceFrame</span> <span class="pre">(const</span> <span class="pre">FramePtr</span> <span class="pre">&amp;pFrame)</span> <span class="pre">override</span></span></dt>
+<dd><p>Announces a frame to the API that may be queued for frame capturing later. </p>
+<p>The frame is announced for the first stream.</p>
+<p>Allows some preparation for frames like DMA preparation depending on the transport layer. The order in which the frames are announced is not taken in consideration by the API.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFrame</strong> – <strong>[in]</strong> Shared pointer to a frame to announce</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pFrame</span></code> is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open </p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a761a6c87aa28d7b64545a631bcc3b0a5"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RevokeFrame</span> <span class="pre">(const</span> <span class="pre">FramePtr</span> <span class="pre">&amp;pFrame)</span> <span class="pre">override</span></span></dt>
+<dd><p>Revoke a frame from the API. </p>
+<p>The frame is revoked for the first stream.</p>
+<p>The referenced frame is removed from the pool of frames for capturing images.</p>
+<p>A call to FlushQueue may be required for the frame to be revoked successfully.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFrame</strong> – <strong>[in]</strong> Shared pointer to a frame that is to be removed from the list of announced frames</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given frame pointer is not valid </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pFrame</span></code> is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open </p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1abf27084dc334cd972f66da736460d489"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RevokeAllFrames</span> <span class="pre">()</span> <span class="pre">override</span></span></dt>
+<dd><p>Revoke all frames announced for the first stream of this camera. </p>
+<p>A call to FlushQueue may be required to be able to revoke all frames.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open </p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1ab9e53550d2eebfb0d78737b62dcb701c"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">QueueFrame</span> <span class="pre">(const</span> <span class="pre">FramePtr</span> <span class="pre">&amp;pFrame)</span> <span class="pre">override</span></span></dt>
+<dd><p>Queues a frame that may be filled during frame capturing. </p>
+<p>The frame is queued for the first stream.</p>
+<p>The given frame is put into a queue that will be filled sequentially. The order in which the frames are filled is determined by the order in which they are queued. If the frame was announced with <a class="reference internal" href="#classVmbCPP_1_1Camera_1aec80a0f2095406c3fb1b208ca0c9ffa3"><span class="std std-ref">AnnounceFrame()</span></a> before, the application has to ensure that the frame is also revoked by calling <a class="reference internal" href="#classVmbCPP_1_1Camera_1a761a6c87aa28d7b64545a631bcc3b0a5"><span class="std std-ref">RevokeFrame()</span></a> or RevokeAll() when cleaning up.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFrame</strong> – <strong>[in]</strong> A shared pointer to a frame</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open </p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given frame is not valid </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pFrame</span></code> is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API </p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – StopContinuousImageAcquisition is currently running in another thread </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a51cde82d1a42d2ca70aba24536b6a420"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">FlushQueue</span> <span class="pre">()</span> <span class="pre">override</span></span></dt>
+<dd><p>Flushes the capture queue. </p>
+<p>Works with the first available stream.</p>
+<p>All currently queued frames will be returned to the user, leaving no frames in the input queue. After this call, no frame notification will occur until frames are queued again.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open </p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a70d75db4e7639d04db3fbcc04cd31aa2"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">StartCapture</span> <span class="pre">()</span> <span class="pre">override</span></span></dt>
+<dd><p>Prepare the API for incoming frames from this camera. Works with the first available stream. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open </p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a25eb6e2cc6f010173b9ef74de5de42c9"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">EndCapture</span> <span class="pre">()</span> <span class="pre">override</span></span></dt>
+<dd><p>Stops the API from being able to receive frames from this camera. The frame callback will not be called any more. Works with the first stream of the camera. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – The camera is currently not open </p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The camera does not provide any streams </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a07375b73eb6a43fd56c1f2f7cbf9f43d"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">bool</span> <span class="pre">ExtendedIdEquals</span> <span class="pre">(char</span> <span class="pre">const</span> <span class="pre">*extendedId)</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Checks if the extended id of this object matches a string. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>extendedId</strong> – <strong>[in]</strong> the id to to compare the extended id of this object with</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>true, if <code class="docutils literal notranslate"><span class="pre">extendedId</span></code> is non-null and matches the extended id of this object, false otherwise. </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6Camera6CameraERK6Camera">
+<span id="_CPPv3N6VmbCPP6Camera6CameraERK6Camera"></span><span id="_CPPv2N6VmbCPP6Camera6CameraERK6Camera"></span><span id="VmbCPP::Camera::Camera__CameraCR"></span><span class="target" id="classVmbCPP_1_1Camera_1a387abae235d3432a8d52640e3d23703c"></span><span class="sig-name descname"><span class="n"><span class="pre">Camera</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP6Camera6CameraERK6Camera" title="VmbCPP::Camera::Camera"><span class="n"><span class="pre">Camera</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP6Camera6CameraERK6Camera" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The object is non-copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6CameraaSERK6Camera">
+<span id="_CPPv3N6VmbCPP6CameraaSERK6Camera"></span><span id="_CPPv2N6VmbCPP6CameraaSERK6Camera"></span><span id="VmbCPP::Camera::assign-operator__CameraCR"></span><span class="target" id="classVmbCPP_1_1Camera_1a1da177ee09b46f274cb1f29a8e268e4a"></span><a class="reference internal" href="#_CPPv4N6VmbCPP6CameraE" title="VmbCPP::Camera"><span class="n"><span class="pre">Camera</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP6CameraE" title="VmbCPP::Camera"><span class="n"><span class="pre">Camera</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP6CameraaSERK6Camera" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The object is non-copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Camera_1a02ee73fd0086156332348e2e487fd5c9"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetStreamBufferAlignment</span> <span class="pre">(VmbUint32_t</span> <span class="pre">&amp;nBufferAlignment)</span> <span class="pre">override</span></span></dt>
+<dd><p>Retrieve the necessary buffer alignment size in bytes (equals 1 if Data <a class="reference internal" href="#classVmbCPP_1_1Stream"><span class="std std-ref">Stream</span></a> has no such restriction) </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="localdevice">
+<h3>LocalDevice<a class="headerlink" href="#localdevice" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP11LocalDeviceE">
+<span id="_CPPv3N6VmbCPP11LocalDeviceE"></span><span id="_CPPv2N6VmbCPP11LocalDeviceE"></span><span id="VmbCPP::LocalDevice"></span><span class="target" id="classVmbCPP_1_1LocalDevice"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">LocalDevice</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv46VmbCPP" title="VmbCPP"><span class="n"><span class="pre">VmbCPP</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP27PersistableFeatureContainerE" title="VmbCPP::PersistableFeatureContainer"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></a><a class="headerlink" href="#_CPPv4N6VmbCPP11LocalDeviceE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A module providing access to the features of the local device GenTL module. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP11LocalDevice11LocalDeviceE11VmbHandle_t">
+<span id="_CPPv3N6VmbCPP11LocalDevice11LocalDeviceE11VmbHandle_t"></span><span id="_CPPv2N6VmbCPP11LocalDevice11LocalDeviceE11VmbHandle_t"></span><span id="VmbCPP::LocalDevice::LocalDevice__VmbHandle_t"></span><span class="target" id="classVmbCPP_1_1LocalDevice_1a730fc28366802b238ba0242b79f840ca"></span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">LocalDevice</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">handle</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP11LocalDevice11LocalDeviceE11VmbHandle_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Creates an instance of class <a class="reference internal" href="#classVmbCPP_1_1LocalDevice"><span class="std std-ref">LocalDevice</span></a>. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>handle</strong> – <strong>[in]</strong> The handle of the local device </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP11LocalDevice11LocalDeviceERK11LocalDevice">
+<span id="_CPPv3N6VmbCPP11LocalDevice11LocalDeviceERK11LocalDevice"></span><span id="_CPPv2N6VmbCPP11LocalDevice11LocalDeviceERK11LocalDevice"></span><span id="VmbCPP::LocalDevice::LocalDevice__LocalDeviceCR"></span><span class="target" id="classVmbCPP_1_1LocalDevice_1aa8fba49defbe2316e9ca72b6c99296e4"></span><span class="sig-name descname"><span class="n"><span class="pre">LocalDevice</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP11LocalDevice11LocalDeviceERK11LocalDevice" title="VmbCPP::LocalDevice::LocalDevice"><span class="n"><span class="pre">LocalDevice</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP11LocalDevice11LocalDeviceERK11LocalDevice" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP11LocalDeviceaSERK11LocalDevice">
+<span id="_CPPv3N6VmbCPP11LocalDeviceaSERK11LocalDevice"></span><span id="_CPPv2N6VmbCPP11LocalDeviceaSERK11LocalDevice"></span><span id="VmbCPP::LocalDevice::assign-operator__LocalDeviceCR"></span><span class="target" id="classVmbCPP_1_1LocalDevice_1a911cac0dd9ca4229f5f748e432d71e23"></span><a class="reference internal" href="#_CPPv4N6VmbCPP11LocalDeviceE" title="VmbCPP::LocalDevice"><span class="n"><span class="pre">LocalDevice</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP11LocalDeviceE" title="VmbCPP::LocalDevice"><span class="n"><span class="pre">LocalDevice</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP11LocalDeviceaSERK11LocalDevice" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not copyable. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="stream">
+<h3>Stream<a class="headerlink" href="#stream" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6StreamE">
+<span id="_CPPv3N6VmbCPP6StreamE"></span><span id="_CPPv2N6VmbCPP6StreamE"></span><span id="VmbCPP::Stream"></span><span class="target" id="classVmbCPP_1_1Stream"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Stream</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv46VmbCPP" title="VmbCPP"><span class="n"><span class="pre">VmbCPP</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP27PersistableFeatureContainerE" title="VmbCPP::PersistableFeatureContainer"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></a><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv46VmbCPP" title="VmbCPP"><span class="n"><span class="pre">VmbCPP</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP16ICapturingModuleE" title="VmbCPP::ICapturingModule"><span class="n"><span class="pre">ICapturingModule</span></span></a><a class="headerlink" href="#_CPPv4N6VmbCPP6StreamE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A class providing access to a single stream of a single camera. </p>
+<p>The class provides functionality for acquiring data via the stream. Furthermore it provides access to information about the corresponding GenTL stream module. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6Stream6StreamE11VmbHandle_tb">
+<span id="_CPPv3N6VmbCPP6Stream6StreamE11VmbHandle_tb"></span><span id="_CPPv2N6VmbCPP6Stream6StreamE11VmbHandle_tb"></span><span id="VmbCPP::Stream::Stream__VmbHandle_t.b"></span><span class="target" id="classVmbCPP_1_1Stream_1a7d4b8edd092fe535ad6e15ce6fc723bf"></span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Stream</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">streamHandle</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">deviceIsOpen</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP6Stream6StreamE11VmbHandle_tb" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Creates an instance of class <a class="reference internal" href="#classVmbCPP_1_1Stream"><span class="std std-ref">Stream</span></a>. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>streamHandle</strong> – <strong>[in]</strong> Handle to the stream </p></li>
+<li><p><strong>deviceIsOpen</strong> – <strong>[in]</strong> Sets the internal status to know if the camera device is open or not </p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6Stream6StreamEv">
+<span id="_CPPv3N6VmbCPP6Stream6StreamEv"></span><span id="_CPPv2N6VmbCPP6Stream6StreamEv"></span><span id="VmbCPP::Stream::Stream"></span><span class="target" id="classVmbCPP_1_1Stream_1a0815362dde5d9bc6060f045a5bd38178"></span><span class="sig-name descname"><span class="n"><span class="pre">Stream</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP6Stream6StreamEv" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not default constructible. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6Stream6StreamERK6Stream">
+<span id="_CPPv3N6VmbCPP6Stream6StreamERK6Stream"></span><span id="_CPPv2N6VmbCPP6Stream6StreamERK6Stream"></span><span id="VmbCPP::Stream::Stream__StreamCR"></span><span class="target" id="classVmbCPP_1_1Stream_1a594d0d42faba9ea025d47f6a77f8bf39"></span><span class="sig-name descname"><span class="n"><span class="pre">Stream</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP6Stream6StreamERK6Stream" title="VmbCPP::Stream::Stream"><span class="n"><span class="pre">Stream</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP6Stream6StreamERK6Stream" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6StreamaSERK6Stream">
+<span id="_CPPv3N6VmbCPP6StreamaSERK6Stream"></span><span id="_CPPv2N6VmbCPP6StreamaSERK6Stream"></span><span id="VmbCPP::Stream::assign-operator__StreamCR"></span><span class="target" id="classVmbCPP_1_1Stream_1a6671fa84778827ee5943608cf38cc9ae"></span><a class="reference internal" href="#_CPPv4N6VmbCPP6StreamE" title="VmbCPP::Stream"><span class="n"><span class="pre">Stream</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP6StreamE" title="VmbCPP::Stream"><span class="n"><span class="pre">Stream</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP6StreamaSERK6Stream" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP6StreamD0Ev">
+<span id="_CPPv3N6VmbCPP6StreamD0Ev"></span><span id="_CPPv2N6VmbCPP6StreamD0Ev"></span><span id="VmbCPP::Stream::~Stream"></span><span class="target" id="classVmbCPP_1_1Stream_1ab5ee9b1900366e6aafae05df3a7fe3a2"></span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">~Stream</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP6StreamD0Ev" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Destroys an instance of class <a class="reference internal" href="#classVmbCPP_1_1Stream"><span class="std std-ref">Stream</span></a>. Destroying a stream implicitly closes it beforehand. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Stream_1af3641a41c07e41fe0c9d8b2bd116fc6c"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">Open</span> <span class="pre">()</span></span></dt>
+<dd><p>Opens the specified stream. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1VmbSystem"><span class="std std-ref">VmbSystem</span></a> or <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened before the current command </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>VmbErrorType</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Stream_1ad481c5d7d536cb12159c6ee75e6aa054"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">Close</span> <span class="pre">()</span></span></dt>
+<dd><p>Closes the specified stream. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened before the current command </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>VmbErrorType</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Stream_1a6ed5d6dc96ab9a41936b6cc60abb4f85"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">AnnounceFrame</span> <span class="pre">(const</span> <span class="pre">FramePtr</span> <span class="pre">&amp;pFrame)</span> <span class="pre">override</span></span></dt>
+<dd><p>Announces a frame to the API that may be queued for frame capturing later. Allows some preparation for frames like DMA preparation depending on the transport layer. The order in which the frames are announced is not taken in consideration by the API. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFrame</strong> – <strong>[in]</strong> Shared pointer to a frame to announce</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – “pFrame” is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Stream_1aedc466781f15006d769fa49b5e3e8b01"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RevokeFrame</span> <span class="pre">(const</span> <span class="pre">FramePtr</span> <span class="pre">&amp;pFrame)</span> <span class="pre">override</span></span></dt>
+<dd><p>Revoke a frame from the API. The referenced frame is removed from the pool of frames for capturing images. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFrame</strong> – <strong>[in]</strong> Shared pointer to a frame that is to be removed from the list of announced frames</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given frame pointer is not valid </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – “pFrame” is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>VmbErrorType</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Stream_1ade8ca85ce59f66b3fc99e6e2cbaa97fe"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RevokeAllFrames</span> <span class="pre">()</span> <span class="pre">override</span></span></dt>
+<dd><p>Revoke all frames assigned to this certain camera. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>VmbErrorType</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Stream_1af0169d110bb79a9ccc6ea8b4f538ea92"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">QueueFrame</span> <span class="pre">(const</span> <span class="pre">FramePtr</span> <span class="pre">&amp;pFrame)</span> <span class="pre">override</span></span></dt>
+<dd><p>Queues a frame that may be filled during frame capturing. </p>
+<p>The given frame is put into a queue that will be filled sequentially. The order in which the frames are filled is determined by the order in which they are queued. If the frame was announced with <a class="reference internal" href="#classVmbCPP_1_1Stream_1a6ed5d6dc96ab9a41936b6cc60abb4f85"><span class="std std-ref">AnnounceFrame()</span></a> before, the application has to ensure that the frame is also revoked by calling <a class="reference internal" href="#classVmbCPP_1_1Stream_1aedc466781f15006d769fa49b5e3e8b01"><span class="std std-ref">RevokeFrame()</span></a> or RevokeAll() when cleaning up.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFrame</strong> – <strong>[in]</strong> A shared pointer to a frame</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given frame is not valid </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – “pFrame” is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API </p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – StopContinuousImageAcquisition is currently running in another thread </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>VmbErrorType</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Stream_1adb47274ab1e38c82a6f9ce53d71ca2a0"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">FlushQueue</span> <span class="pre">()</span> <span class="pre">override</span></span></dt>
+<dd><p>Flushes the capture queue. </p>
+<p>All currently queued frames will be returned to the user, leaving no frames in the input queue. After this call, no frame notification will occur until frames are queued again.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>VmbErrorType</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Stream_1a21d40b4866a702b680ca7dadbd4dc853"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">StartCapture</span> <span class="pre">()</span> <span class="pre">noexcept</span> <span class="pre">override</span></span></dt>
+<dd><p>Prepare the API for incoming frames from this camera. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened for usage </p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Stream_1a31dd1a6d72e6a17e2eceef98ee96f591"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">EndCapture</span> <span class="pre">()</span> <span class="pre">noexcept</span> <span class="pre">override</span></span></dt>
+<dd><p>Stop the API from being able to receive frames from this camera. </p>
+<p>Consequences of VmbCaptureEnd():<ul class="simple">
+<li><p>The frame queue is flushed</p></li>
+<li><p>The frame callback will not be called any more</p></li>
+</ul>
+</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>VmbErrorType </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Stream_1ace2163ead3b78f997d7086b2161fe5b9"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetStreamBufferAlignment</span> <span class="pre">(VmbUint32_t</span> <span class="pre">&amp;nBufferAlignment)</span> <span class="pre">override</span></span></dt>
+<dd><p>Retrieve the necessary buffer alignment size in bytes (equals 1 if Data <a class="reference internal" href="#classVmbCPP_1_1Stream"><span class="std std-ref">Stream</span></a> has no such restriction) </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened before the current command </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="frame">
+<h3>Frame<a class="headerlink" href="#frame" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP5FrameE">
+<span id="_CPPv3N6VmbCPP5FrameE"></span><span id="_CPPv2N6VmbCPP5FrameE"></span><span id="VmbCPP::Frame"></span><span class="target" id="classVmbCPP_1_1Frame"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Frame</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP5FrameE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An object representing a data buffer that can be filled by acquiring data from a camera. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-types">Public Types</p>
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP5Frame23ChunkDataAccessFunctionE">
+<span id="_CPPv3N6VmbCPP5Frame23ChunkDataAccessFunctionE"></span><span id="_CPPv2N6VmbCPP5Frame23ChunkDataAccessFunctionE"></span><span id="VmbCPP::Frame::ChunkDataAccessFunction"></span><span class="target" id="classVmbCPP_1_1Frame_1af8188c9b5d57f5a2bd52153e4dff7370"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">function</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="p"><span class="pre">(</span></span><span class="n"><span class="pre">ChunkFeatureContainerPtr</span></span><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ChunkDataAccessFunction</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP5Frame23ChunkDataAccessFunctionE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for an std::function for accessing ChunkData via a <a class="reference internal" href="#classVmbCPP_1_1FeatureContainer"><span class="std std-ref">FeatureContainer</span></a>. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP5Frame5FrameE10VmbInt64_t19FrameAllocationMode11VmbUint32_t">
+<span id="_CPPv3N6VmbCPP5Frame5FrameE10VmbInt64_t19FrameAllocationMode11VmbUint32_t"></span><span id="_CPPv2N6VmbCPP5Frame5FrameE10VmbInt64_t19FrameAllocationMode11VmbUint32_t"></span><span id="VmbCPP::Frame::Frame__VmbInt64_t.FrameAllocationMode.VmbUint32_t"></span><span class="target" id="classVmbCPP_1_1Frame_1a8d12adbfadd9321568854d1f87d95322"></span><span class="k"><span class="pre">explicit</span></span><span class="w"> </span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Frame</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv410VmbInt64_t" title="VmbInt64_t"><span class="n"><span class="pre">VmbInt64_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">bufferSize</span></span>, <span class="n"><span class="pre">FrameAllocationMode</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">allocationMode</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">FrameAllocation_AnnounceFrame</span></span>, <a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">bufferAlignment</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">1</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP5Frame5FrameE10VmbInt64_t19FrameAllocationMode11VmbUint32_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Creates an instance of class <a class="reference internal" href="#classVmbCPP_1_1Frame"><span class="std std-ref">Frame</span></a> of a certain size and memory alignment. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>bufferSize</strong> – <strong>[in]</strong> The size of the underlying buffer </p></li>
+<li><p><strong>allocationMode</strong> – <strong>[in]</strong> Indicates if announce frame or alloc and announce frame is used </p></li>
+<li><p><strong>bufferAlignment</strong> – <strong>[in]</strong> The alignment that needs to be satisfied for the frame buffer allocation </p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP5Frame5FrameEP10VmbUchar_t10VmbInt64_t">
+<span id="_CPPv3N6VmbCPP5Frame5FrameEP10VmbUchar_t10VmbInt64_t"></span><span id="_CPPv2N6VmbCPP5Frame5FrameEP10VmbUchar_t10VmbInt64_t"></span><span id="VmbCPP::Frame::Frame__VmbUchar_tP.VmbInt64_t"></span><span class="target" id="classVmbCPP_1_1Frame_1ae839d45e6ea4e5b62070aba33a880d7e"></span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Frame</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv410VmbUchar_t" title="VmbUchar_t"><span class="n"><span class="pre">VmbUchar_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">pBuffer</span></span>, <a class="reference internal" href="#_CPPv410VmbInt64_t" title="VmbInt64_t"><span class="n"><span class="pre">VmbInt64_t</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">bufferSize</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP5Frame5FrameEP10VmbUchar_t10VmbInt64_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Creates an instance of class <a class="reference internal" href="#classVmbCPP_1_1Frame"><span class="std std-ref">Frame</span></a> with the given user buffer of the given size. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pBuffer</strong> – <strong>[in]</strong> A pointer to an allocated buffer </p></li>
+<li><p><strong>bufferSize</strong> – <strong>[in]</strong> The size of the underlying buffer </p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP5FrameD0Ev">
+<span id="_CPPv3N6VmbCPP5FrameD0Ev"></span><span id="_CPPv2N6VmbCPP5FrameD0Ev"></span><span id="VmbCPP::Frame::~Frame"></span><span class="target" id="classVmbCPP_1_1Frame_1af5135f46fccff5a5e843aa1183dd7fb3"></span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">~Frame</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP5FrameD0Ev" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Destroys an instance of class <a class="reference internal" href="#classVmbCPP_1_1Frame"><span class="std std-ref">Frame</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a049638dba8f2b26058aaec13d55abf82"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RegisterObserver</span> <span class="pre">(const</span> <span class="pre">IFrameObserverPtr</span> <span class="pre">&amp;pObserver)</span></span></dt>
+<dd><p>Registers an observer that will be called whenever a new frame arrives. As new frames arrive, the observer’s FrameReceived method will be called. Only one observer can be registered. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pObserver</strong> – <strong>[in]</strong> An object that implements the IObserver interface</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pObserver</span></code> is null. </p></li>
+<li><p><strong>VmbErrorResources</strong> – The observer was in use </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a2852aac5275d01ed1d653188842a1545"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">UnregisterObserver</span> <span class="pre">()</span></span></dt>
+<dd><p>Unregisters the observer that was called whenever a new frame arrived. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a716f5a1a9e6e785df8b4371c04bc0b62"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetBuffer</span> <span class="pre">(VmbUchar_t</span> <span class="pre">*&amp;pBuffer)</span></span></dt>
+<dd><p>Returns the complete buffer including image and chunk data. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pBuffer</strong> – <strong>[out]</strong> A pointer to the buffer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a538793cbfadf583748f1eaaafdfbb4a4"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetBuffer</span> <span class="pre">(const</span> <span class="pre">VmbUchar_t</span> <span class="pre">*&amp;pBuffer)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the complete buffer including image and chunk data. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pBuffer</strong> – <strong>[out]</strong> A pointer to the buffer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a7ee8e99b3cd4e36f6e56b81140a1b941"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetImage</span> <span class="pre">(VmbUchar_t</span> <span class="pre">*&amp;pBuffer)</span></span></dt>
+<dd><p>Returns only the image data. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pBuffer</strong> – <strong>[out]</strong> A pointer to the buffer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a5beb715f4011a73039afc296a31edba8"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetImage</span> <span class="pre">(const</span> <span class="pre">VmbUchar_t</span> <span class="pre">*&amp;pBuffer)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the pointer to the first byte of the image data. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pBuffer</strong> – <strong>[out]</strong> A pointer to the buffer</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a44e6dd4bd4b0faa8ec9cddec81a001e5"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetReceiveStatus</span> <span class="pre">(VmbFrameStatusType</span> <span class="pre">&amp;status)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the receive status of a frame. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>status</strong> – <strong>[out]</strong> The receive status</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a57cbfd48623fdcfef8143d98078538a4"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetPayloadType</span> <span class="pre">(VmbPayloadType</span> <span class="pre">&amp;payloadType)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the payload type of a frame. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>payloadType</strong> – <strong>[out]</strong> The payload type</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1afc4675cee9632a38dfcd7dc7768d567a"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetBufferSize</span> <span class="pre">(VmbUint32_t</span> <span class="pre">&amp;bufferSize)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the memory size of the frame buffer holding. </p>
+<p>both the image data and the chunk data</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>bufferSize</strong> – <strong>[out]</strong> The size in bytes</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a7d1a55683a41513c8d9c1e7f1d246280"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetPixelFormat</span> <span class="pre">(VmbPixelFormatType</span> <span class="pre">&amp;pixelFormat)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the GenICam pixel format. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pixelFormat</strong> – <strong>[out]</strong> The GenICam pixel format</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1ae7b9cd15a0ee47c017e8f967ff12528e"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetWidth</span> <span class="pre">(VmbUint32_t</span> <span class="pre">&amp;width)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the width of the image. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>width</strong> – <strong>[out]</strong> The width in pixels</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a001453185e890a0858c20f1bfe6f0024"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetHeight</span> <span class="pre">(VmbUint32_t</span> <span class="pre">&amp;height)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the height of the image. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>height</strong> – <strong>[out]</strong> The height in pixels</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a37cb0a2f791e56cdd5db791e52be3adc"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetOffsetX</span> <span class="pre">(VmbUint32_t</span> <span class="pre">&amp;offsetX)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the X offset of the image. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>offsetX</strong> – <strong>[out]</strong> The X offset in pixels</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a587de790cd60f371251a32b5d4234dab"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetOffsetY</span> <span class="pre">(VmbUint32_t</span> <span class="pre">&amp;offsetY)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the Y offset of the image. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>offsetY</strong> – <strong>[out]</strong> The Y offset in pixels</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1a3a67f40648cc7bde7d95f306985b587f"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetFrameID</span> <span class="pre">(VmbUint64_t</span> <span class="pre">&amp;frameID)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the frame ID. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>frameID</strong> – <strong>[out]</strong> The frame ID</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Frame_1ad4191c203e7cb39a117c1cf4da2f7dfa"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetTimestamp</span> <span class="pre">(VmbUint64_t</span> <span class="pre">&amp;timestamp)</span> <span class="pre">const</span></span></dt>
+<dd><p>Returns the timestamp. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>timestamp</strong> – <strong>[out]</strong> The timestamp</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP5Frame15AccessChunkDataE23ChunkDataAccessFunction">
+<span id="_CPPv3N6VmbCPP5Frame15AccessChunkDataE23ChunkDataAccessFunction"></span><span id="_CPPv2N6VmbCPP5Frame15AccessChunkDataE23ChunkDataAccessFunction"></span><span id="VmbCPP::Frame::AccessChunkData__ChunkDataAccessFunction"></span><span class="target" id="classVmbCPP_1_1Frame_1a1980f4da31075a669b570e6b16cf0982"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">AccessChunkData</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4N6VmbCPP5Frame23ChunkDataAccessFunctionE" title="VmbCPP::Frame::ChunkDataAccessFunction"><span class="n"><span class="pre">ChunkDataAccessFunction</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">chunkAccessFunction</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP5Frame15AccessChunkDataE23ChunkDataAccessFunction" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Access the frame’s chunk data via a FeatureContainerPtr. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Chunk data can be accessed only in the scope of the given ChunkDataAccessFunction.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>chunkAccessFunction</strong> – <strong>[in]</strong> Callback for Chunk data access</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><p><strong>VmbErrorSuccess</strong> – If no error </p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP5Frame11GetObserverER17IFrameObserverPtr">
+<span id="_CPPv3NK6VmbCPP5Frame11GetObserverER17IFrameObserverPtr"></span><span id="_CPPv2NK6VmbCPP5Frame11GetObserverER17IFrameObserverPtr"></span><span id="VmbCPP::Frame::GetObserver__IFrameObserverPtrRC"></span><span class="target" id="classVmbCPP_1_1Frame_1af850d8fe03d3c773542d787351252136"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetObserver</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4N6VmbCPP17IFrameObserverPtrE" title="VmbCPP::IFrameObserverPtr"><span class="n"><span class="pre">IFrameObserverPtr</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">observer</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP5Frame11GetObserverER17IFrameObserverPtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Getter for the frame observer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>observer</strong> – <strong>[out]</strong> the frame observer pointer to write the retrieved observer to.</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>True, if there was a non-null observer to retrieve, false otherwise. </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP5Frame5FrameEv">
+<span id="_CPPv3N6VmbCPP5Frame5FrameEv"></span><span id="_CPPv2N6VmbCPP5Frame5FrameEv"></span><span id="VmbCPP::Frame::Frame"></span><span class="target" id="classVmbCPP_1_1Frame_1ac6cc0beb191912bab86582f6ef5e03c6"></span><span class="sig-name descname"><span class="n"><span class="pre">Frame</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP5Frame5FrameEv" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No default ctor. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP5Frame5FrameER5Frame">
+<span id="_CPPv3N6VmbCPP5Frame5FrameER5Frame"></span><span id="_CPPv2N6VmbCPP5Frame5FrameER5Frame"></span><span id="VmbCPP::Frame::Frame__FrameR"></span><span class="target" id="classVmbCPP_1_1Frame_1a11ec8c0a896b049ff0d152fa0f0a698c"></span><span class="sig-name descname"><span class="n"><span class="pre">Frame</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4N6VmbCPP5Frame5FrameER5Frame" title="VmbCPP::Frame::Frame"><span class="n"><span class="pre">Frame</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP5Frame5FrameER5Frame" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No copy ctor. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP5FrameaSERK5Frame">
+<span id="_CPPv3N6VmbCPP5FrameaSERK5Frame"></span><span id="_CPPv2N6VmbCPP5FrameaSERK5Frame"></span><span id="VmbCPP::Frame::assign-operator__FrameCR"></span><span class="target" id="classVmbCPP_1_1Frame_1ab956f483abc23aa2d468a14de911f026"></span><a class="reference internal" href="#_CPPv4N6VmbCPP5FrameE" title="VmbCPP::Frame"><span class="n"><span class="pre">Frame</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP5FrameE" title="VmbCPP::Frame"><span class="n"><span class="pre">Frame</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP5FrameaSERK5Frame" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No assignment operator. </p>
+</dd></dl>
+
+</div>
+<dl class="cpp struct">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP5Frame4ImplE">
+<span id="_CPPv3N6VmbCPP5Frame4ImplE"></span><span id="_CPPv2N6VmbCPP5Frame4ImplE"></span><span id="VmbCPP::Frame::Impl"></span><span class="target" id="structVmbCPP_1_1Frame_1_1Impl"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Impl</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP5Frame4ImplE" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="featurecontainer">
+<h3>FeatureContainer<a class="headerlink" href="#featurecontainer" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16FeatureContainerE">
+<span id="_CPPv3N6VmbCPP16FeatureContainerE"></span><span id="_CPPv2N6VmbCPP16FeatureContainerE"></span><span id="VmbCPP::FeatureContainer"></span><span class="target" id="classVmbCPP_1_1FeatureContainer"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">FeatureContainer</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">protected</span></span><span class="w"> </span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv46VmbCPP" title="VmbCPP"><span class="n"><span class="pre">VmbCPP</span></span></a><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">BasicLockable</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP16FeatureContainerE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A entity providing access to a set of features. </p>
+<p>Subclassed by <a class="reference internal" href="#classVmbCPP_1_1PersistableFeatureContainer"><span class="std std-ref">VmbCPP::PersistableFeatureContainer</span></a>, <a class="reference internal" href="#classVmbCPP_1_1VmbSystem"><span class="std std-ref">VmbCPP::VmbSystem</span></a></p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16FeatureContainer16FeatureContainerEv">
+<span id="_CPPv3N6VmbCPP16FeatureContainer16FeatureContainerEv"></span><span id="_CPPv2N6VmbCPP16FeatureContainer16FeatureContainerEv"></span><span id="VmbCPP::FeatureContainer::FeatureContainer"></span><span class="target" id="classVmbCPP_1_1FeatureContainer_1ac5ef7cdf7da57bfced3ac35b3befb018"></span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">FeatureContainer</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP16FeatureContainer16FeatureContainerEv" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Creates an instance of class <a class="reference internal" href="#classVmbCPP_1_1FeatureContainer"><span class="std std-ref">FeatureContainer</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16FeatureContainer16FeatureContainerERK16FeatureContainer">
+<span id="_CPPv3N6VmbCPP16FeatureContainer16FeatureContainerERK16FeatureContainer"></span><span id="_CPPv2N6VmbCPP16FeatureContainer16FeatureContainerERK16FeatureContainer"></span><span id="VmbCPP::FeatureContainer::FeatureContainer__FeatureContainerCR"></span><span class="target" id="classVmbCPP_1_1FeatureContainer_1abadea8b91e6fcf2f930b2d5ac0eb16e3"></span><span class="sig-name descname"><span class="n"><span class="pre">FeatureContainer</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP16FeatureContainer16FeatureContainerERK16FeatureContainer" title="VmbCPP::FeatureContainer::FeatureContainer"><span class="n"><span class="pre">FeatureContainer</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP16FeatureContainer16FeatureContainerERK16FeatureContainer" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is non-copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16FeatureContaineraSERK16FeatureContainer">
+<span id="_CPPv3N6VmbCPP16FeatureContaineraSERK16FeatureContainer"></span><span id="_CPPv2N6VmbCPP16FeatureContaineraSERK16FeatureContainer"></span><span id="VmbCPP::FeatureContainer::assign-operator__FeatureContainerCR"></span><span class="target" id="classVmbCPP_1_1FeatureContainer_1acc469f39c9e13b6d264f0b2cf739e025"></span><a class="reference internal" href="#_CPPv4N6VmbCPP16FeatureContainerE" title="VmbCPP::FeatureContainer"><span class="n"><span class="pre">FeatureContainer</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP16FeatureContainerE" title="VmbCPP::FeatureContainer"><span class="n"><span class="pre">FeatureContainer</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP16FeatureContaineraSERK16FeatureContainer" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is non-copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16FeatureContainerD0Ev">
+<span id="_CPPv3N6VmbCPP16FeatureContainerD0Ev"></span><span id="_CPPv2N6VmbCPP16FeatureContainerD0Ev"></span><span id="VmbCPP::FeatureContainer::~FeatureContainer"></span><span class="target" id="classVmbCPP_1_1FeatureContainer_1add7f989bbc57201288c59afcee370adb"></span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">~FeatureContainer</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP16FeatureContainerD0Ev" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Destroys an instance of class <a class="reference internal" href="#classVmbCPP_1_1FeatureContainer"><span class="std std-ref">FeatureContainer</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1FeatureContainer_1aa32ee22d60f9ca716da4d11b4f089a40"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetFeatureByName</span> <span class="pre">(const</span> <span class="pre">char</span> <span class="pre">*pName,</span> <span class="pre">FeaturePtr</span> <span class="pre">&amp;pFeature)</span></span></dt>
+<dd><p>Gets one particular feature of a feature container (e.g. a camera) </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pName</strong> – <strong>[in]</strong> The name of the feature to get </p></li>
+<li><p><strong>pFeature</strong> – <strong>[out]</strong> The queried feature</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – Base feature class (e.g. <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a>) was not opened. </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pName</span></code> is null. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16FeatureContainer16GetFeatureByNameENSt9nullptr_tER10FeaturePtr">
+<span id="_CPPv3N6VmbCPP16FeatureContainer16GetFeatureByNameENSt9nullptr_tER10FeaturePtr"></span><span id="_CPPv2N6VmbCPP16FeatureContainer16GetFeatureByNameENSt9nullptr_tER10FeaturePtr"></span><span id="VmbCPP::FeatureContainer::GetFeatureByName__std::nullptr_t.FeaturePtrR"></span><span class="target" id="classVmbCPP_1_1FeatureContainer_1affaf04ed92a06cddad70e96007c09998"></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetFeatureByName</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">nullptr_t</span></span>, <a class="reference internal" href="#_CPPv4N6VmbCPP10FeaturePtrE" title="VmbCPP::FeaturePtr"><span class="n"><span class="pre">FeaturePtr</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP16FeatureContainer16GetFeatureByNameENSt9nullptr_tER10FeaturePtr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the feature name must be non-null </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16FeatureContainer11GetFeaturesER16FeaturePtrVector">
+<span id="_CPPv3N6VmbCPP16FeatureContainer11GetFeaturesER16FeaturePtrVector"></span><span id="_CPPv2N6VmbCPP16FeatureContainer11GetFeaturesER16FeaturePtrVector"></span><span id="VmbCPP::FeatureContainer::GetFeatures__FeaturePtrVectorR"></span><span class="target" id="classVmbCPP_1_1FeatureContainer_1ad93d92f66e3fc46d31e8b34bb6d25f88"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetFeatures</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">FeaturePtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">features</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP16FeatureContainer11GetFeaturesER16FeaturePtrVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets all features of a feature container (e.g. a camera) </p>
+<p>Once queried, this information remains static throughout the object’s lifetime</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>features</strong> – <strong>[out]</strong> The container for all queried features</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">features</span></code> is empty. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP16FeatureContainer9GetHandleEv">
+<span id="_CPPv3NK6VmbCPP16FeatureContainer9GetHandleEv"></span><span id="_CPPv2NK6VmbCPP16FeatureContainer9GetHandleEv"></span><span id="VmbCPP::FeatureContainer::GetHandleC"></span><span class="target" id="classVmbCPP_1_1FeatureContainer_1a800b5efd2cfd881d8ba5a845d031127b"></span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetHandle</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP16FeatureContainer9GetHandleEv" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the handle used for this container by the Vmb C API. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="persistablefeaturecontainer">
+<h3>PersistableFeatureContainer<a class="headerlink" href="#persistablefeaturecontainer" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP27PersistableFeatureContainerE">
+<span id="_CPPv3N6VmbCPP27PersistableFeatureContainerE"></span><span id="_CPPv2N6VmbCPP27PersistableFeatureContainerE"></span><span id="VmbCPP::PersistableFeatureContainer"></span><span class="target" id="classVmbCPP_1_1PersistableFeatureContainer"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></span><span class="w"> </span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="k"><span class="pre">public</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv46VmbCPP" title="VmbCPP"><span class="n"><span class="pre">VmbCPP</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP16FeatureContainerE" title="VmbCPP::FeatureContainer"><span class="n"><span class="pre">FeatureContainer</span></span></a><a class="headerlink" href="#_CPPv4N6VmbCPP27PersistableFeatureContainerE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An interface providing access and persistance functionality for features. </p>
+<p>Subclassed by <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">VmbCPP::Camera</span></a>, <a class="reference internal" href="#classVmbCPP_1_1Interface"><span class="std std-ref">VmbCPP::Interface</span></a>, <a class="reference internal" href="#classVmbCPP_1_1LocalDevice"><span class="std std-ref">VmbCPP::LocalDevice</span></a>, <a class="reference internal" href="#classVmbCPP_1_1Stream"><span class="std std-ref">VmbCPP::Stream</span></a>, <a class="reference internal" href="#classVmbCPP_1_1TransportLayer"><span class="std std-ref">VmbCPP::TransportLayer</span></a></p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerEv">
+<span id="_CPPv3N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerEv"></span><span id="_CPPv2N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerEv"></span><span id="VmbCPP::PersistableFeatureContainer::PersistableFeatureContainer"></span><span class="target" id="classVmbCPP_1_1PersistableFeatureContainer_1a43b46e6f3cfb6574eb36e27ebba2c089"></span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerEv" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Creates an instance of class <a class="reference internal" href="#classVmbCPP_1_1FeatureContainer"><span class="std std-ref">FeatureContainer</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerERK27PersistableFeatureContainer">
+<span id="_CPPv3N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerERK27PersistableFeatureContainer"></span><span id="_CPPv2N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerERK27PersistableFeatureContainer"></span><span id="VmbCPP::PersistableFeatureContainer::PersistableFeatureContainer__PersistableFeatureContainerCR"></span><span class="target" id="classVmbCPP_1_1PersistableFeatureContainer_1a03a03be8cad8947796f949254b9cb120"></span><span class="sig-name descname"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerERK27PersistableFeatureContainer" title="VmbCPP::PersistableFeatureContainer::PersistableFeatureContainer"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerERK27PersistableFeatureContainer" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP27PersistableFeatureContaineraSERK27PersistableFeatureContainer">
+<span id="_CPPv3N6VmbCPP27PersistableFeatureContaineraSERK27PersistableFeatureContainer"></span><span id="_CPPv2N6VmbCPP27PersistableFeatureContaineraSERK27PersistableFeatureContainer"></span><span id="VmbCPP::PersistableFeatureContainer::assign-operator__PersistableFeatureContainerCR"></span><span class="target" id="classVmbCPP_1_1PersistableFeatureContainer_1a2042f938a4aff0afb0b0cc1e9126c209"></span><a class="reference internal" href="#_CPPv4N6VmbCPP27PersistableFeatureContainerE" title="VmbCPP::PersistableFeatureContainer"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP27PersistableFeatureContainerE" title="VmbCPP::PersistableFeatureContainer"><span class="n"><span class="pre">PersistableFeatureContainer</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP27PersistableFeatureContaineraSERK27PersistableFeatureContainer" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1PersistableFeatureContainer_1a89d323eee66a39d553c55b9d6e5d0a6e"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">SaveSettings</span> <span class="pre">(const</span> <span class="pre">VmbFilePathChar_t</span> <span class="pre">*filePath,</span> <span class="pre">VmbFeaturePersistSettings_t</span> <span class="pre">*pSettings=nullptr)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Saves the current module setup to an XML file. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>filePath</strong> – <strong>[in]</strong> Path of the XML file </p></li>
+<li><p><strong>pSettings</strong> – <strong>[in]</strong> Pointer to settings struct</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">filePath</span></code> is or the settings struct is invalid </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The object handle is not valid </p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The object handle is insufficient to identify the module that should be saved </p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+<li><p><strong>VmbErrorIO</strong> – There was an issue writing the file. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP27PersistableFeatureContainer12SaveSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t">
+<span id="_CPPv3NK6VmbCPP27PersistableFeatureContainer12SaveSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t"></span><span id="_CPPv2NK6VmbCPP27PersistableFeatureContainer12SaveSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t"></span><span id="VmbCPP::PersistableFeatureContainer::SaveSettings__std::nullptr_t.VmbFeaturePersistSettings_tPC"></span><span class="target" id="classVmbCPP_1_1PersistableFeatureContainer_1aaa29d44cfa2688b016f75c50e15753a8"></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SaveSettings</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">nullptr_t</span></span>, <a class="reference internal" href="#_CPPv427VmbFeaturePersistSettings_t" title="VmbFeaturePersistSettings_t"><span class="n"><span class="pre">VmbFeaturePersistSettings_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">pSettings</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">nullptr</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP27PersistableFeatureContainer12SaveSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Settings cannot be saved given null as file path. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1PersistableFeatureContainer_1aabdb069c960dc03a8e2c696a64a30af7"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">LoadSettings</span> <span class="pre">(const</span> <span class="pre">VmbFilePathChar_t</span> <span class="pre">*const</span> <span class="pre">filePath,</span> <span class="pre">VmbFeaturePersistSettings_t</span> <span class="pre">*pSettings=nullptr)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Loads the current module setup from an XML file into the camera. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>filePath</strong> – <strong>[in]</strong> Name of the XML file </p></li>
+<li><p><strong>pSettings</strong> – <strong>[in]</strong> Pointer to settings struct</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The object handle is not valid </p></li>
+<li><p><strong>VmbErrorAmbiguous</strong> – The module to restore the settings for cannot be uniquely identified based on the information available </p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The object handle is insufficient to identify the module that should be restored </p></li>
+<li><p><strong>VmbErrorRetriesExceeded</strong> – Some or all of the features could not be restored with the max iterations specified </p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">filePath</span></code> is null or the settings struct is invalid </p></li>
+<li><p><strong>VmbErrorIO</strong> – There was an issue with reading the file. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occured. </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP27PersistableFeatureContainer12LoadSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t">
+<span id="_CPPv3NK6VmbCPP27PersistableFeatureContainer12LoadSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t"></span><span id="_CPPv2NK6VmbCPP27PersistableFeatureContainer12LoadSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t"></span><span id="VmbCPP::PersistableFeatureContainer::LoadSettings__std::nullptr_t.VmbFeaturePersistSettings_tPC"></span><span class="target" id="classVmbCPP_1_1PersistableFeatureContainer_1af57dd5a6a2c5c9ac5345421fd0973d3a"></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">LoadSettings</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">nullptr_t</span></span>, <a class="reference internal" href="#_CPPv427VmbFeaturePersistSettings_t" title="VmbFeaturePersistSettings_t"><span class="n"><span class="pre">VmbFeaturePersistSettings_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">pSettings</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">nullptr</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP27PersistableFeatureContainer12LoadSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Loading settings requires a non-null path. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="feature">
+<h3>Feature<a class="headerlink" href="#feature" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP7FeatureE">
+<span id="_CPPv3N6VmbCPP7FeatureE"></span><span id="_CPPv2N6VmbCPP7FeatureE"></span><span id="VmbCPP::Feature"></span><span class="target" id="classVmbCPP_1_1Feature"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Feature</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP7FeatureE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Class providing access to one feature of one module. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP7Feature7FeatureEv">
+<span id="_CPPv3N6VmbCPP7Feature7FeatureEv"></span><span id="_CPPv2N6VmbCPP7Feature7FeatureEv"></span><span id="VmbCPP::Feature::Feature"></span><span class="target" id="classVmbCPP_1_1Feature_1a70e0ace64f9b0a1294d6925d2edb9f90"></span><span class="sig-name descname"><span class="n"><span class="pre">Feature</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP7Feature7FeatureEv" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not default constructible. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP7Feature7FeatureERK7Feature">
+<span id="_CPPv3N6VmbCPP7Feature7FeatureERK7Feature"></span><span id="_CPPv2N6VmbCPP7Feature7FeatureERK7Feature"></span><span id="VmbCPP::Feature::Feature__FeatureCR"></span><span class="target" id="classVmbCPP_1_1Feature_1aeb55cb45ba27ee5baa924ec164081c74"></span><span class="sig-name descname"><span class="n"><span class="pre">Feature</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP7Feature7FeatureERK7Feature" title="VmbCPP::Feature::Feature"><span class="n"><span class="pre">Feature</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP7Feature7FeatureERK7Feature" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not copy constructible. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP7FeatureaSERK7Feature">
+<span id="_CPPv3N6VmbCPP7FeatureaSERK7Feature"></span><span id="_CPPv2N6VmbCPP7FeatureaSERK7Feature"></span><span id="VmbCPP::Feature::assign-operator__FeatureCR"></span><span class="target" id="classVmbCPP_1_1Feature_1a127aa501a89fdadb8baa6446bf360b7e"></span><a class="reference internal" href="#_CPPv4N6VmbCPP7FeatureE" title="VmbCPP::Feature"><span class="n"><span class="pre">Feature</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP7FeatureE" title="VmbCPP::Feature"><span class="n"><span class="pre">Feature</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP7FeatureaSERK7Feature" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is not copy constructible. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a45df4e049afe0c6fa3ecb56698d98844"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetValue</span> <span class="pre">(VmbInt64_t</span> <span class="pre">&amp;value)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries the value of a feature of type Integer or Enumeration. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>value</strong> – <strong>[out]</strong> The feature’s value</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a2b05c03b7e936a2cbc40f6b1e42a93e6"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetValue</span> <span class="pre">(double</span> <span class="pre">&amp;value)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries the value of a feature of type Float. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>value</strong> – <strong>[out]</strong> The feature’s value</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature8GetValueERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP7Feature8GetValueERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP7Feature8GetValueERNSt6stringE"></span><span id="VmbCPP::Feature::GetValue__ssRC"></span><span class="target" id="classVmbCPP_1_1Feature_1ae940e01aa630e075eb5297df458ecefd"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetValue</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">value</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature8GetValueERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries the value of a feature of type String or Enumeration. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>value</strong> – <strong>[out]</strong> The feature’s value</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a21b037b5401623807ed8140f2d056bb9"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetValue</span> <span class="pre">(bool</span> <span class="pre">&amp;value)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries the value of a feature of type Bool. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>value</strong> – <strong>[out]</strong> The feature’s value</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVector">
+<span id="_CPPv3NK6VmbCPP7Feature8GetValueER11UcharVector"></span><span id="_CPPv2NK6VmbCPP7Feature8GetValueER11UcharVector"></span><span id="VmbCPP::Feature::GetValue__UcharVectorRC"></span><span class="target" id="classVmbCPP_1_1Feature_1acfba5bf716f7b8df81d1ee4d34e48769"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetValue</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">UcharVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">value</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries the value of a feature of type Register. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>value</strong> – <strong>[out]</strong> The feature’s value</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVectorR11VmbUint32_t">
+<span id="_CPPv3NK6VmbCPP7Feature8GetValueER11UcharVectorR11VmbUint32_t"></span><span id="_CPPv2NK6VmbCPP7Feature8GetValueER11UcharVectorR11VmbUint32_t"></span><span id="VmbCPP::Feature::GetValue__UcharVectorR.VmbUint32_tRC"></span><span class="target" id="classVmbCPP_1_1Feature_1a9708fdda4415404b6eadf8bcc381253d"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetValue</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">UcharVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">value</span></span>, <a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">sizeFilled</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVectorR11VmbUint32_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries the value of a feature of type const Register. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>value</strong> – <strong>[out]</strong> The feature’s value </p></li>
+<li><p><strong>sizeFilled</strong> – <strong>[out]</strong> The number of actually received values</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP7Feature9GetValuesER11Int64Vector">
+<span id="_CPPv3N6VmbCPP7Feature9GetValuesER11Int64Vector"></span><span id="_CPPv2N6VmbCPP7Feature9GetValuesER11Int64Vector"></span><span id="VmbCPP::Feature::GetValues__Int64VectorR"></span><span class="target" id="classVmbCPP_1_1Feature_1a197b68f63441c2b9f64f96db292059a2"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetValues</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">Int64Vector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">values</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP7Feature9GetValuesER11Int64Vector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries the possible integer values of a feature of type Enumeration. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>values</strong> – <strong>[out]</strong> The feature’s values</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP7Feature9GetValuesER12StringVector">
+<span id="_CPPv3N6VmbCPP7Feature9GetValuesER12StringVector"></span><span id="_CPPv2N6VmbCPP7Feature9GetValuesER12StringVector"></span><span id="VmbCPP::Feature::GetValues__StringVectorR"></span><span class="target" id="classVmbCPP_1_1Feature_1a752a6f0c9247308e5749f5e240c2fe38"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetValues</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">StringVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">values</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP7Feature9GetValuesER12StringVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries the string values of a feature of type Enumeration. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>values</strong> – <strong>[out]</strong> The feature’s values</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a6386d13bb8f5b419555750cb3c54ebd3"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetEntry</span> <span class="pre">(EnumEntry</span> <span class="pre">&amp;entry,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*pEntryName)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries a single enum entry of a feature of type Enumeration. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>entry</strong> – <strong>[out]</strong> An enum feature’s enum entry </p></li>
+<li><p><strong>pEntryName</strong> – <strong>[in]</strong> The name of the enum entry</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP7Feature10GetEntriesER15EnumEntryVector">
+<span id="_CPPv3N6VmbCPP7Feature10GetEntriesER15EnumEntryVector"></span><span id="_CPPv2N6VmbCPP7Feature10GetEntriesER15EnumEntryVector"></span><span id="VmbCPP::Feature::GetEntries__EnumEntryVectorR"></span><span class="target" id="classVmbCPP_1_1Feature_1a8bc2905b8fcd444b4286c84f5190443c"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetEntries</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">EnumEntryVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">entries</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP7Feature10GetEntriesER15EnumEntryVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries all enum entries of a feature of type Enumeration. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>entries</strong> – <strong>[out]</strong> An enum feature’s enum entries</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a79c6bed2b596896f84356cf4cc16df8d"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetRange</span> <span class="pre">(double</span> <span class="pre">&amp;minimum,</span> <span class="pre">double</span> <span class="pre">&amp;maximum)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries the range of a feature of type Float. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>minimum</strong> – <strong>[out]</strong> The feature’s min value </p></li>
+<li><p><strong>maximum</strong> – <strong>[out]</strong> The feature’s max value</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a479605d9ba5933d80331af21d1b9efd7"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetRange</span> <span class="pre">(VmbInt64_t</span> <span class="pre">&amp;minimum,</span> <span class="pre">VmbInt64_t</span> <span class="pre">&amp;maximum)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries the range of a feature of type Integer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>minimum</strong> – <strong>[out]</strong> The feature’s min value </p></li>
+<li><p><strong>maximum</strong> – <strong>[out]</strong> The feature’s max value</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a5de6964cb3d079d69b815e825bdce173"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">SetValue</span> <span class="pre">(VmbInt64_t</span> <span class="pre">value)</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Sets and integer or enum feature. </p>
+<p>If the feature is an enum feature, the value set is the enum entry corresponding to the integer value.</p>
+<p>If known, use pass the string value instead, since this is more performant.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>value</strong> – <strong>[in]</strong> The feature’s value</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXaaNSt11is_integralI12IntegralTypeE5valueEntNSt7is_sameI12IntegralType10VmbInt64_tE5valueEE12VmbErrorTypeE4typeE12IntegralType">
+<span id="_CPPv3I0EN6VmbCPP7Feature8SetValueE12IntegralType"></span><span id="_CPPv2I0EN6VmbCPP7Feature8SetValueE12IntegralType"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">IntegralType</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classVmbCPP_1_1Feature_1a625cfef44462a45380531c4156977a92"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">enable_if</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">is_integral</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXaaNSt11is_integralI12IntegralTypeE5valueEntNSt7is_sameI12IntegralType10VmbInt64_tE5valueEE12VmbErrorTypeE4typeE12IntegralType" title="VmbCPP::Feature::SetValue::IntegralType"><span class="n"><span class="pre">IntegralType</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">value</span></span><span class="w"> </span><span class="o"><span class="pre">&amp;&amp;</span></span><span class="w"> </span><span class="o"><span class="pre">!</span></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">is_same</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXaaNSt11is_integralI12IntegralTypeE5valueEntNSt7is_sameI12IntegralType10VmbInt64_tE5valueEE12VmbErrorTypeE4typeE12IntegralType" title="VmbCPP::Feature::SetValue::IntegralType"><span class="n"><span class="pre">IntegralType</span></span></a><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv410VmbInt64_t" title="VmbInt64_t"><span class="n"><span class="pre">VmbInt64_t</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">value</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">type</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SetValue</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXaaNSt11is_integralI12IntegralTypeE5valueEntNSt7is_sameI12IntegralType10VmbInt64_tE5valueEE12VmbErrorTypeE4typeE12IntegralType" title="VmbCPP::Feature::SetValue::IntegralType"><span class="n"><span class="pre">IntegralType</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">value</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXaaNSt11is_integralI12IntegralTypeE5valueEntNSt7is_sameI12IntegralType10VmbInt64_tE5valueEE12VmbErrorTypeE4typeE12IntegralType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Convenience function for calling <a class="reference internal" href="#classVmbCPP_1_1Feature_1a5de6964cb3d079d69b815e825bdce173"><span class="std std-ref">SetValue(VmbInt64_t)</span></a> with an integral value without the need to cast the parameter to VmbInt64_t. </p>
+<p>Calls <code class="docutils literal notranslate"><span class="pre">SetValue(static_cast&lt;VmbInt64_t&gt;(value))</span></code></p>
+<dl class="field-list simple">
+<dt class="field-odd">Template Parameters</dt>
+<dd class="field-odd"><p><strong>IntegralType</strong> – an integral type other than <a class="reference internal" href="#VmbCommonTypes_8h_1ad79e9c3be077678c59cc7cca122e748d"><span class="std std-ref">VmbInt64_t</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXntNSt7is_sameIbN4impl20UnderlyingTypeHelperI8EnumTypeE4typeEE5valueEE12VmbErrorTypeE4typeE8EnumType">
+<span id="_CPPv3I0EN6VmbCPP7Feature8SetValueE8EnumType"></span><span id="_CPPv2I0EN6VmbCPP7Feature8SetValueE8EnumType"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">EnumType</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classVmbCPP_1_1Feature_1a7ef4020174fd54ad49a150dd011d93a8"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">enable_if</span></span><span class="p"><span class="pre">&lt;</span></span><span class="o"><span class="pre">!</span></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">is_same</span></span><span class="p"><span class="pre">&lt;</span></span><span class="kt"><span class="pre">bool</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="n"><span class="pre">impl</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">UnderlyingTypeHelper</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXntNSt7is_sameIbN4impl20UnderlyingTypeHelperI8EnumTypeE4typeEE5valueEE12VmbErrorTypeE4typeE8EnumType" title="VmbCPP::Feature::SetValue::EnumType"><span class="n"><span class="pre">EnumType</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">type</span></span><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">value</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">type</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SetValue</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXntNSt7is_sameIbN4impl20UnderlyingTypeHelperI8EnumTypeE4typeEE5valueEE12VmbErrorTypeE4typeE8EnumType" title="VmbCPP::Feature::SetValue::EnumType"><span class="n"><span class="pre">EnumType</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">value</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXntNSt7is_sameIbN4impl20UnderlyingTypeHelperI8EnumTypeE4typeEE5valueEE12VmbErrorTypeE4typeE8EnumType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Convenience function for calling <a class="reference internal" href="#classVmbCPP_1_1Feature_1a5de6964cb3d079d69b815e825bdce173"><span class="std std-ref">SetValue(VmbInt64_t)</span></a> with an enum value without the need to cast the parameter to VmbInt64_t. </p>
+<p>Calls <code class="docutils literal notranslate"><span class="pre">SetValue(static_cast&lt;VmbInt64_t&gt;(value))</span></code></p>
+<dl class="field-list simple">
+<dt class="field-odd">Template Parameters</dt>
+<dd class="field-odd"><p><strong>EnumType</strong> – an enum type that with an underlying type other than <code class="docutils literal notranslate"><span class="pre">bool</span></code>. </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a87d5877e78b64b99411e14fd6baa50ea"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">SetValue</span> <span class="pre">(double</span> <span class="pre">value)</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Sets the value of a feature float feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>value</strong> – <strong>[in]</strong> The feature’s value</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a79fa25698b61fda8a005f5fca2b75def"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">SetValue</span> <span class="pre">(const</span> <span class="pre">char</span> <span class="pre">*pValue)</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Sets the value of a string feature or an enumeration feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pValue</strong> – <strong>[in]</strong> The feature’s value</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP7Feature8SetValueENSt9nullptr_tE">
+<span id="_CPPv3N6VmbCPP7Feature8SetValueENSt9nullptr_tE"></span><span id="_CPPv2N6VmbCPP7Feature8SetValueENSt9nullptr_tE"></span><span id="VmbCPP::Feature::SetValue__std::nullptr_t"></span><span class="target" id="classVmbCPP_1_1Feature_1adbba84472abda9e431464b61c98d397b"></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SetValue</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">nullptr_t</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP7Feature8SetValueENSt9nullptr_tE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>null is not allowed as string value </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a7a593fd13e4f34a13ce136d8e583a2bf"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">SetValue</span> <span class="pre">(bool</span> <span class="pre">value)</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Sets the value of a feature of type Bool. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>value</strong> – <strong>[in]</strong> The feature’s value</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP7Feature8SetValueERK11UcharVector">
+<span id="_CPPv3N6VmbCPP7Feature8SetValueERK11UcharVector"></span><span id="_CPPv2N6VmbCPP7Feature8SetValueERK11UcharVector"></span><span id="VmbCPP::Feature::SetValue__UcharVectorCR"></span><span class="target" id="classVmbCPP_1_1Feature_1a2284c5b823671c05ea2c8be68acb42e8"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SetValue</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">UcharVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">value</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP7Feature8SetValueERK11UcharVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Sets the value of a feature of type Register. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>value</strong> – <strong>[in]</strong> The feature’s value</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a8262ceccddc2d6069a86eb6b9dbf78a3"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">HasIncrement</span> <span class="pre">(VmbBool_t</span> <span class="pre">&amp;incrementSupported)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Checks, if a Float or Integer feature provides an increment. </p>
+<p>Integer features are always assumed to provide an incement, even if it defaults to 0.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>incrementSupported</strong> – <strong>[out]</strong> The feature’s increment support state</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a0590ddb37e1095b17a24b1d3e4aa153f"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetIncrement</span> <span class="pre">(VmbInt64_t</span> <span class="pre">&amp;increment)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Gets the increment of a feature of type Integer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>increment</strong> – <strong>[out]</strong> The feature’s increment</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a048b63b5ba3165fa8a3e7c2049b953e1"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetIncrement</span> <span class="pre">(double</span> <span class="pre">&amp;increment)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Gets the increment of a feature of type Float. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>increment</strong> – <strong>[out]</strong> The feature’s increment</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a5932689685bbacb553dcb62c3477f144"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">IsValueAvailable</span> <span class="pre">(const</span> <span class="pre">char</span> <span class="pre">*pValue,</span> <span class="pre">bool</span> <span class="pre">&amp;available)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Indicates whether an existing enumeration value is currently available. </p>
+<p>An enumeration value might not be available due to the module’s current configuration.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pValue</strong> – <strong>[in]</strong> The enumeration value as string </p></li>
+<li><p><strong>available</strong> – <strong>[out]</strong> True when the given value is available</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – If the given value is not a valid enumeration value for this enum </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The feature is not an enumeration </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature16IsValueAvailableENSt9nullptr_tERb">
+<span id="_CPPv3NK6VmbCPP7Feature16IsValueAvailableENSt9nullptr_tERb"></span><span id="_CPPv2NK6VmbCPP7Feature16IsValueAvailableENSt9nullptr_tERb"></span><span id="VmbCPP::Feature::IsValueAvailable__std::nullptr_t.bRC"></span><span class="target" id="classVmbCPP_1_1Feature_1ad46af489724f9ff8c212c9809c60ad60"></span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">IsValueAvailable</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">nullptr_t</span></span>, <span class="kt"><span class="pre">bool</span></span><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature16IsValueAvailableENSt9nullptr_tERb" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Searching for an enum entry given the null string is not allowed. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a6a396c78e13d058d34131a5a2a5f9c1a"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">IsValueAvailable</span> <span class="pre">(VmbInt64_t</span> <span class="pre">value,</span> <span class="pre">bool</span> <span class="pre">&amp;available)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Indicates whether an existing enumeration value is currently available. </p>
+<p>An enumeration value might not be selectable due to the module’s current configuration.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>value</strong> – <strong>[in]</strong> The enumeration value as int </p></li>
+<li><p><strong>available</strong> – <strong>[out]</strong> True when the given value is available</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – If the given value is not a valid enumeration value for this enum </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The feature is not an enumeration </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a4c330d4f3bdacbd9f72839d4167a4c0a"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RunCommand</span> <span class="pre">()</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Executes a feature of type Command. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1aabe6206da169e402a16db13e73de277c"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">IsCommandDone</span> <span class="pre">(bool</span> <span class="pre">&amp;isDone)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Checks if the execution of a feature of type Command has finished. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>isDone</strong> – <strong>[out]</strong> True when execution has finished</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature7GetNameERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP7Feature7GetNameERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP7Feature7GetNameERNSt6stringE"></span><span id="VmbCPP::Feature::GetName__ssRC"></span><span class="target" id="classVmbCPP_1_1Feature_1aea78e8ffd9516fcc7ee0e2a9bed1c6c7"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetName</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">name</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature7GetNameERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries a feature’s name. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The feature name does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>name</strong> – <strong>[out]</strong> The feature’s name</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – </p></li>
+<li><p><strong>VmbErrorResources</strong> – </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature14GetDisplayNameERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP7Feature14GetDisplayNameERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP7Feature14GetDisplayNameERNSt6stringE"></span><span id="VmbCPP::Feature::GetDisplayName__ssRC"></span><span class="target" id="classVmbCPP_1_1Feature_1a7aefd889b2737438f1c6a242b435cd66"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetDisplayName</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">displayName</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature14GetDisplayNameERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries a feature’s display name. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The display name does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>displayName</strong> – <strong>[out]</strong> The feature’s display name</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – </p></li>
+<li><p><strong>VmbErrorResources</strong> – </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1aa86a42c039959b7a670b42e92a037286"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetDataType</span> <span class="pre">(VmbFeatureDataType</span> <span class="pre">&amp;dataType)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries a feature’s type. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The feature type does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>dataType</strong> – <strong>[out]</strong> The feature’s type</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a7555de75f03e7bfdfd7e6ac8e400b03a"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetFlags</span> <span class="pre">(VmbFeatureFlagsType</span> <span class="pre">&amp;flags)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries a feature’s access status. </p>
+<p>The access to the feature may change depending on the state of the module.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>flags</strong> – <strong>[out]</strong> The feature’s access status</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature11GetCategoryERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP7Feature11GetCategoryERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP7Feature11GetCategoryERNSt6stringE"></span><span id="VmbCPP::Feature::GetCategory__ssRC"></span><span class="target" id="classVmbCPP_1_1Feature_1a99de192427c93a0be41047537e671c19"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetCategory</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">category</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature11GetCategoryERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries a feature’s category in the feature tree. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The category does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>category</strong> – <strong>[out]</strong> The feature’s position in the feature tree</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a0117530753e17ed44c9cb8aed6768ca0"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetPollingTime</span> <span class="pre">(VmbUint32_t</span> <span class="pre">&amp;pollingTime)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries a feature’s polling time. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pollingTime</strong> – <strong>[out]</strong> The interval to poll the feature</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature7GetUnitERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP7Feature7GetUnitERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP7Feature7GetUnitERNSt6stringE"></span><span id="VmbCPP::Feature::GetUnit__ssRC"></span><span class="target" id="classVmbCPP_1_1Feature_1a7ec2d23c29481496bbc80ef40a8f3914"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetUnit</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">unit</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature7GetUnitERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries a feature’s unit. </p>
+<p>
+Information about the unit used is only available for features of type Integer or Float. For other feature types the empty string is returned.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The display name does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>unit</strong> – <strong>[out]</strong> The feature’s unit</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature17GetRepresentationERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP7Feature17GetRepresentationERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP7Feature17GetRepresentationERNSt6stringE"></span><span id="VmbCPP::Feature::GetRepresentation__ssRC"></span><span class="target" id="classVmbCPP_1_1Feature_1af22cb13ae0a6cbed1527c29b6e897fde"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetRepresentation</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">representation</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature17GetRepresentationERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries a feature’s representation. </p>
+<p>
+Information about the representation used is only available for features of type Integer or Float. For other feature types the empty string is returned.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The representation does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>representation</strong> – <strong>[out]</strong> The feature’s representation</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1aecc06ebcd610ede727c0bd0de7b1b4ad"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetVisibility</span> <span class="pre">(VmbFeatureVisibilityType</span> <span class="pre">&amp;visibility)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries a feature’s visibility. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The visibiliry does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>visibility</strong> – <strong>[out]</strong> The feature’s visibility</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature10GetToolTipERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP7Feature10GetToolTipERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP7Feature10GetToolTipERNSt6stringE"></span><span id="VmbCPP::Feature::GetToolTip__ssRC"></span><span class="target" id="classVmbCPP_1_1Feature_1ab3b5b8a6b20587ce4dc2aeb2d8ed8a34"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetToolTip</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">toolTip</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature10GetToolTipERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries a feature’s tooltip to display in the GUI. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The tooltip does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>toolTip</strong> – <strong>[out]</strong> The feature’s tool tip</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature14GetDescriptionERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP7Feature14GetDescriptionERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP7Feature14GetDescriptionERNSt6stringE"></span><span id="VmbCPP::Feature::GetDescription__ssRC"></span><span class="target" id="classVmbCPP_1_1Feature_1acfb17839e93c15f460a7c3e72c4d4041"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetDescription</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">description</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature14GetDescriptionERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries a feature’s description. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The description does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>description</strong> – <strong>[out]</strong> The feature’s description</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature16GetSFNCNamespaceERNSt6stringE">
+<span id="_CPPv3NK6VmbCPP7Feature16GetSFNCNamespaceERNSt6stringE"></span><span id="_CPPv2NK6VmbCPP7Feature16GetSFNCNamespaceERNSt6stringE"></span><span id="VmbCPP::Feature::GetSFNCNamespace__ssRC"></span><span class="target" id="classVmbCPP_1_1Feature_1ab16fae5eae823dbbdc91e2d56e41b25b"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetSFNCNamespace</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">string</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">sFNCNamespace</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature16GetSFNCNamespaceERNSt6stringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Queries a feature’s Standard <a class="reference internal" href="#classVmbCPP_1_1Feature"><span class="std std-ref">Feature</span></a> Naming Convention namespace. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The namespace does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>sFNCNamespace</strong> – <strong>[out]</strong> The feature’s SFNC namespace</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP7Feature19GetSelectedFeaturesER16FeaturePtrVector">
+<span id="_CPPv3N6VmbCPP7Feature19GetSelectedFeaturesER16FeaturePtrVector"></span><span id="_CPPv2N6VmbCPP7Feature19GetSelectedFeaturesER16FeaturePtrVector"></span><span id="VmbCPP::Feature::GetSelectedFeatures__FeaturePtrVectorR"></span><span class="target" id="classVmbCPP_1_1Feature_1a5d4713ca06aac49ead3df7f7908ebb35"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetSelectedFeatures</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">FeaturePtrVector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">selectedFeatures</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP7Feature19GetSelectedFeaturesER16FeaturePtrVector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Gets the features that get selected by the current feature. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The selected features do not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>selectedFeatures</strong> – <strong>[out]</strong> The selected features</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4NK6VmbCPP7Feature16GetValidValueSetER11Int64Vector">
+<span id="_CPPv3NK6VmbCPP7Feature16GetValidValueSetER11Int64Vector"></span><span id="_CPPv2NK6VmbCPP7Feature16GetValidValueSetER11Int64Vector"></span><span id="VmbCPP::Feature::GetValidValueSet__Int64VectorRC"></span><span class="target" id="classVmbCPP_1_1Feature_1a2e1f46310632842a5f81a424c3bd1bd4"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GetValidValueSet</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">Int64Vector</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">validValues</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="k"><span class="pre">noexcept</span></span><a class="headerlink" href="#_CPPv4NK6VmbCPP7Feature16GetValidValueSetER11Int64Vector" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Retrieves info about the valid value set of an integer feature. Features of other types will retrieve an error <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a4b60e7d1e1ed8777f6af85ae3c845d85"><span class="std std-ref">VmbErrorWrongType</span></a>. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Only some specific integer features support valid value sets.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>validValues</strong> – <strong>[out]</strong> Vector of int64, after the call it contains the valid value set.</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The current feature handle is not valid</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of the feature is not Integer</p></li>
+<li><p><strong>VmbErrorValidValueSetNotPresent</strong> – The feature does not provide a valid value set</p></li>
+<li><p><strong>VmbErrorResources</strong> – Resources not available (e.g. memory)</p></li>
+<li><p><strong>VmbErrorOther</strong> – Some other issue occured </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occured.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a00e5fdb52b4616af20e34c41c982800d"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">IsReadable</span> <span class="pre">(bool</span> <span class="pre">&amp;isReadable)</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries the read access status of a feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>isReadable</strong> – <strong>[out]</strong> True when feature can be read</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a8f12716321178c1e9484c528ee54fe91"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">IsWritable</span> <span class="pre">(bool</span> <span class="pre">&amp;isWritable)</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries the write access status of a feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>isWritable</strong> – <strong>[out]</strong> True when feature can be written</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a2565727bb9d6975465a817ede971c2de"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">IsStreamable</span> <span class="pre">(bool</span> <span class="pre">&amp;isStreamable)</span> <span class="pre">const</span> <span class="pre">noexcept</span></span></dt>
+<dd><p>Queries whether a feature’s should be persisted to store the state of a module. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>The information does not change during the lifecycle of the object.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>isStreamable</strong> – <strong>[out]</strong> True when streamable</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a817fe9fea81ff4e28fc52a6454076cca"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RegisterObserver</span> <span class="pre">(const</span> <span class="pre">IFeatureObserverPtr</span> <span class="pre">&amp;pObserver)</span></span></dt>
+<dd><p>Registers an observer that notifies the application whenever a feature is invalidated. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>A feature may be invalidated even though the value hasn’t changed. A notification of the observer just provides a notification that the value needs to be reread, to be sure the current module value is known.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pObserver</strong> – <strong>[out]</strong> The observer to be registered</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pObserver</span></code> is null. </p></li>
+<li><p><strong>VmbErrorAlready</strong> – <code class="docutils literal notranslate"><span class="pre">pObserver</span></code> is already registered </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – Device is not open (<a class="reference internal" href="#classVmbCPP_1_1FeatureContainer"><span class="std std-ref">FeatureContainer</span></a> is null) </p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback </p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1Feature_1a36b44eaf20b28498b9f29728fb8597cb"></span><span class="sig-name descname"><span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">UnregisterObserver</span> <span class="pre">(const</span> <span class="pre">IFeatureObserverPtr</span> <span class="pre">&amp;pObserver)</span></span></dt>
+<dd><p>Unregisters an observer. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pObserver</strong> – <strong>[out]</strong> The observer to be unregistered</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pObserver</span></code> is null. </p></li>
+<li><p><strong>VmbErrorUnknown</strong> – <code class="docutils literal notranslate"><span class="pre">pObserver</span></code> is not registered </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – Device is not open (<a class="reference internal" href="#classVmbCPP_1_1FeatureContainer"><span class="std std-ref">FeatureContainer</span></a> is null) </p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback </p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+<li><p><strong>VmbErrorInternalFault</strong> – Could not lock feature observer list for writing. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+</section>
+<section id="interfaces">
+<h2>Interfaces<a class="headerlink" href="#interfaces" title="Permalink to this headline"></a></h2>
+<section id="icameralistobserver">
+<h3>ICameraListObserver<a class="headerlink" href="#icameralistobserver" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP19ICameraListObserverE">
+<span id="_CPPv3N6VmbCPP19ICameraListObserverE"></span><span id="_CPPv2N6VmbCPP19ICameraListObserverE"></span><span id="VmbCPP::ICameraListObserver"></span><span class="target" id="classVmbCPP_1_1ICameraListObserver"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ICameraListObserver</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP19ICameraListObserverE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A base class for listeners observing the list of available cameras. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1ICameraListObserver_1ab7577d03afac859b492d82a70b5a2b61"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">void</span> <span class="pre">CameraListChanged</span> <span class="pre">(CameraPtr</span> <span class="pre">pCam,</span> <span class="pre">UpdateTriggerType</span> <span class="pre">reason)=0</span></span></dt>
+<dd><p>The event handler function that gets called whenever an <a class="reference internal" href="#classVmbCPP_1_1ICameraListObserver"><span class="std std-ref">ICameraListObserver</span></a> is triggered. This occurs most likely when a camera was plugged in or out. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pCam</strong> – <strong>[out]</strong> The camera that triggered the event </p></li>
+<li><p><strong>reason</strong> – <strong>[out]</strong> The reason why the callback routine was triggered (e.g., a new camera was plugged in) </p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP19ICameraListObserverD0Ev">
+<span id="_CPPv3N6VmbCPP19ICameraListObserverD0Ev"></span><span id="_CPPv2N6VmbCPP19ICameraListObserverD0Ev"></span><span id="VmbCPP::ICameraListObserver::~ICameraListObserver"></span><span class="target" id="classVmbCPP_1_1ICameraListObserver_1a4885bb82ad852c790c031edc28fee1ef"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">~ICameraListObserver</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP19ICameraListObserverD0Ev" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Destroys an instance of class <a class="reference internal" href="#classVmbCPP_1_1ICameraListObserver"><span class="std std-ref">ICameraListObserver</span></a>. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="iinterfacelistobserver">
+<h3>IInterfaceListObserver<a class="headerlink" href="#iinterfacelistobserver" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP22IInterfaceListObserverE">
+<span id="_CPPv3N6VmbCPP22IInterfaceListObserverE"></span><span id="_CPPv2N6VmbCPP22IInterfaceListObserverE"></span><span id="VmbCPP::IInterfaceListObserver"></span><span class="target" id="classVmbCPP_1_1IInterfaceListObserver"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">IInterfaceListObserver</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP22IInterfaceListObserverE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Base class for Observers of the list of interfaces. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1IInterfaceListObserver_1aec8b2a7e5c511d371f089f572c13ec1e"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">void</span> <span class="pre">InterfaceListChanged</span> <span class="pre">(InterfacePtr</span> <span class="pre">pInterface,</span> <span class="pre">UpdateTriggerType</span> <span class="pre">reason)=0</span></span></dt>
+<dd><p>The event handler function that gets called whenever an <a class="reference internal" href="#classVmbCPP_1_1IInterfaceListObserver"><span class="std std-ref">IInterfaceListObserver</span></a> is triggered. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pInterface</strong> – <strong>[out]</strong> The interface that triggered the event </p></li>
+<li><p><strong>reason</strong> – <strong>[out]</strong> The reason why the callback routine was triggered </p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP22IInterfaceListObserverD0Ev">
+<span id="_CPPv3N6VmbCPP22IInterfaceListObserverD0Ev"></span><span id="_CPPv2N6VmbCPP22IInterfaceListObserverD0Ev"></span><span id="VmbCPP::IInterfaceListObserver::~IInterfaceListObserver"></span><span class="target" id="classVmbCPP_1_1IInterfaceListObserver_1ae1eae3597fc2394ed2e08149b0c33240"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">~IInterfaceListObserver</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP22IInterfaceListObserverD0Ev" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Destroys an instance of class <a class="reference internal" href="#classVmbCPP_1_1IInterfaceListObserver"><span class="std std-ref">IInterfaceListObserver</span></a>. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="icapturingmodule">
+<h3>ICapturingModule<a class="headerlink" href="#icapturingmodule" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16ICapturingModuleE">
+<span id="_CPPv3N6VmbCPP16ICapturingModuleE"></span><span id="_CPPv2N6VmbCPP16ICapturingModuleE"></span><span id="VmbCPP::ICapturingModule"></span><span class="target" id="classVmbCPP_1_1ICapturingModule"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ICapturingModule</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP16ICapturingModuleE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Common interface for entities acquisition can be started for. </p>
+<p><a class="reference internal" href="#classVmbCPP_1_1Stream"><span class="std std-ref">Stream</span></a> and <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> both implement this interface. For <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> this interface provides access to the first stream. </p>
+<p>Subclassed by <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">VmbCPP::Camera</span></a>, <a class="reference internal" href="#classVmbCPP_1_1Stream"><span class="std std-ref">VmbCPP::Stream</span></a></p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1ICapturingModule_1a7db2a2be1d240434bce81c93e00980d1"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">AnnounceFrame</span> <span class="pre">(const</span> <span class="pre">FramePtr</span> <span class="pre">&amp;pFrame)=0</span></span></dt>
+<dd><p>Announces a frame to the API that may be queued for frame capturing later. Allows some preparation for frames like DMA preparation depending on the transport layer. The order in which the frames are announced is not taken in consideration by the API. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFrame</strong> – <strong>[in]</strong> Shared pointer to a frame to announce</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – “pFrame” is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1ICapturingModule_1a49707ed5f8d7470b0e9f3dfe7603963d"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RevokeFrame</span> <span class="pre">(const</span> <span class="pre">FramePtr</span> <span class="pre">&amp;pFrame)=0</span></span></dt>
+<dd><p>Revoke a frame from the API. The referenced frame is removed from the pool of frames for capturing images. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFrame</strong> – <strong>[in]</strong> Shared pointer to a frame that is to be removed from the list of announced frames</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given frame pointer is not valid </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – “pFrame” is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1ICapturingModule_1a2bf41088fd2480ab53e2e52ef55abd42"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">RevokeAllFrames</span> <span class="pre">()=0</span></span></dt>
+<dd><p>Revoke all frames assigned to this certain camera. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1ICapturingModule_1ad78e9480401352a23a3eb6bd3269274d"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">QueueFrame</span> <span class="pre">(const</span> <span class="pre">FramePtr</span> <span class="pre">&amp;pFrame)=0</span></span></dt>
+<dd><p>Queues a frame that may be filled during frame capturing. </p>
+<p>The given frame is put into a queue that will be filled sequentially. The order in which the frames are filled is determined by the order in which they are queued. If the frame was announced with <a class="reference internal" href="#classVmbCPP_1_1ICapturingModule_1a7db2a2be1d240434bce81c93e00980d1"><span class="std std-ref">AnnounceFrame()</span></a> before, the application has to ensure that the frame is also revoked by calling <a class="reference internal" href="#classVmbCPP_1_1ICapturingModule_1a49707ed5f8d7470b0e9f3dfe7603963d"><span class="std std-ref">RevokeFrame()</span></a> or RevokeAll() when cleaning up.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFrame</strong> – <strong>[in]</strong> A shared pointer to a frame</p>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given frame is not valid </p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – “pFrame” is null. </p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API </p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – StopContinuousImageAcquisition is currently running in another thread </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1ICapturingModule_1a41795a0dbf1e6dd12b44326941191c8e"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">FlushQueue</span> <span class="pre">()=0</span></span></dt>
+<dd><p>Flushes the capture queue. </p>
+<p>All currently queued frames will be returned to the user, leaving no frames in the input queue. After this call, no frame notification will occur until frames are queued again.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1ICapturingModule_1a72bb81498d7fa6e7fd7ad536f672699e"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">StartCapture</span> <span class="pre">()=0</span></span></dt>
+<dd><p>Prepare the API for incoming frames from this camera. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a> was not opened for usage </p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1ICapturingModule_1aef3835e023ca42944c6859ab33a21060"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">EndCapture</span> <span class="pre">()=0</span></span></dt>
+<dd><p>Stop the API from being able to receive frames from this camera. </p>
+<p>Consequences of VmbCaptureEnd():<ul class="simple">
+<li><p>The frame queue is flushed</p></li>
+<li><p>The frame callback will not be called any more</p></li>
+</ul>
+</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1ICapturingModule_1a0cad3945291f5a553bc1788f6890e168"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">VmbErrorType</span> <span class="pre">GetStreamBufferAlignment</span> <span class="pre">(VmbUint32_t</span> <span class="pre">&amp;nBufferAlignment)=0</span></span></dt>
+<dd><p>Retrieve the necessary buffer alignment size in bytes (equals 1 if Data <a class="reference internal" href="#classVmbCPP_1_1Stream"><span class="std std-ref">Stream</span></a> has no such restriction) </p>
+<dl class="field-list simple">
+<dt class="field-odd">Return values</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error </p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – VmbStartup() was not called before the current command </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><a class="reference internal" href="#VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"><span class="std std-ref">VmbErrorType</span></a></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16ICapturingModuleD0Ev">
+<span id="_CPPv3N6VmbCPP16ICapturingModuleD0Ev"></span><span id="_CPPv2N6VmbCPP16ICapturingModuleD0Ev"></span><span id="VmbCPP::ICapturingModule::~ICapturingModule"></span><span class="target" id="classVmbCPP_1_1ICapturingModule_1ae5924f5a4c3c06cea9bdc07bd0dce856"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">~ICapturingModule</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP16ICapturingModuleD0Ev" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Destroys an instance of class <a class="reference internal" href="#classVmbCPP_1_1ICapturingModule"><span class="std std-ref">ICapturingModule</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16ICapturingModule16ICapturingModuleERK16ICapturingModule">
+<span id="_CPPv3N6VmbCPP16ICapturingModule16ICapturingModuleERK16ICapturingModule"></span><span id="_CPPv2N6VmbCPP16ICapturingModule16ICapturingModuleERK16ICapturingModule"></span><span id="VmbCPP::ICapturingModule::ICapturingModule__ICapturingModuleCR"></span><span class="target" id="classVmbCPP_1_1ICapturingModule_1a4f9e81fcb22e20e5f2f8f163de087ea4"></span><span class="sig-name descname"><span class="n"><span class="pre">ICapturingModule</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP16ICapturingModule16ICapturingModuleERK16ICapturingModule" title="VmbCPP::ICapturingModule::ICapturingModule"><span class="n"><span class="pre">ICapturingModule</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP16ICapturingModule16ICapturingModuleERK16ICapturingModule" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is non-copyable. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16ICapturingModuleaSERK16ICapturingModule">
+<span id="_CPPv3N6VmbCPP16ICapturingModuleaSERK16ICapturingModule"></span><span id="_CPPv2N6VmbCPP16ICapturingModuleaSERK16ICapturingModule"></span><span id="VmbCPP::ICapturingModule::assign-operator__ICapturingModuleCR"></span><span class="target" id="classVmbCPP_1_1ICapturingModule_1a3601d8478aa1e458fbca1e7b076634f7"></span><a class="reference internal" href="#_CPPv4N6VmbCPP16ICapturingModuleE" title="VmbCPP::ICapturingModule"><span class="n"><span class="pre">ICapturingModule</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="o"><span class="pre">=</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6VmbCPP16ICapturingModuleE" title="VmbCPP::ICapturingModule"><span class="n"><span class="pre">ICapturingModule</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP16ICapturingModuleaSERK16ICapturingModule" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Object is non-copyable. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="ifeatureobserver">
+<h3>IFeatureObserver<a class="headerlink" href="#ifeatureobserver" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16IFeatureObserverE">
+<span id="_CPPv3N6VmbCPP16IFeatureObserverE"></span><span id="_CPPv2N6VmbCPP16IFeatureObserverE"></span><span id="VmbCPP::IFeatureObserver"></span><span class="target" id="classVmbCPP_1_1IFeatureObserver"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">IFeatureObserver</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP16IFeatureObserverE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The base class to derive feature invalidation listeners from. </p>
+<p>Derived classes must implement <a class="reference internal" href="#classVmbCPP_1_1IFeatureObserver_1adb23a31c938a148d84dc3af7c4f77b43"><span class="std std-ref">IFeatureObserver::FeatureChanged</span></a> . </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1IFeatureObserver_1adb23a31c938a148d84dc3af7c4f77b43"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">void</span> <span class="pre">FeatureChanged</span> <span class="pre">(const</span> <span class="pre">FeaturePtr</span> <span class="pre">&amp;pFeature)=0</span></span></dt>
+<dd><p>The event handler function that gets called whenever a feature has changed. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFeature</strong> – <strong>[in]</strong> The feature that has changed </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16IFeatureObserverD0Ev">
+<span id="_CPPv3N6VmbCPP16IFeatureObserverD0Ev"></span><span id="_CPPv2N6VmbCPP16IFeatureObserverD0Ev"></span><span id="VmbCPP::IFeatureObserver::~IFeatureObserver"></span><span class="target" id="classVmbCPP_1_1IFeatureObserver_1a76e77101fa3c07e3be1be3e645d76a1e"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">~IFeatureObserver</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP16IFeatureObserverD0Ev" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Destroys an instance of class <a class="reference internal" href="#classVmbCPP_1_1IFeatureObserver"><span class="std std-ref">IFeatureObserver</span></a>. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+<section id="iframeobserver">
+<h3>IFrameObserver<a class="headerlink" href="#iframeobserver" title="Permalink to this headline"></a></h3>
+<dl class="cpp class">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14IFrameObserverE">
+<span id="_CPPv3N6VmbCPP14IFrameObserverE"></span><span id="_CPPv2N6VmbCPP14IFrameObserverE"></span><span id="VmbCPP::IFrameObserver"></span><span class="target" id="classVmbCPP_1_1IFrameObserver"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">IFrameObserver</span></span></span><a class="headerlink" href="#_CPPv4N6VmbCPP14IFrameObserverE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The base class for observers listening for acquired frames. </p>
+<p>A derived class must implement the FrameReceived function. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
+<dl class="cpp function">
+<dt class="sig sig-object cpp">
+<span class="target" id="classVmbCPP_1_1IFrameObserver_1a449e525331e691efdc701b61ac16ad11"></span><span class="sig-name descname"><span class="pre">virtual</span> <span class="pre">IMEXPORT</span> <span class="pre">void</span> <span class="pre">FrameReceived</span> <span class="pre">(const</span> <span class="pre">FramePtr</span> <span class="pre">pFrame)=0</span></span></dt>
+<dd><p>The event handler function that gets called whenever a new frame is received. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>pFrame</strong> – <strong>[in]</strong> The frame that was received </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14IFrameObserverD0Ev">
+<span id="_CPPv3N6VmbCPP14IFrameObserverD0Ev"></span><span id="_CPPv2N6VmbCPP14IFrameObserverD0Ev"></span><span id="VmbCPP::IFrameObserver::~IFrameObserver"></span><span class="target" id="classVmbCPP_1_1IFrameObserver_1a0948eaf4fffc4931002a5e5d841a6297"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="n"><span class="pre">IMEXPORT</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">~IFrameObserver</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6VmbCPP14IFrameObserverD0Ev" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Destroys an instance of class <a class="reference internal" href="#classVmbCPP_1_1IFrameObserver"><span class="std std-ref">IFrameObserver</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp function">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14IFrameObserver14IFrameObserverEv">
+<span id="_CPPv3N6VmbCPP14IFrameObserver14IFrameObserverEv"></span><span id="_CPPv2N6VmbCPP14IFrameObserver14IFrameObserverEv"></span><span id="VmbCPP::IFrameObserver::IFrameObserver"></span><span class="target" id="classVmbCPP_1_1IFrameObserver_1aac16f86bc687dfca95b2c5e2dda1b7e7"></span><span class="sig-name descname"><span class="n"><span class="pre">IFrameObserver</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">delete</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP14IFrameObserver14IFrameObserverEv" title="Permalink to this definition"></a><br /></dt>
+<dd><p>frame observers are not intended to be default constructed </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+</section>
+<section id="common-types-constants">
+<h2>Common Types &amp; Constants<a class="headerlink" href="#common-types-constants" title="Permalink to this headline"></a></h2>
+<p>Main header file for the common types of the APIs. </p>
+<p>This file describes all necessary definitions for types used within the Vmb APIs. These type definitions are designed to be portable from other languages and other operating systems. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-basic-types">Basic Types</p>
+<dl class="cpp macro">
+<dt class="sig sig-object cpp" id="c.VMB_FILE_PATH_LITERAL">
+<span class="target" id="VmbCommonTypes_8h_1ab8f88512ef6299f0fa40de901a63576b"></span><span class="sig-name descname"><span class="n"><span class="pre">VMB_FILE_PATH_LITERAL</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">value</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.VMB_FILE_PATH_LITERAL" title="Permalink to this definition"></a><br /></dt>
+<dd><p>macro for converting a c string literal into a system dependent string literal </p>
+<p>Adds L as prefix on Windows and is replaced by the unmodified value on other operating systems.</p>
+<p><div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">const</span> <span class="n">VmbFilePathChar_t</span><span class="o">*</span> <span class="n">path</span> <span class="o">=</span> <span class="n">VMB_FILE_PATH_LITERAL</span><span class="p">(</span><span class="s2">&quot;./some/path/tl.cti&quot;</span><span class="p">);</span>
+</pre></div>
+</div>
+ </p>
+</dd></dl>
+
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv410VmbBoolVal">
+<span id="_CPPv310VmbBoolVal"></span><span id="_CPPv210VmbBoolVal"></span><span class="target" id="VmbCommonTypes_8h_1aad1cb306db6258b339095f42664f843e"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbBoolVal</span></span></span><a class="headerlink" href="#_CPPv410VmbBoolVal" title="Permalink to this definition"></a><br /></dt>
+<dd><p>enum for bool values. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N10VmbBoolVal11VmbBoolTrueE">
+<span id="_CPPv3N10VmbBoolVal11VmbBoolTrueE"></span><span id="_CPPv2N10VmbBoolVal11VmbBoolTrueE"></span><span class="target" id="VmbCommonTypes_8h_1aad1cb306db6258b339095f42664f843eafa2a02c8235e82fcb3821b27e59fad53"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbBoolTrue</span></span></span><a class="headerlink" href="#_CPPv4N10VmbBoolVal11VmbBoolTrueE" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N10VmbBoolVal12VmbBoolFalseE">
+<span id="_CPPv3N10VmbBoolVal12VmbBoolFalseE"></span><span id="_CPPv2N10VmbBoolVal12VmbBoolFalseE"></span><span class="target" id="VmbCommonTypes_8h_1aad1cb306db6258b339095f42664f843eac5a74ac28d0fbfa278e91c479ce03d2b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbBoolFalse</span></span></span><a class="headerlink" href="#_CPPv4N10VmbBoolVal12VmbBoolFalseE" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv49VmbInt8_t">
+<span id="_CPPv39VmbInt8_t"></span><span id="_CPPv29VmbInt8_t"></span><span id="VmbInt8_t"></span><span class="target" id="VmbCommonTypes_8h_1a42f6a99388c0dd7dd7ffdc558baa8394"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">signed</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInt8_t</span></span></span><a class="headerlink" href="#_CPPv49VmbInt8_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>8-bit signed integer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv410VmbUint8_t">
+<span id="_CPPv310VmbUint8_t"></span><span id="_CPPv210VmbUint8_t"></span><span id="VmbUint8_t"></span><span class="target" id="VmbCommonTypes_8h_1a80934d8646eab9c9457a145bd5223eef"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbUint8_t</span></span></span><a class="headerlink" href="#_CPPv410VmbUint8_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>8-bit unsigned integer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv410VmbInt16_t">
+<span id="_CPPv310VmbInt16_t"></span><span id="_CPPv210VmbInt16_t"></span><span id="VmbInt16_t"></span><span class="target" id="VmbCommonTypes_8h_1a735b4d6b9485020f4654af95aeac53b7"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">short</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInt16_t</span></span></span><a class="headerlink" href="#_CPPv410VmbInt16_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>16-bit signed integer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv411VmbUint16_t">
+<span id="_CPPv311VmbUint16_t"></span><span id="_CPPv211VmbUint16_t"></span><span id="VmbUint16_t"></span><span class="target" id="VmbCommonTypes_8h_1afc865d505147a585b38d909c6904dcad"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">short</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbUint16_t</span></span></span><a class="headerlink" href="#_CPPv411VmbUint16_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>16-bit unsigned integer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv410VmbInt32_t">
+<span id="_CPPv310VmbInt32_t"></span><span id="_CPPv210VmbInt32_t"></span><span id="VmbInt32_t"></span><span class="target" id="VmbCommonTypes_8h_1adccfd3d34e7df49c07df911acc0091a4"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInt32_t</span></span></span><a class="headerlink" href="#_CPPv410VmbInt32_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>32-bit signed integer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv411VmbUint32_t">
+<span id="_CPPv311VmbUint32_t"></span><span id="_CPPv211VmbUint32_t"></span><span id="VmbUint32_t"></span><span class="target" id="VmbCommonTypes_8h_1a8cffaedbf283752f99f538a9189836ab"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbUint32_t</span></span></span><a class="headerlink" href="#_CPPv411VmbUint32_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>32-bit unsigned integer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv410VmbInt64_t">
+<span id="_CPPv310VmbInt64_t"></span><span id="_CPPv210VmbInt64_t"></span><span id="VmbInt64_t"></span><span class="target" id="VmbCommonTypes_8h_1ad79e9c3be077678c59cc7cca122e748d"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInt64_t</span></span></span><a class="headerlink" href="#_CPPv410VmbInt64_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>64-bit signed integer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv411VmbUint64_t">
+<span id="_CPPv311VmbUint64_t"></span><span id="_CPPv211VmbUint64_t"></span><span id="VmbUint64_t"></span><span class="target" id="VmbCommonTypes_8h_1a01862dbc8142f7584542d1ba6bc17334"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbUint64_t</span></span></span><a class="headerlink" href="#_CPPv411VmbUint64_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>64-bit unsigned integer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv411VmbHandle_t">
+<span id="_CPPv311VmbHandle_t"></span><span id="_CPPv211VmbHandle_t"></span><span id="VmbHandle_t"></span><span class="target" id="VmbCommonTypes_8h_1a7da33444556912ae2a73509f40d7927e"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">VmbHandle_t</span></span></span><a class="headerlink" href="#_CPPv411VmbHandle_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle, e.g. for a camera. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv49VmbBool_t">
+<span id="_CPPv39VmbBool_t"></span><span id="_CPPv29VmbBool_t"></span><span id="VmbBool_t"></span><span class="target" id="VmbCommonTypes_8h_1a21241df9eb1895a27d6308417497de55"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbBool_t</span></span></span><a class="headerlink" href="#_CPPv49VmbBool_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Boolean type (equivalent to char). </p>
+<p>For values see <a class="reference internal" href="#VmbCommonTypes_8h_1aad1cb306db6258b339095f42664f843e"><span class="std std-ref">VmbBoolVal</span></a> </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCommonTypes_8h_1a91c7a871e4c8520864063614b0e51755"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv410VmbBoolVal" title="VmbBoolVal"><span class="n"><span class="pre">VmbBoolVal</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbBoolVal</span></span></span><br /></dt>
+<dd><p>enum for bool values. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv410VmbUchar_t">
+<span id="_CPPv310VmbUchar_t"></span><span id="_CPPv210VmbUchar_t"></span><span id="VmbUchar_t"></span><span class="target" id="VmbCommonTypes_8h_1aaa43c6964e3498ef7fa44903f71c8f6a"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbUchar_t</span></span></span><a class="headerlink" href="#_CPPv410VmbUchar_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>char type. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv417VmbFilePathChar_t">
+<span id="_CPPv317VmbFilePathChar_t"></span><span id="_CPPv217VmbFilePathChar_t"></span><span id="VmbFilePathChar_t"></span><span class="target" id="VmbCommonTypes_8h_1a91139f3928988b88ef018b95d20ca607"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFilePathChar_t</span></span></span><a class="headerlink" href="#_CPPv417VmbFilePathChar_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Character type used for file paths </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-error-codes">Error Codes</p>
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv412VmbErrorType">
+<span id="_CPPv312VmbErrorType"></span><span id="_CPPv212VmbErrorType"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorType</span></span></span><a class="headerlink" href="#_CPPv412VmbErrorType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Error codes, returned by most functions. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType15VmbErrorSuccessE">
+<span id="_CPPv3N12VmbErrorType15VmbErrorSuccessE"></span><span id="_CPPv2N12VmbErrorType15VmbErrorSuccessE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aabe8c56182da474e5abbb9497fea7520"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorSuccess</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType15VmbErrorSuccessE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No error. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType21VmbErrorInternalFaultE">
+<span id="_CPPv3N12VmbErrorType21VmbErrorInternalFaultE"></span><span id="_CPPv2N12VmbErrorType21VmbErrorInternalFaultE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a61461aa045659f526d584fafa57ec3aa"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInternalFault</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType21VmbErrorInternalFaultE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unexpected fault in VmbC or driver. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType21VmbErrorApiNotStartedE">
+<span id="_CPPv3N12VmbErrorType21VmbErrorApiNotStartedE"></span><span id="_CPPv2N12VmbErrorType21VmbErrorApiNotStartedE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a4548fd3f2187830d8376e4903062ecbb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorApiNotStarted</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType21VmbErrorApiNotStartedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>VmbStartup() was not called before the current command </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType16VmbErrorNotFoundE">
+<span id="_CPPv3N12VmbErrorType16VmbErrorNotFoundE"></span><span id="_CPPv2N12VmbErrorType16VmbErrorNotFoundE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aa1b09ab2f63fc50164d6fda0b7a48f07"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNotFound</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType16VmbErrorNotFoundE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The designated instance (camera, feature etc.) cannot be found. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType17VmbErrorBadHandleE">
+<span id="_CPPv3N12VmbErrorType17VmbErrorBadHandleE"></span><span id="_CPPv2N12VmbErrorType17VmbErrorBadHandleE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a32980ed74f89ce865bba0a3196dd4c71"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorBadHandle</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType17VmbErrorBadHandleE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The given handle is not valid. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType21VmbErrorDeviceNotOpenE">
+<span id="_CPPv3N12VmbErrorType21VmbErrorDeviceNotOpenE"></span><span id="_CPPv2N12VmbErrorType21VmbErrorDeviceNotOpenE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a911900574957ca4c175e0257ec5a94a2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorDeviceNotOpen</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType21VmbErrorDeviceNotOpenE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Device was not opened for usage. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType21VmbErrorInvalidAccessE">
+<span id="_CPPv3N12VmbErrorType21VmbErrorInvalidAccessE"></span><span id="_CPPv2N12VmbErrorType21VmbErrorInvalidAccessE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a51a21244c7de830864f7fc208d5f2e50"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInvalidAccess</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType21VmbErrorInvalidAccessE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Operation is invalid with the current access mode. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType20VmbErrorBadParameterE">
+<span id="_CPPv3N12VmbErrorType20VmbErrorBadParameterE"></span><span id="_CPPv2N12VmbErrorType20VmbErrorBadParameterE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a599184e0f6f52cbf1ecb77c263e6a7d5"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorBadParameter</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType20VmbErrorBadParameterE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>One of the parameters is invalid (usually an illegal pointer) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType18VmbErrorStructSizeE">
+<span id="_CPPv3N12VmbErrorType18VmbErrorStructSizeE"></span><span id="_CPPv2N12VmbErrorType18VmbErrorStructSizeE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aa87e5ceefc3100864b9b76959162c72d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorStructSize</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType18VmbErrorStructSizeE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The given struct size is not valid for this version of the API. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType16VmbErrorMoreDataE">
+<span id="_CPPv3N12VmbErrorType16VmbErrorMoreDataE"></span><span id="_CPPv2N12VmbErrorType16VmbErrorMoreDataE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139ae6de77b7e851d99131afe669e0ec6df8"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorMoreData</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType16VmbErrorMoreDataE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>More data available in a string/list than space is provided. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType17VmbErrorWrongTypeE">
+<span id="_CPPv3N12VmbErrorType17VmbErrorWrongTypeE"></span><span id="_CPPv2N12VmbErrorType17VmbErrorWrongTypeE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a4b60e7d1e1ed8777f6af85ae3c845d85"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorWrongType</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType17VmbErrorWrongTypeE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Wrong feature type for this access function. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType20VmbErrorInvalidValueE">
+<span id="_CPPv3N12VmbErrorType20VmbErrorInvalidValueE"></span><span id="_CPPv2N12VmbErrorType20VmbErrorInvalidValueE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a3b74a5b652e1f7cbb06dac3b34c998d4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInvalidValue</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType20VmbErrorInvalidValueE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The value is not valid; either out of bounds or not an increment of the minimum. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType15VmbErrorTimeoutE">
+<span id="_CPPv3N12VmbErrorType15VmbErrorTimeoutE"></span><span id="_CPPv2N12VmbErrorType15VmbErrorTimeoutE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a035f5caaff715780f6a960d9fe73a599"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorTimeout</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType15VmbErrorTimeoutE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Timeout during wait. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType13VmbErrorOtherE">
+<span id="_CPPv3N12VmbErrorType13VmbErrorOtherE"></span><span id="_CPPv2N12VmbErrorType13VmbErrorOtherE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a7a5f6f7ea6c7c2c07c7cc608fe3bb2c9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorOther</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType13VmbErrorOtherE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Other error. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType17VmbErrorResourcesE">
+<span id="_CPPv3N12VmbErrorType17VmbErrorResourcesE"></span><span id="_CPPv2N12VmbErrorType17VmbErrorResourcesE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a9af862a0ad254c79c7cedb617883985e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorResources</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType17VmbErrorResourcesE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Resources not available (e.g. memory) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType19VmbErrorInvalidCallE">
+<span id="_CPPv3N12VmbErrorType19VmbErrorInvalidCallE"></span><span id="_CPPv2N12VmbErrorType19VmbErrorInvalidCallE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a0be62f5df39209c4eedff61b4d840d70"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInvalidCall</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType19VmbErrorInvalidCallE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Call is invalid in the current context (e.g. callback) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType12VmbErrorNoTLE">
+<span id="_CPPv3N12VmbErrorType12VmbErrorNoTLE"></span><span id="_CPPv2N12VmbErrorType12VmbErrorNoTLE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a8bf5806518165ead304335dc224acdbb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNoTL</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType12VmbErrorNoTLE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No transport layers are found. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType22VmbErrorNotImplementedE">
+<span id="_CPPv3N12VmbErrorType22VmbErrorNotImplementedE"></span><span id="_CPPv2N12VmbErrorType22VmbErrorNotImplementedE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a4f63ce4028066e8e6471497b11cc1cc4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNotImplemented</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType22VmbErrorNotImplementedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>API feature is not implemented. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType20VmbErrorNotSupportedE">
+<span id="_CPPv3N12VmbErrorType20VmbErrorNotSupportedE"></span><span id="_CPPv2N12VmbErrorType20VmbErrorNotSupportedE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139af811cbff18ce8a7f50bb26d3ef4bb84e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNotSupported</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType20VmbErrorNotSupportedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>API feature is not supported. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType18VmbErrorIncompleteE">
+<span id="_CPPv3N12VmbErrorType18VmbErrorIncompleteE"></span><span id="_CPPv2N12VmbErrorType18VmbErrorIncompleteE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139ae16c860ef921bbc1e0eac46efce66c82"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorIncomplete</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType18VmbErrorIncompleteE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The current operation was not completed (e.g. a multiple registers read or write) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType10VmbErrorIOE">
+<span id="_CPPv3N12VmbErrorType10VmbErrorIOE"></span><span id="_CPPv2N12VmbErrorType10VmbErrorIOE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139af5ce974e1d39d003edd9c37ccba76b2d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorIO</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType10VmbErrorIOE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Low level IO error in transport layer. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType31VmbErrorValidValueSetNotPresentE">
+<span id="_CPPv3N12VmbErrorType31VmbErrorValidValueSetNotPresentE"></span><span id="_CPPv2N12VmbErrorType31VmbErrorValidValueSetNotPresentE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a4025f49bba15c7685de2983326e77f61"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorValidValueSetNotPresent</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType31VmbErrorValidValueSetNotPresentE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The valid value set could not be retrieved, since the feature does not provide this property. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType24VmbErrorGenTLUnspecifiedE">
+<span id="_CPPv3N12VmbErrorType24VmbErrorGenTLUnspecifiedE"></span><span id="_CPPv2N12VmbErrorType24VmbErrorGenTLUnspecifiedE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aec177d9d067a789f1fa651060a192bc0"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorGenTLUnspecified</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType24VmbErrorGenTLUnspecifiedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unspecified GenTL runtime error. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType19VmbErrorUnspecifiedE">
+<span id="_CPPv3N12VmbErrorType19VmbErrorUnspecifiedE"></span><span id="_CPPv2N12VmbErrorType19VmbErrorUnspecifiedE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139afb5e8c539512aa8447517756645a72d7"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorUnspecified</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType19VmbErrorUnspecifiedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unspecified runtime error. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType12VmbErrorBusyE">
+<span id="_CPPv3N12VmbErrorType12VmbErrorBusyE"></span><span id="_CPPv2N12VmbErrorType12VmbErrorBusyE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aafefeead6df901ddb68382c3af129152"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorBusy</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType12VmbErrorBusyE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The responsible module/entity is busy executing actions. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType14VmbErrorNoDataE">
+<span id="_CPPv3N12VmbErrorType14VmbErrorNoDataE"></span><span id="_CPPv2N12VmbErrorType14VmbErrorNoDataE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a1ae31baa012dc1270bcc91d95db06b43"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNoData</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType14VmbErrorNoDataE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The function has no data to work on. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType24VmbErrorParsingChunkDataE">
+<span id="_CPPv3N12VmbErrorType24VmbErrorParsingChunkDataE"></span><span id="_CPPv2N12VmbErrorType24VmbErrorParsingChunkDataE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a6bd8e33ee852a9f91830982a7f7903a6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorParsingChunkData</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType24VmbErrorParsingChunkDataE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An error occurred parsing a buffer containing chunk data. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType13VmbErrorInUseE">
+<span id="_CPPv3N12VmbErrorType13VmbErrorInUseE"></span><span id="_CPPv2N12VmbErrorType13VmbErrorInUseE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139afb2f7a7ee79cffe51d8cb67de537e94f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInUse</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType13VmbErrorInUseE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Something is already in use. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType15VmbErrorUnknownE">
+<span id="_CPPv3N12VmbErrorType15VmbErrorUnknownE"></span><span id="_CPPv2N12VmbErrorType15VmbErrorUnknownE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139ab0197555b22eb61593c733285782e570"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorUnknown</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType15VmbErrorUnknownE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Error condition unknown. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType11VmbErrorXmlE">
+<span id="_CPPv3N12VmbErrorType11VmbErrorXmlE"></span><span id="_CPPv2N12VmbErrorType11VmbErrorXmlE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a38a24719eda2804e4f2a182f69f24d78"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorXml</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType11VmbErrorXmlE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Error parsing XML. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType20VmbErrorNotAvailableE">
+<span id="_CPPv3N12VmbErrorType20VmbErrorNotAvailableE"></span><span id="_CPPv2N12VmbErrorType20VmbErrorNotAvailableE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a04996bac7a586d5914e8686fd2c02cee"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNotAvailable</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType20VmbErrorNotAvailableE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Something is not available. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType22VmbErrorNotInitializedE">
+<span id="_CPPv3N12VmbErrorType22VmbErrorNotInitializedE"></span><span id="_CPPv2N12VmbErrorType22VmbErrorNotInitializedE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a9613f47fe4033efb8cab371d1985e7a4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNotInitialized</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType22VmbErrorNotInitializedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Something is not initialized. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType22VmbErrorInvalidAddressE">
+<span id="_CPPv3N12VmbErrorType22VmbErrorInvalidAddressE"></span><span id="_CPPv2N12VmbErrorType22VmbErrorInvalidAddressE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a50f87791b3f0f8fb988f6692e5826fa2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInvalidAddress</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType22VmbErrorInvalidAddressE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The given address is out of range or invalid for internal reasons. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType15VmbErrorAlreadyE">
+<span id="_CPPv3N12VmbErrorType15VmbErrorAlreadyE"></span><span id="_CPPv2N12VmbErrorType15VmbErrorAlreadyE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a8b62e2286a53367e759d70263eedd197"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorAlready</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType15VmbErrorAlreadyE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Something has already been done. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType19VmbErrorNoChunkDataE">
+<span id="_CPPv3N12VmbErrorType19VmbErrorNoChunkDataE"></span><span id="_CPPv2N12VmbErrorType19VmbErrorNoChunkDataE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aa6254ca3143df554374cb63f5edbc396"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNoChunkData</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType19VmbErrorNoChunkDataE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A frame expected to contain chunk data does not contain chunk data. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType29VmbErrorUserCallbackExceptionE">
+<span id="_CPPv3N12VmbErrorType29VmbErrorUserCallbackExceptionE"></span><span id="_CPPv2N12VmbErrorType29VmbErrorUserCallbackExceptionE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a8efe193898c242b39fbbfe2233af3526"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorUserCallbackException</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType29VmbErrorUserCallbackExceptionE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A callback provided by the user threw an exception. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType27VmbErrorFeaturesUnavailableE">
+<span id="_CPPv3N12VmbErrorType27VmbErrorFeaturesUnavailableE"></span><span id="_CPPv2N12VmbErrorType27VmbErrorFeaturesUnavailableE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a95932374ad0498546c90a7bd86d16431"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorFeaturesUnavailable</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType27VmbErrorFeaturesUnavailableE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The XML for the module is currently not loaded; the module could be in the wrong state or the XML could not be retrieved or could not be parsed properly. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType18VmbErrorTLNotFoundE">
+<span id="_CPPv3N12VmbErrorType18VmbErrorTLNotFoundE"></span><span id="_CPPv2N12VmbErrorType18VmbErrorTLNotFoundE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a419ed0bd3ab3066eca35ae32943a8662"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorTLNotFound</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType18VmbErrorTLNotFoundE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A required transport layer could not be found or loaded. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType17VmbErrorAmbiguousE">
+<span id="_CPPv3N12VmbErrorType17VmbErrorAmbiguousE"></span><span id="_CPPv2N12VmbErrorType17VmbErrorAmbiguousE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a5ce3ac47e4383781a82adf861e839b87"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorAmbiguous</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType17VmbErrorAmbiguousE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An entity cannot be uniquely identified based on the information provided. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType23VmbErrorRetriesExceededE">
+<span id="_CPPv3N12VmbErrorType23VmbErrorRetriesExceededE"></span><span id="_CPPv2N12VmbErrorType23VmbErrorRetriesExceededE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a5b458eb5bb7f0ad29681b6cbdefae94a"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorRetriesExceeded</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType23VmbErrorRetriesExceededE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Something could not be accomplished with a given number of retries. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType31VmbErrorInsufficientBufferCountE">
+<span id="_CPPv3N12VmbErrorType31VmbErrorInsufficientBufferCountE"></span><span id="_CPPv2N12VmbErrorType31VmbErrorInsufficientBufferCountE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a00f1d75a5d7a05d68e55e0c041612246"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInsufficientBufferCount</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType31VmbErrorInsufficientBufferCountE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The operation requires more buffers. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbErrorType14VmbErrorCustomE">
+<span id="_CPPv3N12VmbErrorType14VmbErrorCustomE"></span><span id="_CPPv2N12VmbErrorType14VmbErrorCustomE"></span><span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a9ad210fe4d1d090508ff016367d530fb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorCustom</span></span></span><a class="headerlink" href="#_CPPv4N12VmbErrorType14VmbErrorCustomE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The minimum error code to use for user defined error codes to avoid conflict with existing error codes. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorType</span></span></span><br /></dt>
+<dd><p>Error codes, returned by most functions. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv410VmbError_t">
+<span id="_CPPv310VmbError_t"></span><span id="_CPPv210VmbError_t"></span><span id="VmbError_t"></span><span class="target" id="VmbCommonTypes_8h_1a329cae4432206a18bb3fd9e0e35e850f"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv410VmbInt32_t" title="VmbInt32_t"><span class="n"><span class="pre">VmbInt32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbError_t</span></span></span><a class="headerlink" href="#_CPPv410VmbError_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for an error returned by API methods; for values see <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139"><span class="std std-ref">VmbErrorType</span></a>. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-version">Version</p>
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv416VmbVersionInfo_t">
+<span id="_CPPv316VmbVersionInfo_t"></span><span id="_CPPv216VmbVersionInfo_t"></span><span id="VmbVersionInfo_t"></span><span class="target" id="VmbCommonTypes_8h_1a9cc294f8c37e395da2cf15d19190fef8"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv414VmbVersionInfo" title="VmbVersionInfo"><span class="n"><span class="pre">VmbVersionInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbVersionInfo_t</span></span></span><a class="headerlink" href="#_CPPv416VmbVersionInfo_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Version information. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-pixel-information">Pixel information</p>
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv412VmbPixelType">
+<span id="_CPPv312VmbPixelType"></span><span id="_CPPv212VmbPixelType"></span><span class="target" id="VmbCommonTypes_8h_1a7b317aec453be5d97578b1ac046cc8d9"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelType</span></span></span><a class="headerlink" href="#_CPPv412VmbPixelType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Indicates if pixel is monochrome or RGB. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbPixelType12VmbPixelMonoE">
+<span id="_CPPv3N12VmbPixelType12VmbPixelMonoE"></span><span id="_CPPv2N12VmbPixelType12VmbPixelMonoE"></span><span class="target" id="VmbCommonTypes_8h_1a7b317aec453be5d97578b1ac046cc8d9a594ef645901180350f04badd74fd947d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelMono</span></span></span><a class="headerlink" href="#_CPPv4N12VmbPixelType12VmbPixelMonoE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome pixel. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N12VmbPixelType13VmbPixelColorE">
+<span id="_CPPv3N12VmbPixelType13VmbPixelColorE"></span><span id="_CPPv2N12VmbPixelType13VmbPixelColorE"></span><span class="target" id="VmbCommonTypes_8h_1a7b317aec453be5d97578b1ac046cc8d9a8bb20a6d42737278b7c02a45d17a4d06"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelColor</span></span></span><a class="headerlink" href="#_CPPv4N12VmbPixelType13VmbPixelColorE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel bearing color information. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv418VmbPixelOccupyType">
+<span id="_CPPv318VmbPixelOccupyType"></span><span id="_CPPv218VmbPixelOccupyType"></span><span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupyType</span></span></span><a class="headerlink" href="#_CPPv418VmbPixelOccupyType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Indicates number of bits for a pixel. Needed for building values of <a class="reference internal" href="#VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0b"><span class="std std-ref">VmbPixelFormatType</span></a>. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelOccupyType18VmbPixelOccupy8BitE">
+<span id="_CPPv3N18VmbPixelOccupyType18VmbPixelOccupy8BitE"></span><span id="_CPPv2N18VmbPixelOccupyType18VmbPixelOccupy8BitE"></span><span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5a634a1b9103990b59b19c6ed48e67bc0d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy8Bit</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelOccupyType18VmbPixelOccupy8BitE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 8 bits. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy10BitE">
+<span id="_CPPv3N18VmbPixelOccupyType19VmbPixelOccupy10BitE"></span><span id="_CPPv2N18VmbPixelOccupyType19VmbPixelOccupy10BitE"></span><span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5a817bc910eda6039188454fe692152b4d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy10Bit</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy10BitE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 10 bits. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy12BitE">
+<span id="_CPPv3N18VmbPixelOccupyType19VmbPixelOccupy12BitE"></span><span id="_CPPv2N18VmbPixelOccupyType19VmbPixelOccupy12BitE"></span><span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5a2f21090b3e2010e98538fc0fb9110f9d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy12Bit</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy12BitE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 12 bits. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy14BitE">
+<span id="_CPPv3N18VmbPixelOccupyType19VmbPixelOccupy14BitE"></span><span id="_CPPv2N18VmbPixelOccupyType19VmbPixelOccupy14BitE"></span><span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5a941e6226ca788e23c7cc5e959b4f3a05"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy14Bit</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy14BitE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 14 bits. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy16BitE">
+<span id="_CPPv3N18VmbPixelOccupyType19VmbPixelOccupy16BitE"></span><span id="_CPPv2N18VmbPixelOccupyType19VmbPixelOccupy16BitE"></span><span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5ae40aae1273cc23a64027a8c6fb42e13a"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy16Bit</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy16BitE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 16 bits. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy24BitE">
+<span id="_CPPv3N18VmbPixelOccupyType19VmbPixelOccupy24BitE"></span><span id="_CPPv2N18VmbPixelOccupyType19VmbPixelOccupy24BitE"></span><span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5afd69ad6af6edadf70ebadd4d7f37a145"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy24Bit</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy24BitE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 24 bits. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy32BitE">
+<span id="_CPPv3N18VmbPixelOccupyType19VmbPixelOccupy32BitE"></span><span id="_CPPv2N18VmbPixelOccupyType19VmbPixelOccupy32BitE"></span><span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5a4ac563107ec52efe7b92305baa731fe4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy32Bit</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy32BitE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 32 bits. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy48BitE">
+<span id="_CPPv3N18VmbPixelOccupyType19VmbPixelOccupy48BitE"></span><span id="_CPPv2N18VmbPixelOccupyType19VmbPixelOccupy48BitE"></span><span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5abfe0690725c8d4c831c862d8551e241a"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy48Bit</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy48BitE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 48 bits. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy64BitE">
+<span id="_CPPv3N18VmbPixelOccupyType19VmbPixelOccupy64BitE"></span><span id="_CPPv2N18VmbPixelOccupyType19VmbPixelOccupy64BitE"></span><span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5ad7ab115929b300452f13be973613a00c"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy64Bit</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy64BitE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 64 bits. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv418VmbPixelFormatType">
+<span id="_CPPv318VmbPixelFormatType"></span><span id="_CPPv218VmbPixelFormatType"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0b"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatType</span></span></span><a class="headerlink" href="#_CPPv418VmbPixelFormatType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel format types. As far as possible, the Pixel Format Naming Convention (PFNC) has been followed, allowing a few deviations. If data spans more than one byte, it is always LSB aligned, except if stated differently. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatMono8E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatMono8E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatMono8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bac5dcf7182ae5ebc2297475f2c51c2807"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatMono8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 8 bits (PFNC: Mono8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono10E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatMono10E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatMono10E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba867fb11cc96272ba267d8c5f9e3f7a91"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono10</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono10E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 10 bits in 16 bits (PFNC: Mono10) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType21VmbPixelFormatMono10pE">
+<span id="_CPPv3N18VmbPixelFormatType21VmbPixelFormatMono10pE"></span><span id="_CPPv2N18VmbPixelFormatType21VmbPixelFormatMono10pE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba870283912d1b27128c816f3a983e4bdd"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono10p</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType21VmbPixelFormatMono10pE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 10 bits in 16 bits (PFNC: Mono10p) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono12E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatMono12E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatMono12E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba7a7a671bfef223ec4e317cafbb43bd4c"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono12</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono12E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 12 bits in 16 bits (PFNC: Mono12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType26VmbPixelFormatMono12PackedE">
+<span id="_CPPv3N18VmbPixelFormatType26VmbPixelFormatMono12PackedE"></span><span id="_CPPv2N18VmbPixelFormatType26VmbPixelFormatMono12PackedE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bafee9644f097a32598e00c92b469da83d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono12Packed</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType26VmbPixelFormatMono12PackedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 2x12 bits in 24 bits (GEV:Mono12Packed) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType21VmbPixelFormatMono12pE">
+<span id="_CPPv3N18VmbPixelFormatType21VmbPixelFormatMono12pE"></span><span id="_CPPv2N18VmbPixelFormatType21VmbPixelFormatMono12pE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba08fffd39fadd837de83d3f8a1f51732e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono12p</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType21VmbPixelFormatMono12pE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 2x12 bits in 24 bits (PFNC: MonoPacked) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono14E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatMono14E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatMono14E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba94f0fcefc2299dc5a37ca34abf72a2bb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono14</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono14E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 14 bits in 16 bits (PFNC: Mono14) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono16E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatMono16E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatMono16E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae8c2a7e9a3158d2bd26ee1888f8323c9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono16</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono16E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 16 bits (PFNC: Mono16) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerGR8E">
+<span id="_CPPv3N18VmbPixelFormatType22VmbPixelFormatBayerGR8E"></span><span id="_CPPv2N18VmbPixelFormatType22VmbPixelFormatBayerGR8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba12b2b38f392c1864d826d0a5b6cd4393"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerGR8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 8 bits, starting with GR line (PFNC: BayerGR8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerRG8E">
+<span id="_CPPv3N18VmbPixelFormatType22VmbPixelFormatBayerRG8E"></span><span id="_CPPv2N18VmbPixelFormatType22VmbPixelFormatBayerRG8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba740089fbea08cd548437ce5ea8c09b5c"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerRG8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 8 bits, starting with RG line (PFNC: BayerRG8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerGB8E">
+<span id="_CPPv3N18VmbPixelFormatType22VmbPixelFormatBayerGB8E"></span><span id="_CPPv2N18VmbPixelFormatType22VmbPixelFormatBayerGB8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba2db1897b3b0c3514eaa292012351f18b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerGB8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 8 bits, starting with GB line (PFNC: BayerGB8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerBG8E">
+<span id="_CPPv3N18VmbPixelFormatType22VmbPixelFormatBayerBG8E"></span><span id="_CPPv2N18VmbPixelFormatType22VmbPixelFormatBayerBG8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bacecb15736fa95a4d9c0d9fd77970f34f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerBG8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 8 bits, starting with BG line (PFNC: BayerBG8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR10E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerGR10E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerGR10E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baa5c8f01a0405a8586f76d4214eeb62cf"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR10</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR10E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits in 16 bits, starting with GR line (PFNC: BayerGR10) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG10E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerRG10E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerRG10E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae86a6ecc2004ae90c900632e1a7b58ef"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG10</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG10E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits in 16 bits, starting with RG line (PFNC: BayerRG10) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB10E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerGB10E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerGB10E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba10a0e16e8db6caa5ec8227a99b15e11b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB10</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB10E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits in 16 bits, starting with GB line (PFNC: BayerGB10) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG10E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerBG10E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerBG10E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bab53fe343db7628bf37a351854aaf8c7b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG10</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG10E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits in 16 bits, starting with BG line (PFNC: BayerBG10) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR12E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerGR12E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerGR12E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba1407cf252432ec98313bab07b812c3ad"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR12</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR12E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits in 16 bits, starting with GR line (PFNC: BayerGR12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG12E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerRG12E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerRG12E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baa5ca00782ba61470f32cd9adbc3eac80"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG12</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG12E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits in 16 bits, starting with RG line (PFNC: BayerRG12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB12E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerGB12E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerGB12E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba769a8fa9749e877096db87252a60dc46"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB12</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB12E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits in 16 bits, starting with GB line (PFNC: BayerGB12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG12E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerBG12E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerBG12E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0babaec79651c4b93751469b5140c1cd61d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG12</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG12E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits in 16 bits, starting with BG line (PFNC: BayerBG12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerGR12PackedE">
+<span id="_CPPv3N18VmbPixelFormatType29VmbPixelFormatBayerGR12PackedE"></span><span id="_CPPv2N18VmbPixelFormatType29VmbPixelFormatBayerGR12PackedE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae77ac92566f31831280796011fa63ec2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR12Packed</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerGR12PackedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 2x12 bits in 24 bits, starting with GR line (GEV:BayerGR12Packed) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerRG12PackedE">
+<span id="_CPPv3N18VmbPixelFormatType29VmbPixelFormatBayerRG12PackedE"></span><span id="_CPPv2N18VmbPixelFormatType29VmbPixelFormatBayerRG12PackedE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bab46bd6cf365b613162b318b8d07580b0"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG12Packed</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerRG12PackedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 2x12 bits in 24 bits, starting with RG line (GEV:BayerRG12Packed) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerGB12PackedE">
+<span id="_CPPv3N18VmbPixelFormatType29VmbPixelFormatBayerGB12PackedE"></span><span id="_CPPv2N18VmbPixelFormatType29VmbPixelFormatBayerGB12PackedE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0babf1f159cf0130700174210449820b927"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB12Packed</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerGB12PackedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 2x12 bits in 24 bits, starting with GB line (GEV:BayerGB12Packed) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerBG12PackedE">
+<span id="_CPPv3N18VmbPixelFormatType29VmbPixelFormatBayerBG12PackedE"></span><span id="_CPPv2N18VmbPixelFormatType29VmbPixelFormatBayerBG12PackedE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba229135a55a31bc0ecd131ade1b5e2482"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG12Packed</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerBG12PackedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 2x12 bits in 24 bits, starting with BG line (GEV:BayerBG12Packed) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGR10pE">
+<span id="_CPPv3N18VmbPixelFormatType24VmbPixelFormatBayerGR10pE"></span><span id="_CPPv2N18VmbPixelFormatType24VmbPixelFormatBayerGR10pE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba532b95c86dabacb28006053c2c028361"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR10p</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGR10pE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits continuous packed, starting with GR line (PFNC: BayerGR10p) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerRG10pE">
+<span id="_CPPv3N18VmbPixelFormatType24VmbPixelFormatBayerRG10pE"></span><span id="_CPPv2N18VmbPixelFormatType24VmbPixelFormatBayerRG10pE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba259b1f09cb729756fbeafcf82e945be4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG10p</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerRG10pE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits continuous packed, starting with RG line (PFNC: BayerRG10p) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGB10pE">
+<span id="_CPPv3N18VmbPixelFormatType24VmbPixelFormatBayerGB10pE"></span><span id="_CPPv2N18VmbPixelFormatType24VmbPixelFormatBayerGB10pE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba09686edc6d77bc5e6b7f871068e85cf3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB10p</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGB10pE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits continuous packed, starting with GB line (PFNC: BayerGB10p) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerBG10pE">
+<span id="_CPPv3N18VmbPixelFormatType24VmbPixelFormatBayerBG10pE"></span><span id="_CPPv2N18VmbPixelFormatType24VmbPixelFormatBayerBG10pE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baa8cf7f7265cdbcbec53ec75c0c04f294"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG10p</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerBG10pE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits continuous packed, starting with BG line (PFNC: BayerBG10p) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGR12pE">
+<span id="_CPPv3N18VmbPixelFormatType24VmbPixelFormatBayerGR12pE"></span><span id="_CPPv2N18VmbPixelFormatType24VmbPixelFormatBayerGR12pE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bac8c8eb720985a41ae157e2e0b9c1d785"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR12p</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGR12pE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits continuous packed, starting with GR line (PFNC: BayerGR12p) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerRG12pE">
+<span id="_CPPv3N18VmbPixelFormatType24VmbPixelFormatBayerRG12pE"></span><span id="_CPPv2N18VmbPixelFormatType24VmbPixelFormatBayerRG12pE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba09fa010b93a60420bb6cd4437b504a2f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG12p</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerRG12pE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits continuous packed, starting with RG line (PFNC: BayerRG12p) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGB12pE">
+<span id="_CPPv3N18VmbPixelFormatType24VmbPixelFormatBayerGB12pE"></span><span id="_CPPv2N18VmbPixelFormatType24VmbPixelFormatBayerGB12pE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba121d0de1d646eedeb8cdec8856bb90ed"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB12p</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGB12pE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits continuous packed, starting with GB line (PFNC: BayerGB12p) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerBG12pE">
+<span id="_CPPv3N18VmbPixelFormatType24VmbPixelFormatBayerBG12pE"></span><span id="_CPPv2N18VmbPixelFormatType24VmbPixelFormatBayerBG12pE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba4001d087ef848a49004f5b9b4294cde6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG12p</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerBG12pE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits continuous packed, starting with BG line (PFNC: BayerBG12p) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR16E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerGR16E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerGR16E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baff2883d18e0b5039546ce2d418adcac1"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR16</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR16E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 16 bits, starting with GR line (PFNC: BayerGR16) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG16E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerRG16E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerRG16E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bab5f6156667550a133da465c250d84961"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG16</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG16E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 16 bits, starting with RG line (PFNC: BayerRG16) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB16E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerGB16E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerGB16E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baa4e5965ba7f836a8d40d9da9fd8d75d5"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB16</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB16E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 16 bits, starting with GB line (PFNC: BayerGB16) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG16E">
+<span id="_CPPv3N18VmbPixelFormatType23VmbPixelFormatBayerBG16E"></span><span id="_CPPv2N18VmbPixelFormatType23VmbPixelFormatBayerBG16E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba6f1b96cabda57087edb50b46b9528b45"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG16</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG16E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 16 bits, starting with BG line (PFNC: BayerBG16) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType18VmbPixelFormatRgb8E">
+<span id="_CPPv3N18VmbPixelFormatType18VmbPixelFormatRgb8E"></span><span id="_CPPv2N18VmbPixelFormatType18VmbPixelFormatRgb8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba064ad701f2dc23623175b3029ac41178"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgb8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType18VmbPixelFormatRgb8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 8 bits x 3 (PFNC: RGB8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType18VmbPixelFormatBgr8E">
+<span id="_CPPv3N18VmbPixelFormatType18VmbPixelFormatBgr8E"></span><span id="_CPPv2N18VmbPixelFormatType18VmbPixelFormatBgr8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bab8ea1ccd8a76258b2da300e81dc35685"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgr8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType18VmbPixelFormatBgr8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>BGR, 8 bits x 3 (PFNC: BGR8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb10E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatRgb10E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatRgb10E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bab6e6b0e83341c4e9cde7254d05ce2121"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgb10</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb10E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr10E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatBgr10E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatBgr10E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae6e755f3403d02ef37264877355b12c1"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgr10</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr10E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb12E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatRgb12E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatRgb12E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba6d3466ba1e7290989c5f4071da837edb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgb12</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb12E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr12E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatBgr12E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatBgr12E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bac728027fe96775761cf1930dcdeb60a2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgr12</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr12E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb14E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatRgb14E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatRgb14E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bac366e2cf4bea2b7bc44ecea949808f13"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgb14</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb14E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 14 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr14E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatBgr14E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatBgr14E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba83e3c3486e273e29b183bcfa74f2321f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgr14</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr14E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 14 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb16E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatRgb16E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatRgb16E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad0a1c659b006df5cc89052cf529ba8a3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgb16</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb16E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 16 bits x 3 (PFNC: RGB16) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr16E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatBgr16E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatBgr16E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae2181bd9918df08f174d32b80864a41e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgr16</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr16E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 16 bits x 3 (PFNC: RGB16) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatArgb8E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatArgb8E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatArgb8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad99a067ff913336296b51663e8260bd6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatArgb8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatArgb8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>ARGB, 8 bits x 4 (PFNC: RGBa8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgba8E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatRgba8E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatRgba8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba9da1b11d45cdae17460094013b3f519d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgba8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgba8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgra8E">
+<span id="_CPPv3N18VmbPixelFormatType19VmbPixelFormatBgra8E"></span><span id="_CPPv2N18VmbPixelFormatType19VmbPixelFormatBgra8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad0428fef221599d29cab4e7c3763b613"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgra8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgra8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>BGRA, 8 bits x 4 (PFNC: BGRa8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba10E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatRgba10E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatRgba10E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad7602fe7fc49f2f59e1828c95026cee2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgba10</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba10E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra10E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatBgra10E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatBgra10E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba83f71f8ed9d9dbd007e5c1738b03ebe3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgra10</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra10E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba12E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatRgba12E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatRgba12E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba79929532df0ca523b8ee4523b3e0f9db"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgba12</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba12E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra12E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatBgra12E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatBgra12E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba93d1da7ee91e1e877d9cf5cc15205efd"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgra12</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra12E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba14E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatRgba14E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatRgba14E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baaab9849c9242a15245d2bc550c389365"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgba14</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba14E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra14E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatBgra14E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatBgra14E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba4126807d63279f4df2342aca1ec46ced"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgra14</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra14E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba16E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatRgba16E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatRgba16E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba31d3bbc9c29847790bc243f0e4720878"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgba16</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba16E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra16E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatBgra16E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatBgra16E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baa11c5353a787ce32910c0b9d54699086"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgra16</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra16E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv411E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatYuv411E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatYuv411E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba8904a44d3ad8e1e3e1358857dd94e95f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYuv411</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv411E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YUV 4:1:1 with 8 bits (PFNC: YUV411_8_UYYVYY, GEV:YUV411Packed) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv422E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatYuv422E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatYuv422E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba54360b011cd32e827535cc293b8951fe"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYuv422</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv422E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YUV 4:2:2 with 8 bits (PFNC: YUV422_8_UYVY, GEV:YUV422Packed) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv444E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatYuv444E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatYuv444E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba8f9dfd75646ae059ad3a0fb01780e69e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYuv444</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv444E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YUV 4:4:4 with 8 bits (PFNC: YUV8_UYV, GEV:YUV444Packed) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType22VmbPixelFormatYuv422_8E">
+<span id="_CPPv3N18VmbPixelFormatType22VmbPixelFormatYuv422_8E"></span><span id="_CPPv2N18VmbPixelFormatType22VmbPixelFormatYuv422_8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba10d40afb0428bea18de1300ddf95b6c0"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYuv422_8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType22VmbPixelFormatYuv422_8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YUV 4:2:2 with 8 bits Channel order YUYV (PFNC: YUV422_8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType26VmbPixelFormatYCbCr8_CbYCrE">
+<span id="_CPPv3N18VmbPixelFormatType26VmbPixelFormatYCbCr8_CbYCrE"></span><span id="_CPPv2N18VmbPixelFormatType26VmbPixelFormatYCbCr8_CbYCrE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba08ff6e627210662956efba5f8b601d14"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr8_CbYCr</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType26VmbPixelFormatYCbCr8_CbYCrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:4:4 with 8 bits (PFNC: YCbCr8_CbYCr) - identical to VmbPixelFormatYuv444. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType24VmbPixelFormatYCbCr422_8E">
+<span id="_CPPv3N18VmbPixelFormatType24VmbPixelFormatYCbCr422_8E"></span><span id="_CPPv2N18VmbPixelFormatType24VmbPixelFormatYCbCr422_8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae1885c2bb61ae3a8d1b64971b3bb8b49"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr422_8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType24VmbPixelFormatYCbCr422_8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:2:2 8-bit YCbYCr (PFNC: YCbCr422_8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType33VmbPixelFormatYCbCr411_8_CbYYCrYYE">
+<span id="_CPPv3N18VmbPixelFormatType33VmbPixelFormatYCbCr411_8_CbYYCrYYE"></span><span id="_CPPv2N18VmbPixelFormatType33VmbPixelFormatYCbCr411_8_CbYYCrYYE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba437e87e3ba60fc8d99355647c65ae6a6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr411_8_CbYYCrYY</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType33VmbPixelFormatYCbCr411_8_CbYYCrYYE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:1:1 with 8 bits (PFNC: YCbCr411_8_CbYYCrYY) - identical to VmbPixelFormatYuv411. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType30VmbPixelFormatYCbCr601_8_CbYCrE">
+<span id="_CPPv3N18VmbPixelFormatType30VmbPixelFormatYCbCr601_8_CbYCrE"></span><span id="_CPPv2N18VmbPixelFormatType30VmbPixelFormatYCbCr601_8_CbYCrE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba14c6664d2674be1d349b5b0371ad3dc4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr601_8_CbYCr</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType30VmbPixelFormatYCbCr601_8_CbYCrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr601 4:4:4 8-bit CbYCrt (PFNC: YCbCr601_8_CbYCr) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType28VmbPixelFormatYCbCr601_422_8E">
+<span id="_CPPv3N18VmbPixelFormatType28VmbPixelFormatYCbCr601_422_8E"></span><span id="_CPPv2N18VmbPixelFormatType28VmbPixelFormatYCbCr601_422_8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba54b961fe9bffad74b9cdc7a5604c0ceb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr601_422_8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType28VmbPixelFormatYCbCr601_422_8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr601 4:2:2 8-bit YCbYCr (PFNC: YCbCr601_422_8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType37VmbPixelFormatYCbCr601_411_8_CbYYCrYYE">
+<span id="_CPPv3N18VmbPixelFormatType37VmbPixelFormatYCbCr601_411_8_CbYYCrYYE"></span><span id="_CPPv2N18VmbPixelFormatType37VmbPixelFormatYCbCr601_411_8_CbYYCrYYE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad85548615ddfc14a409732235e588b01"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr601_411_8_CbYYCrYY</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType37VmbPixelFormatYCbCr601_411_8_CbYYCrYYE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr601 4:1:1 8-bit CbYYCrYY (PFNC: YCbCr601_411_8_CbYYCrYY) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType30VmbPixelFormatYCbCr709_8_CbYCrE">
+<span id="_CPPv3N18VmbPixelFormatType30VmbPixelFormatYCbCr709_8_CbYCrE"></span><span id="_CPPv2N18VmbPixelFormatType30VmbPixelFormatYCbCr709_8_CbYCrE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba15b649b55c41f85e7618afd91c4079e6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr709_8_CbYCr</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType30VmbPixelFormatYCbCr709_8_CbYCrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr709 4:4:4 8-bit CbYCr (PFNC: YCbCr709_8_CbYCr) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType28VmbPixelFormatYCbCr709_422_8E">
+<span id="_CPPv3N18VmbPixelFormatType28VmbPixelFormatYCbCr709_422_8E"></span><span id="_CPPv2N18VmbPixelFormatType28VmbPixelFormatYCbCr709_422_8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba89083023a9f84f5aca91fc3fe0020198"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr709_422_8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType28VmbPixelFormatYCbCr709_422_8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr709 4:2:2 8-bit YCbYCr (PFNC: YCbCr709_422_8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType37VmbPixelFormatYCbCr709_411_8_CbYYCrYYE">
+<span id="_CPPv3N18VmbPixelFormatType37VmbPixelFormatYCbCr709_411_8_CbYYCrYYE"></span><span id="_CPPv2N18VmbPixelFormatType37VmbPixelFormatYCbCr709_411_8_CbYYCrYYE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bac806e22187d7c1c32b3c2c47e3ed8dc1"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr709_411_8_CbYYCrYY</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType37VmbPixelFormatYCbCr709_411_8_CbYYCrYYE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr709 4:1:1 8-bit CbYYCrYY (PFNC: YCbCr709_411_8_CbYYCrYY) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType31VmbPixelFormatYCbCr422_8_CbYCrYE">
+<span id="_CPPv3N18VmbPixelFormatType31VmbPixelFormatYCbCr422_8_CbYCrYE"></span><span id="_CPPv2N18VmbPixelFormatType31VmbPixelFormatYCbCr422_8_CbYCrYE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba9c5436f11c68632b45306a27a583d077"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr422_8_CbYCrY</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType31VmbPixelFormatYCbCr422_8_CbYCrYE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:2:2 with 8 bits (PFNC: YCbCr422_8_CbYCrY) - identical to VmbPixelFormatYuv422. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType35VmbPixelFormatYCbCr601_422_8_CbYCrYE">
+<span id="_CPPv3N18VmbPixelFormatType35VmbPixelFormatYCbCr601_422_8_CbYCrYE"></span><span id="_CPPv2N18VmbPixelFormatType35VmbPixelFormatYCbCr601_422_8_CbYCrYE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba0859af9982a44da67028d78435640c83"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr601_422_8_CbYCrY</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType35VmbPixelFormatYCbCr601_422_8_CbYCrYE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr601 4:2:2 8-bit CbYCrY (PFNC: YCbCr601_422_8_CbYCrY) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType35VmbPixelFormatYCbCr709_422_8_CbYCrYE">
+<span id="_CPPv3N18VmbPixelFormatType35VmbPixelFormatYCbCr709_422_8_CbYCrYE"></span><span id="_CPPv2N18VmbPixelFormatType35VmbPixelFormatYCbCr709_422_8_CbYCrYE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba85da6670eba6c6815415342317c2ce56"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr709_422_8_CbYCrY</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType35VmbPixelFormatYCbCr709_422_8_CbYCrYE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr709 4:2:2 8-bit CbYCrY (PFNC: YCbCr709_422_8_CbYCrY) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType24VmbPixelFormatYCbCr411_8E">
+<span id="_CPPv3N18VmbPixelFormatType24VmbPixelFormatYCbCr411_8E"></span><span id="_CPPv2N18VmbPixelFormatType24VmbPixelFormatYCbCr411_8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baea829f36cce127ae9f2215c7f28d4784"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr411_8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType24VmbPixelFormatYCbCr411_8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:1:1 8-bit YYCbYYCr (PFNC: YCbCr411_8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType20VmbPixelFormatYCbCr8E">
+<span id="_CPPv3N18VmbPixelFormatType20VmbPixelFormatYCbCr8E"></span><span id="_CPPv2N18VmbPixelFormatType20VmbPixelFormatYCbCr8E"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba42736647bc50f478d4e32ff0bb6de504"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr8</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType20VmbPixelFormatYCbCr8E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:4:4 8-bit YCbCr (PFNC: YCbCr8) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbPixelFormatType18VmbPixelFormatLastE">
+<span id="_CPPv3N18VmbPixelFormatType18VmbPixelFormatLastE"></span><span id="_CPPv2N18VmbPixelFormatType18VmbPixelFormatLastE"></span><span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad55d82aa1452463f13fb12c764096d42"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatLast</span></span></span><a class="headerlink" href="#_CPPv4N18VmbPixelFormatType18VmbPixelFormatLastE" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCommonTypes_8h_1a77f858b4dc62c340deca6432e124afb5"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv412VmbPixelType" title="VmbPixelType"><span class="n"><span class="pre">VmbPixelType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelType</span></span></span><br /></dt>
+<dd><p>Indicates if pixel is monochrome or RGB. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCommonTypes_8h_1aa1a0a8173c03ec66761b04be2f1167c7"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv418VmbPixelOccupyType" title="VmbPixelOccupyType"><span class="n"><span class="pre">VmbPixelOccupyType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupyType</span></span></span><br /></dt>
+<dd><p>Indicates number of bits for a pixel. Needed for building values of <a class="reference internal" href="#VmbCommonTypes_8h_1a8566a40ee924c3f3b297bf87b56ed8e3"><span class="std std-ref">VmbPixelFormatType</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCommonTypes_8h_1a8566a40ee924c3f3b297bf87b56ed8e3"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv418VmbPixelFormatType" title="VmbPixelFormatType"><span class="n"><span class="pre">VmbPixelFormatType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatType</span></span></span><br /></dt>
+<dd><p>Pixel format types. As far as possible, the Pixel Format Naming Convention (PFNC) has been followed, allowing a few deviations. If data spans more than one byte, it is always LSB aligned, except if stated differently. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv416VmbPixelFormat_t">
+<span id="_CPPv316VmbPixelFormat_t"></span><span id="_CPPv216VmbPixelFormat_t"></span><span id="VmbPixelFormat_t"></span><span class="target" id="VmbCommonTypes_8h_1a01fb00de99410cb65203ae86adec5573"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormat_t</span></span></span><a class="headerlink" href="#_CPPv416VmbPixelFormat_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for the pixel format; for values see <a class="reference internal" href="#VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0b"><span class="std std-ref">VmbPixelFormatType</span></a>. </p>
+</dd></dl>
+
+</div>
+<dl class="cpp struct">
+<dt class="sig sig-object cpp" id="_CPPv414VmbVersionInfo">
+<span id="_CPPv314VmbVersionInfo"></span><span id="_CPPv214VmbVersionInfo"></span><span id="VmbVersionInfo"></span><span class="target" id="structVmbVersionInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbVersionInfo</span></span></span><a class="headerlink" href="#_CPPv414VmbVersionInfo" title="Permalink to this definition"></a><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCommonTypes.h&gt;</em></div>
+<p>Version information. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbVersionInfo5majorE">
+<span id="_CPPv3N14VmbVersionInfo5majorE"></span><span id="_CPPv2N14VmbVersionInfo5majorE"></span><span id="VmbVersionInfo::major__VmbUint32_t"></span><span class="target" id="structVmbVersionInfo_1a34a27a54a2493a9d83a0b266c8ed90dd"></span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">major</span></span></span><a class="headerlink" href="#_CPPv4N14VmbVersionInfo5majorE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Major version number. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbVersionInfo5minorE">
+<span id="_CPPv3N14VmbVersionInfo5minorE"></span><span id="_CPPv2N14VmbVersionInfo5minorE"></span><span id="VmbVersionInfo::minor__VmbUint32_t"></span><span class="target" id="structVmbVersionInfo_1a536ccd98d967e893383e6ce24432cb9f"></span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">minor</span></span></span><a class="headerlink" href="#_CPPv4N14VmbVersionInfo5minorE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Minor version number. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbVersionInfo5patchE">
+<span id="_CPPv3N14VmbVersionInfo5patchE"></span><span id="_CPPv2N14VmbVersionInfo5patchE"></span><span id="VmbVersionInfo::patch__VmbUint32_t"></span><span class="target" id="structVmbVersionInfo_1a939b801973e05f81de03dd1fbc486f55"></span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">patch</span></span></span><a class="headerlink" href="#_CPPv4N14VmbVersionInfo5patchE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Patch version number. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<p>File containing constants used in the Vmb C API. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-defines">Defines</p>
+<dl class="cpp macro">
+<dt class="sig sig-object cpp" id="c.VMB_PATH_SEPARATOR_CHAR">
+<span class="target" id="VmbConstants_8h_1a08725ef1889b2d77267fe5996856318c"></span><span class="sig-name descname"><span class="n"><span class="pre">VMB_PATH_SEPARATOR_CHAR</span></span></span><a class="headerlink" href="#c.VMB_PATH_SEPARATOR_CHAR" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the character used to separate file paths in the parameter of VmbStartup </p>
+</dd></dl>
+
+<dl class="cpp macro">
+<dt class="sig sig-object cpp" id="c.VMB_PATH_SEPARATOR_STRING">
+<span class="target" id="VmbConstants_8h_1a2d44ce9384014c230f4083a8877d2605"></span><span class="sig-name descname"><span class="n"><span class="pre">VMB_PATH_SEPARATOR_STRING</span></span></span><a class="headerlink" href="#c.VMB_PATH_SEPARATOR_STRING" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the string used to separate file paths in the parameter of VmbStartup </p>
+</dd></dl>
+
+<dl class="cpp macro">
+<dt class="sig sig-object cpp" id="c.VMB_SFNC_NAMESPACE_CUSTOM">
+<span class="target" id="group__SfncNamespaces_1gadcd754d97a2ef5b083548bfdf658d0e4"></span><span class="sig-name descname"><span class="n"><span class="pre">VMB_SFNC_NAMESPACE_CUSTOM</span></span></span><a class="headerlink" href="#c.VMB_SFNC_NAMESPACE_CUSTOM" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The C string identifying the namespace of features not defined in the SFNC standard. </p>
+</dd></dl>
+
+<dl class="cpp macro">
+<dt class="sig sig-object cpp" id="c.VMB_SFNC_NAMESPACE_STANDARD">
+<span class="target" id="group__SfncNamespaces_1ga5b723a183e519710f0c69d49467177f7"></span><span class="sig-name descname"><span class="n"><span class="pre">VMB_SFNC_NAMESPACE_STANDARD</span></span></span><a class="headerlink" href="#c.VMB_SFNC_NAMESPACE_STANDARD" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The C string identifying the namespace of features defined in the SFNC standard. </p>
+</dd></dl>
+
+</div>
+<p>Struct definitions for the VmbC API. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-transport-layer">Transport layer</p>
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv421VmbTransportLayerType">
+<span id="_CPPv321VmbTransportLayerType"></span><span id="_CPPv221VmbTransportLayerType"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerType</span></span></span><a class="headerlink" href="#_CPPv421VmbTransportLayerType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Camera or transport layer type (for instance U3V or GEV). </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType28VmbTransportLayerTypeUnknownE">
+<span id="_CPPv3N21VmbTransportLayerType28VmbTransportLayerTypeUnknownE"></span><span id="_CPPv2N21VmbTransportLayerType28VmbTransportLayerTypeUnknownE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600ace3ce8a341c5d89d039576c96960d9e9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeUnknown</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType28VmbTransportLayerTypeUnknownE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Interface is not known to this version of the API. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeGEVE">
+<span id="_CPPv3N21VmbTransportLayerType24VmbTransportLayerTypeGEVE"></span><span id="_CPPv2N21VmbTransportLayerType24VmbTransportLayerTypeGEVE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a0bf640b032f663e4c2f47e244e0ee52f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeGEV</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeGEVE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>GigE Vision. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType23VmbTransportLayerTypeCLE">
+<span id="_CPPv3N21VmbTransportLayerType23VmbTransportLayerTypeCLE"></span><span id="_CPPv2N21VmbTransportLayerType23VmbTransportLayerTypeCLE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a42975bc028013abcc8af3a89fbc8558a"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeCL</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType23VmbTransportLayerTypeCLE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Camera Link. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType25VmbTransportLayerTypeIIDCE">
+<span id="_CPPv3N21VmbTransportLayerType25VmbTransportLayerTypeIIDCE"></span><span id="_CPPv2N21VmbTransportLayerType25VmbTransportLayerTypeIIDCE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a61f78427883eb1df84e7274e220f9457"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeIIDC</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType25VmbTransportLayerTypeIIDCE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>IIDC 1394. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeUVCE">
+<span id="_CPPv3N21VmbTransportLayerType24VmbTransportLayerTypeUVCE"></span><span id="_CPPv2N21VmbTransportLayerType24VmbTransportLayerTypeUVCE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a6dbf194a52a16b338922c0de2cdca067"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeUVC</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeUVCE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>USB video class. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeCXPE">
+<span id="_CPPv3N21VmbTransportLayerType24VmbTransportLayerTypeCXPE"></span><span id="_CPPv2N21VmbTransportLayerType24VmbTransportLayerTypeCXPE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a93e17ba9ade873fdfe7b6d240716e673"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeCXP</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeCXPE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>CoaXPress. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType25VmbTransportLayerTypeCLHSE">
+<span id="_CPPv3N21VmbTransportLayerType25VmbTransportLayerTypeCLHSE"></span><span id="_CPPv2N21VmbTransportLayerType25VmbTransportLayerTypeCLHSE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a8b49ca3115ee97a5172753fd6c29a61b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeCLHS</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType25VmbTransportLayerTypeCLHSE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Camera Link HS. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeU3VE">
+<span id="_CPPv3N21VmbTransportLayerType24VmbTransportLayerTypeU3VE"></span><span id="_CPPv2N21VmbTransportLayerType24VmbTransportLayerTypeU3VE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600ad781c65b23b2af2a2fb47fb147d5481e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeU3V</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeU3VE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>USB3 Vision Standard. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType29VmbTransportLayerTypeEthernetE">
+<span id="_CPPv3N21VmbTransportLayerType29VmbTransportLayerTypeEthernetE"></span><span id="_CPPv2N21VmbTransportLayerType29VmbTransportLayerTypeEthernetE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a569f18e16e6ab48d16c42619c0c3e6f3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeEthernet</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType29VmbTransportLayerTypeEthernetE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Generic Ethernet. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypePCIE">
+<span id="_CPPv3N21VmbTransportLayerType24VmbTransportLayerTypePCIE"></span><span id="_CPPv2N21VmbTransportLayerType24VmbTransportLayerTypePCIE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a9c9b70cfd32284d1c2a5fd369c9da52a"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypePCI</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypePCIE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>PCI / PCIe. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType27VmbTransportLayerTypeCustomE">
+<span id="_CPPv3N21VmbTransportLayerType27VmbTransportLayerTypeCustomE"></span><span id="_CPPv2N21VmbTransportLayerType27VmbTransportLayerTypeCustomE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a795f7f6dff31c28684503e29695e214d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeCustom</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType27VmbTransportLayerTypeCustomE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Non standard. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerType26VmbTransportLayerTypeMixedE">
+<span id="_CPPv3N21VmbTransportLayerType26VmbTransportLayerTypeMixedE"></span><span id="_CPPv2N21VmbTransportLayerType26VmbTransportLayerTypeMixedE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a463590e1892752076239e767620ff96e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeMixed</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerType26VmbTransportLayerTypeMixedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Mixed (transport layer only) </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1ae375472152326254d432dffa7a0091ea"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv421VmbTransportLayerType" title="VmbTransportLayerType"><span class="n"><span class="pre">VmbTransportLayerType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerType</span></span></span><br /></dt>
+<dd><p>Camera or transport layer type (for instance U3V or GEV). </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv423VmbTransportLayerType_t">
+<span id="_CPPv323VmbTransportLayerType_t"></span><span id="_CPPv223VmbTransportLayerType_t"></span><span id="VmbTransportLayerType_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1abc7e651fec35fdde3cf78134b7f77ef6"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerType_t</span></span></span><a class="headerlink" href="#_CPPv423VmbTransportLayerType_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for an Interface; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600"><span class="std std-ref">VmbTransportLayerType</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv423VmbTransportLayerInfo_t">
+<span id="_CPPv323VmbTransportLayerInfo_t"></span><span id="_CPPv223VmbTransportLayerInfo_t"></span><span id="VmbTransportLayerInfo_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1ae1a4c161eea59140be81d940f1fc3941"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv421VmbTransportLayerInfo" title="VmbTransportLayerInfo"><span class="n"><span class="pre">VmbTransportLayerInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerInfo_t</span></span></span><a class="headerlink" href="#_CPPv423VmbTransportLayerInfo_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Transport layer information. </p>
+<p>Holds read-only information about a transport layer. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-interface">Interface</p>
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv418VmbInterfaceInfo_t">
+<span id="_CPPv318VmbInterfaceInfo_t"></span><span id="_CPPv218VmbInterfaceInfo_t"></span><span id="VmbInterfaceInfo_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1af8bce4bacba54f9a115dda31af6b0f5f"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv416VmbInterfaceInfo" title="VmbInterfaceInfo"><span class="n"><span class="pre">VmbInterfaceInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInterfaceInfo_t</span></span></span><a class="headerlink" href="#_CPPv418VmbInterfaceInfo_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Interface information. </p>
+<p>Holds read-only information about an interface. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-camera">Camera</p>
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv417VmbAccessModeType">
+<span id="_CPPv317VmbAccessModeType"></span><span id="_CPPv217VmbAccessModeType"></span><span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeType</span></span></span><a class="headerlink" href="#_CPPv417VmbAccessModeType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Access mode for cameras. </p>
+<p>Used in <a class="reference internal" href="#VmbCTypeDefinitions_8h_1ab948547f0a1e34097c98c9151f6eb68e"><span class="std std-ref">VmbCameraInfo_t</span></a> as flags, so multiple modes can be announced, while in VmbCameraOpen(), no combination must be used. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbAccessModeType17VmbAccessModeNoneE">
+<span id="_CPPv3N17VmbAccessModeType17VmbAccessModeNoneE"></span><span id="_CPPv2N17VmbAccessModeType17VmbAccessModeNoneE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536a07fbe0ccca56fe17617d2585c589532b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeNone</span></span></span><a class="headerlink" href="#_CPPv4N17VmbAccessModeType17VmbAccessModeNoneE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No access. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbAccessModeType17VmbAccessModeFullE">
+<span id="_CPPv3N17VmbAccessModeType17VmbAccessModeFullE"></span><span id="_CPPv2N17VmbAccessModeType17VmbAccessModeFullE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536ae99d9c5f70a65ffe32b60b4f36e676fd"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeFull</span></span></span><a class="headerlink" href="#_CPPv4N17VmbAccessModeType17VmbAccessModeFullE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Read and write access. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbAccessModeType17VmbAccessModeReadE">
+<span id="_CPPv3N17VmbAccessModeType17VmbAccessModeReadE"></span><span id="_CPPv2N17VmbAccessModeType17VmbAccessModeReadE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536a2319677b6c957feab0c4db8de4471e8f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeRead</span></span></span><a class="headerlink" href="#_CPPv4N17VmbAccessModeType17VmbAccessModeReadE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Read-only access. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbAccessModeType20VmbAccessModeUnknownE">
+<span id="_CPPv3N17VmbAccessModeType20VmbAccessModeUnknownE"></span><span id="_CPPv2N17VmbAccessModeType20VmbAccessModeUnknownE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536a75aa52e5b1b2a5d4029fdf2b4235e769"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeUnknown</span></span></span><a class="headerlink" href="#_CPPv4N17VmbAccessModeType20VmbAccessModeUnknownE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Access type unknown. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbAccessModeType22VmbAccessModeExclusiveE">
+<span id="_CPPv3N17VmbAccessModeType22VmbAccessModeExclusiveE"></span><span id="_CPPv2N17VmbAccessModeType22VmbAccessModeExclusiveE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536a9f22c90006a5d67f3d5b915d752a39e9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeExclusive</span></span></span><a class="headerlink" href="#_CPPv4N17VmbAccessModeType22VmbAccessModeExclusiveE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Read and write access without permitting access for other consumers. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1aa0d1156f6eb619730081886bd2f4a951"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv417VmbAccessModeType" title="VmbAccessModeType"><span class="n"><span class="pre">VmbAccessModeType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeType</span></span></span><br /></dt>
+<dd><p>Access mode for cameras. </p>
+<p>Used in <a class="reference internal" href="#VmbCTypeDefinitions_8h_1ab948547f0a1e34097c98c9151f6eb68e"><span class="std std-ref">VmbCameraInfo_t</span></a> as flags, so multiple modes can be announced, while in VmbCameraOpen(), no combination must be used. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv415VmbAccessMode_t">
+<span id="_CPPv315VmbAccessMode_t"></span><span id="_CPPv215VmbAccessMode_t"></span><span id="VmbAccessMode_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1ace6bd47e23b7e2c05ef3aa7357ed56d4"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessMode_t</span></span></span><a class="headerlink" href="#_CPPv415VmbAccessMode_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for an AccessMode; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536"><span class="std std-ref">VmbAccessModeType</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv415VmbCameraInfo_t">
+<span id="_CPPv315VmbCameraInfo_t"></span><span id="_CPPv215VmbCameraInfo_t"></span><span id="VmbCameraInfo_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1ab948547f0a1e34097c98c9151f6eb68e"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv413VmbCameraInfo" title="VmbCameraInfo"><span class="n"><span class="pre">VmbCameraInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbCameraInfo_t</span></span></span><a class="headerlink" href="#_CPPv415VmbCameraInfo_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Camera information. </p>
+<p>Holds read-only information about a camera. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-feature">Feature</p>
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv418VmbFeatureDataType">
+<span id="_CPPv318VmbFeatureDataType"></span><span id="_CPPv218VmbFeatureDataType"></span><span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataType</span></span></span><a class="headerlink" href="#_CPPv418VmbFeatureDataType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Supported feature data types. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFeatureDataType21VmbFeatureDataUnknownE">
+<span id="_CPPv3N18VmbFeatureDataType21VmbFeatureDataUnknownE"></span><span id="_CPPv2N18VmbFeatureDataType21VmbFeatureDataUnknownE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a6492493b3581a305f539f37701aad9e5"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataUnknown</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFeatureDataType21VmbFeatureDataUnknownE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unknown feature type. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFeatureDataType17VmbFeatureDataIntE">
+<span id="_CPPv3N18VmbFeatureDataType17VmbFeatureDataIntE"></span><span id="_CPPv2N18VmbFeatureDataType17VmbFeatureDataIntE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a8e7d9b624c5b97737432e040f6eb625f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataInt</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFeatureDataType17VmbFeatureDataIntE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>64-bit integer feature </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFeatureDataType19VmbFeatureDataFloatE">
+<span id="_CPPv3N18VmbFeatureDataType19VmbFeatureDataFloatE"></span><span id="_CPPv2N18VmbFeatureDataType19VmbFeatureDataFloatE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36ac7b3df65db6f03e945e0f290d336773d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataFloat</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFeatureDataType19VmbFeatureDataFloatE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>64-bit floating point feature </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFeatureDataType18VmbFeatureDataEnumE">
+<span id="_CPPv3N18VmbFeatureDataType18VmbFeatureDataEnumE"></span><span id="_CPPv2N18VmbFeatureDataType18VmbFeatureDataEnumE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a141c37d1c1e0b8208bb57fc0dfaf9ec4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataEnum</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFeatureDataType18VmbFeatureDataEnumE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Enumeration feature. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFeatureDataType20VmbFeatureDataStringE">
+<span id="_CPPv3N18VmbFeatureDataType20VmbFeatureDataStringE"></span><span id="_CPPv2N18VmbFeatureDataType20VmbFeatureDataStringE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a0cf1f7d8a26a40bb51949447d828ea73"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataString</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFeatureDataType20VmbFeatureDataStringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>String feature. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFeatureDataType18VmbFeatureDataBoolE">
+<span id="_CPPv3N18VmbFeatureDataType18VmbFeatureDataBoolE"></span><span id="_CPPv2N18VmbFeatureDataType18VmbFeatureDataBoolE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a09fe439038590ed33929d9ffeec98ae3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataBool</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFeatureDataType18VmbFeatureDataBoolE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Boolean feature. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFeatureDataType21VmbFeatureDataCommandE">
+<span id="_CPPv3N18VmbFeatureDataType21VmbFeatureDataCommandE"></span><span id="_CPPv2N18VmbFeatureDataType21VmbFeatureDataCommandE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a83227388ecf0a34336da122b98fb7074"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataCommand</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFeatureDataType21VmbFeatureDataCommandE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Command feature. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFeatureDataType17VmbFeatureDataRawE">
+<span id="_CPPv3N18VmbFeatureDataType17VmbFeatureDataRawE"></span><span id="_CPPv2N18VmbFeatureDataType17VmbFeatureDataRawE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36ad7c8cddc4764f79507af15bf9af1e1c6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataRaw</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFeatureDataType17VmbFeatureDataRawE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Raw (direct register access) feature. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFeatureDataType18VmbFeatureDataNoneE">
+<span id="_CPPv3N18VmbFeatureDataType18VmbFeatureDataNoneE"></span><span id="_CPPv2N18VmbFeatureDataType18VmbFeatureDataNoneE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36ac68bd44ddc3cfb2f49a1bbe47b408948"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataNone</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFeatureDataType18VmbFeatureDataNoneE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature with no data. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv424VmbFeatureVisibilityType">
+<span id="_CPPv324VmbFeatureVisibilityType"></span><span id="_CPPv224VmbFeatureVisibilityType"></span><span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityType</span></span></span><a class="headerlink" href="#_CPPv424VmbFeatureVisibilityType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature visibility. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N24VmbFeatureVisibilityType27VmbFeatureVisibilityUnknownE">
+<span id="_CPPv3N24VmbFeatureVisibilityType27VmbFeatureVisibilityUnknownE"></span><span id="_CPPv2N24VmbFeatureVisibilityType27VmbFeatureVisibilityUnknownE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758a0d78ab3ad135167a5c62c4ae8349fb93"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityUnknown</span></span></span><a class="headerlink" href="#_CPPv4N24VmbFeatureVisibilityType27VmbFeatureVisibilityUnknownE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature visibility is not known. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N24VmbFeatureVisibilityType28VmbFeatureVisibilityBeginnerE">
+<span id="_CPPv3N24VmbFeatureVisibilityType28VmbFeatureVisibilityBeginnerE"></span><span id="_CPPv2N24VmbFeatureVisibilityType28VmbFeatureVisibilityBeginnerE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758a5cf332b1f87cb57e565191262fd0e146"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityBeginner</span></span></span><a class="headerlink" href="#_CPPv4N24VmbFeatureVisibilityType28VmbFeatureVisibilityBeginnerE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature is visible in feature list (beginner level) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N24VmbFeatureVisibilityType26VmbFeatureVisibilityExpertE">
+<span id="_CPPv3N24VmbFeatureVisibilityType26VmbFeatureVisibilityExpertE"></span><span id="_CPPv2N24VmbFeatureVisibilityType26VmbFeatureVisibilityExpertE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758aeaf2fed0acaae5c9ed63fa2f0dcbb312"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityExpert</span></span></span><a class="headerlink" href="#_CPPv4N24VmbFeatureVisibilityType26VmbFeatureVisibilityExpertE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature is visible in feature list (expert level) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N24VmbFeatureVisibilityType24VmbFeatureVisibilityGuruE">
+<span id="_CPPv3N24VmbFeatureVisibilityType24VmbFeatureVisibilityGuruE"></span><span id="_CPPv2N24VmbFeatureVisibilityType24VmbFeatureVisibilityGuruE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758ad14977ba01b711ff3629791def4edf97"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityGuru</span></span></span><a class="headerlink" href="#_CPPv4N24VmbFeatureVisibilityType24VmbFeatureVisibilityGuruE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature is visible in feature list (guru level) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N24VmbFeatureVisibilityType29VmbFeatureVisibilityInvisibleE">
+<span id="_CPPv3N24VmbFeatureVisibilityType29VmbFeatureVisibilityInvisibleE"></span><span id="_CPPv2N24VmbFeatureVisibilityType29VmbFeatureVisibilityInvisibleE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758af0ba43f86202e3bac5d853a87e3fbf07"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityInvisible</span></span></span><a class="headerlink" href="#_CPPv4N24VmbFeatureVisibilityType29VmbFeatureVisibilityInvisibleE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature is visible in the feature list, but should be hidden in GUI applications. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv419VmbFeatureFlagsType">
+<span id="_CPPv319VmbFeatureFlagsType"></span><span id="_CPPv219VmbFeatureFlagsType"></span><span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13d"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsType</span></span></span><a class="headerlink" href="#_CPPv419VmbFeatureFlagsType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature flags. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureFlagsType19VmbFeatureFlagsNoneE">
+<span id="_CPPv3N19VmbFeatureFlagsType19VmbFeatureFlagsNoneE"></span><span id="_CPPv2N19VmbFeatureFlagsType19VmbFeatureFlagsNoneE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13da8d5246f6fb93dbed50bca8e858c741d3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsNone</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureFlagsType19VmbFeatureFlagsNoneE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No additional information is provided. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureFlagsType19VmbFeatureFlagsReadE">
+<span id="_CPPv3N19VmbFeatureFlagsType19VmbFeatureFlagsReadE"></span><span id="_CPPv2N19VmbFeatureFlagsType19VmbFeatureFlagsReadE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13da3d4ce50039f7fb0d2c552924df49aa08"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsRead</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureFlagsType19VmbFeatureFlagsReadE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Static info about read access. Current status depends on access mode, check with VmbFeatureAccessQuery() </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureFlagsType20VmbFeatureFlagsWriteE">
+<span id="_CPPv3N19VmbFeatureFlagsType20VmbFeatureFlagsWriteE"></span><span id="_CPPv2N19VmbFeatureFlagsType20VmbFeatureFlagsWriteE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13dae6b8419229e70cad316cf3799c48991b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsWrite</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureFlagsType20VmbFeatureFlagsWriteE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Static info about write access. Current status depends on access mode, check with VmbFeatureAccessQuery() </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureFlagsType23VmbFeatureFlagsVolatileE">
+<span id="_CPPv3N19VmbFeatureFlagsType23VmbFeatureFlagsVolatileE"></span><span id="_CPPv2N19VmbFeatureFlagsType23VmbFeatureFlagsVolatileE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13dafad44efc898f6a9f0861a551eff86a3d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsVolatile</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureFlagsType23VmbFeatureFlagsVolatileE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Value may change at any time. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureFlagsType26VmbFeatureFlagsModifyWriteE">
+<span id="_CPPv3N19VmbFeatureFlagsType26VmbFeatureFlagsModifyWriteE"></span><span id="_CPPv2N19VmbFeatureFlagsType26VmbFeatureFlagsModifyWriteE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13da6957ac38fa08ddb5398f0f58db7e94c4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsModifyWrite</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureFlagsType26VmbFeatureFlagsModifyWriteE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Value may change after a write. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1aaa725b6824f93defb4e78d366ccb58f0"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv418VmbFeatureDataType" title="VmbFeatureDataType"><span class="n"><span class="pre">VmbFeatureDataType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataType</span></span></span><br /></dt>
+<dd><p>Supported feature data types. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv416VmbFeatureData_t">
+<span id="_CPPv316VmbFeatureData_t"></span><span id="_CPPv216VmbFeatureData_t"></span><span id="VmbFeatureData_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1ae2e957454319ec5d1978f3fbafb752af"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureData_t</span></span></span><a class="headerlink" href="#_CPPv416VmbFeatureData_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Data type for a Feature; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36"><span class="std std-ref">VmbFeatureDataType</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1a42e591bcabf2d18b1a5cfd511f8fa174"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv424VmbFeatureVisibilityType" title="VmbFeatureVisibilityType"><span class="n"><span class="pre">VmbFeatureVisibilityType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityType</span></span></span><br /></dt>
+<dd><p>Feature visibility. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv422VmbFeatureVisibility_t">
+<span id="_CPPv322VmbFeatureVisibility_t"></span><span id="_CPPv222VmbFeatureVisibility_t"></span><span id="VmbFeatureVisibility_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1a6560cac7bf7fa5ba125d2cfca0bbd73b"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibility_t</span></span></span><a class="headerlink" href="#_CPPv422VmbFeatureVisibility_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for Feature visibility; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758"><span class="std std-ref">VmbFeatureVisibilityType</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1adbea9be3cda11c3ed86e4e1702dc8511"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv419VmbFeatureFlagsType" title="VmbFeatureFlagsType"><span class="n"><span class="pre">VmbFeatureFlagsType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsType</span></span></span><br /></dt>
+<dd><p>Feature flags. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv417VmbFeatureFlags_t">
+<span id="_CPPv317VmbFeatureFlags_t"></span><span id="_CPPv217VmbFeatureFlags_t"></span><span id="VmbFeatureFlags_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1a81a83b95087daa573736783d2bf0ffaa"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlags_t</span></span></span><a class="headerlink" href="#_CPPv417VmbFeatureFlags_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for Feature flags; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13d"><span class="std std-ref">VmbFeatureFlagsType</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv416VmbFeatureInfo_t">
+<span id="_CPPv316VmbFeatureInfo_t"></span><span id="_CPPv216VmbFeatureInfo_t"></span><span id="VmbFeatureInfo_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv414VmbFeatureInfo" title="VmbFeatureInfo"><span class="n"><span class="pre">VmbFeatureInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureInfo_t</span></span></span><a class="headerlink" href="#_CPPv416VmbFeatureInfo_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature information. </p>
+<p>Holds read-only information about a feature. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv421VmbFeatureEnumEntry_t">
+<span id="_CPPv321VmbFeatureEnumEntry_t"></span><span id="_CPPv221VmbFeatureEnumEntry_t"></span><span id="VmbFeatureEnumEntry_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1acef6e50a236d55dd67b42b0cc1ed7d02"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv419VmbFeatureEnumEntry" title="VmbFeatureEnumEntry"><span class="n"><span class="pre">VmbFeatureEnumEntry</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureEnumEntry_t</span></span></span><a class="headerlink" href="#_CPPv421VmbFeatureEnumEntry_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Info about possible entries of an enumeration feature. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-frame">Frame</p>
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv418VmbFrameStatusType">
+<span id="_CPPv318VmbFrameStatusType"></span><span id="_CPPv218VmbFrameStatusType"></span><span class="target" id="VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusType</span></span></span><a class="headerlink" href="#_CPPv418VmbFrameStatusType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Status of a frame transfer. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFrameStatusType22VmbFrameStatusCompleteE">
+<span id="_CPPv3N18VmbFrameStatusType22VmbFrameStatusCompleteE"></span><span id="_CPPv2N18VmbFrameStatusType22VmbFrameStatusCompleteE"></span><span class="target" id="VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0a3f5b6283c74f8b30e328bd2160f0f6c4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusComplete</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFrameStatusType22VmbFrameStatusCompleteE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame has been completed without errors. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFrameStatusType24VmbFrameStatusIncompleteE">
+<span id="_CPPv3N18VmbFrameStatusType24VmbFrameStatusIncompleteE"></span><span id="_CPPv2N18VmbFrameStatusType24VmbFrameStatusIncompleteE"></span><span class="target" id="VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0a5057a4e8db869f3efa004c96b4a1b4aa"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusIncomplete</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFrameStatusType24VmbFrameStatusIncompleteE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame could not be filled to the end. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFrameStatusType22VmbFrameStatusTooSmallE">
+<span id="_CPPv3N18VmbFrameStatusType22VmbFrameStatusTooSmallE"></span><span id="_CPPv2N18VmbFrameStatusType22VmbFrameStatusTooSmallE"></span><span class="target" id="VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0a2184078b008d628f6b57b4f39a8ae545"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusTooSmall</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFrameStatusType22VmbFrameStatusTooSmallE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame buffer was too small. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N18VmbFrameStatusType21VmbFrameStatusInvalidE">
+<span id="_CPPv3N18VmbFrameStatusType21VmbFrameStatusInvalidE"></span><span id="_CPPv2N18VmbFrameStatusType21VmbFrameStatusInvalidE"></span><span class="target" id="VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0a73381c0ef8595326ff1255ffb25f83f8"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusInvalid</span></span></span><a class="headerlink" href="#_CPPv4N18VmbFrameStatusType21VmbFrameStatusInvalidE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame buffer was invalid. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv417VmbFrameFlagsType">
+<span id="_CPPv317VmbFrameFlagsType"></span><span id="_CPPv217VmbFrameFlagsType"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsType</span></span></span><a class="headerlink" href="#_CPPv417VmbFrameFlagsType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame flags. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbFrameFlagsType17VmbFrameFlagsNoneE">
+<span id="_CPPv3N17VmbFrameFlagsType17VmbFrameFlagsNoneE"></span><span id="_CPPv2N17VmbFrameFlagsType17VmbFrameFlagsNoneE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a5b9e576e11f18b9e297c2310872f4f50"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsNone</span></span></span><a class="headerlink" href="#_CPPv4N17VmbFrameFlagsType17VmbFrameFlagsNoneE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No additional information is provided. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsDimensionE">
+<span id="_CPPv3N17VmbFrameFlagsType22VmbFrameFlagsDimensionE"></span><span id="_CPPv2N17VmbFrameFlagsType22VmbFrameFlagsDimensionE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a3fcaa347d4927fd9f948d5e54f91ef9d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsDimension</span></span></span><a class="headerlink" href="#_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsDimensionE" title="Permalink to this definition"></a><br /></dt>
+<dd><p><a class="reference internal" href="#structVmbFrame_1a75f1209cc47de628b6cc3e848ddd30b6"><span class="std std-ref">VmbFrame_t::width</span></a> and <a class="reference internal" href="#structVmbFrame_1a3b862560c995e974708c53941be05cbd"><span class="std std-ref">VmbFrame_t::height</span></a> are provided. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbFrameFlagsType19VmbFrameFlagsOffsetE">
+<span id="_CPPv3N17VmbFrameFlagsType19VmbFrameFlagsOffsetE"></span><span id="_CPPv2N17VmbFrameFlagsType19VmbFrameFlagsOffsetE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a3a08327e16afb4042399eb6eff4f0bd4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsOffset</span></span></span><a class="headerlink" href="#_CPPv4N17VmbFrameFlagsType19VmbFrameFlagsOffsetE" title="Permalink to this definition"></a><br /></dt>
+<dd><p><a class="reference internal" href="#structVmbFrame_1a5c78cb4e7471257e2be5268a628aaa5c"><span class="std std-ref">VmbFrame_t::offsetX</span></a> and <a class="reference internal" href="#structVmbFrame_1aaebdc7a43d5d255c23dca5da3df7e656"><span class="std std-ref">VmbFrame_t::offsetY</span></a> are provided (ROI) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbFrameFlagsType20VmbFrameFlagsFrameIDE">
+<span id="_CPPv3N17VmbFrameFlagsType20VmbFrameFlagsFrameIDE"></span><span id="_CPPv2N17VmbFrameFlagsType20VmbFrameFlagsFrameIDE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5ae571b26d9a7c24811f7a315d53fd3ba6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsFrameID</span></span></span><a class="headerlink" href="#_CPPv4N17VmbFrameFlagsType20VmbFrameFlagsFrameIDE" title="Permalink to this definition"></a><br /></dt>
+<dd><p><a class="reference internal" href="#structVmbFrame_1acf8edd02ec2ac3e0894277a7de3eb11e"><span class="std std-ref">VmbFrame_t::frameID</span></a> is provided. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsTimestampE">
+<span id="_CPPv3N17VmbFrameFlagsType22VmbFrameFlagsTimestampE"></span><span id="_CPPv2N17VmbFrameFlagsType22VmbFrameFlagsTimestampE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a5c31d43da7c9b93e9226f00121b3a313"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsTimestamp</span></span></span><a class="headerlink" href="#_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsTimestampE" title="Permalink to this definition"></a><br /></dt>
+<dd><p><a class="reference internal" href="#structVmbFrame_1a582e5f0ff30509371370d02cfee77b12"><span class="std std-ref">VmbFrame_t::timestamp</span></a> is provided. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsImageDataE">
+<span id="_CPPv3N17VmbFrameFlagsType22VmbFrameFlagsImageDataE"></span><span id="_CPPv2N17VmbFrameFlagsType22VmbFrameFlagsImageDataE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a8e900db1cb18370bed232833a5855f19"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsImageData</span></span></span><a class="headerlink" href="#_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsImageDataE" title="Permalink to this definition"></a><br /></dt>
+<dd><p><a class="reference internal" href="#structVmbFrame_1ac22a2a3781084f8a84e0ec2545082842"><span class="std std-ref">VmbFrame_t::imageData</span></a> is provided. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbFrameFlagsType24VmbFrameFlagsPayloadTypeE">
+<span id="_CPPv3N17VmbFrameFlagsType24VmbFrameFlagsPayloadTypeE"></span><span id="_CPPv2N17VmbFrameFlagsType24VmbFrameFlagsPayloadTypeE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a9e623e99ff6dfaa93ad05baccaf0f439"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsPayloadType</span></span></span><a class="headerlink" href="#_CPPv4N17VmbFrameFlagsType24VmbFrameFlagsPayloadTypeE" title="Permalink to this definition"></a><br /></dt>
+<dd><p><a class="reference internal" href="#structVmbFrame_1aa525dff28c846426bbda92011b96739b"><span class="std std-ref">VmbFrame_t::payloadType</span></a> is provided. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N17VmbFrameFlagsType29VmbFrameFlagsChunkDataPresentE">
+<span id="_CPPv3N17VmbFrameFlagsType29VmbFrameFlagsChunkDataPresentE"></span><span id="_CPPv2N17VmbFrameFlagsType29VmbFrameFlagsChunkDataPresentE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a5e9ead49c59303bcc656e1401c713d11"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsChunkDataPresent</span></span></span><a class="headerlink" href="#_CPPv4N17VmbFrameFlagsType29VmbFrameFlagsChunkDataPresentE" title="Permalink to this definition"></a><br /></dt>
+<dd><p><a class="reference internal" href="#structVmbFrame_1a6af5700e735a429d74439d166b079a3e"><span class="std std-ref">VmbFrame_t::chunkDataPresent</span></a> is set based on info provided by the transport layer. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv414VmbPayloadType">
+<span id="_CPPv314VmbPayloadType"></span><span id="_CPPv214VmbPayloadType"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadType</span></span></span><a class="headerlink" href="#_CPPv414VmbPayloadType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame payload type. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbPayloadType21VmbPayloadTypeUnknownE">
+<span id="_CPPv3N14VmbPayloadType21VmbPayloadTypeUnknownE"></span><span id="_CPPv2N14VmbPayloadType21VmbPayloadTypeUnknownE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9a6415eb4fba0b2bcf1a943056e06bd108"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeUnknown</span></span></span><a class="headerlink" href="#_CPPv4N14VmbPayloadType21VmbPayloadTypeUnknownE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unknown payload type. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbPayloadType19VmbPayloadTypeImageE">
+<span id="_CPPv3N14VmbPayloadType19VmbPayloadTypeImageE"></span><span id="_CPPv2N14VmbPayloadType19VmbPayloadTypeImageE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9a4b035e29cc2517d12f91a1841cc09fcc"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeImage</span></span></span><a class="headerlink" href="#_CPPv4N14VmbPayloadType19VmbPayloadTypeImageE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>image data </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbPayloadType17VmbPayloadTypeRawE">
+<span id="_CPPv3N14VmbPayloadType17VmbPayloadTypeRawE"></span><span id="_CPPv2N14VmbPayloadType17VmbPayloadTypeRawE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9a8df17c57cd9fc2bb3e69d988af0ba414"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeRaw</span></span></span><a class="headerlink" href="#_CPPv4N14VmbPayloadType17VmbPayloadTypeRawE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>raw data </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbPayloadType18VmbPayloadTypeFileE">
+<span id="_CPPv3N14VmbPayloadType18VmbPayloadTypeFileE"></span><span id="_CPPv2N14VmbPayloadType18VmbPayloadTypeFileE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9ac1d2ce07e7a78933d866770f0639dbc9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeFile</span></span></span><a class="headerlink" href="#_CPPv4N14VmbPayloadType18VmbPayloadTypeFileE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>file data </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbPayloadType18VmbPayloadTypeJPEGE">
+<span id="_CPPv3N14VmbPayloadType18VmbPayloadTypeJPEGE"></span><span id="_CPPv2N14VmbPayloadType18VmbPayloadTypeJPEGE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9ad7d97debd17ced601caf1cd7d9a941a9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeJPEG</span></span></span><a class="headerlink" href="#_CPPv4N14VmbPayloadType18VmbPayloadTypeJPEGE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>JPEG data as described in the GigEVision 2.0 specification. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbPayloadType21VmbPayloadTypJPEG2000E">
+<span id="_CPPv3N14VmbPayloadType21VmbPayloadTypJPEG2000E"></span><span id="_CPPv2N14VmbPayloadType21VmbPayloadTypJPEG2000E"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9ae34f783c59f80f9e8189d9dedcc407c0"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypJPEG2000</span></span></span><a class="headerlink" href="#_CPPv4N14VmbPayloadType21VmbPayloadTypJPEG2000E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>JPEG 2000 data as described in the GigEVision 2.0 specification. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbPayloadType18VmbPayloadTypeH264E">
+<span id="_CPPv3N14VmbPayloadType18VmbPayloadTypeH264E"></span><span id="_CPPv2N14VmbPayloadType18VmbPayloadTypeH264E"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9a417d67609983e36c32ddd3c16fd4d5d9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeH264</span></span></span><a class="headerlink" href="#_CPPv4N14VmbPayloadType18VmbPayloadTypeH264E" title="Permalink to this definition"></a><br /></dt>
+<dd><p>H.264 data as described in the GigEVision 2.0 specification. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbPayloadType23VmbPayloadTypeChunkOnlyE">
+<span id="_CPPv3N14VmbPayloadType23VmbPayloadTypeChunkOnlyE"></span><span id="_CPPv2N14VmbPayloadType23VmbPayloadTypeChunkOnlyE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9aa4d235db3b7232c3eb7dcd4a786e8976"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeChunkOnly</span></span></span><a class="headerlink" href="#_CPPv4N14VmbPayloadType23VmbPayloadTypeChunkOnlyE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Chunk data exclusively. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbPayloadType28VmbPayloadTypeDeviceSpecificE">
+<span id="_CPPv3N14VmbPayloadType28VmbPayloadTypeDeviceSpecificE"></span><span id="_CPPv2N14VmbPayloadType28VmbPayloadTypeDeviceSpecificE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9ae73c839ce12183d45e7d0d9968ed9853"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeDeviceSpecific</span></span></span><a class="headerlink" href="#_CPPv4N14VmbPayloadType28VmbPayloadTypeDeviceSpecificE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Device specific data format. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbPayloadType19VmbPayloadTypeGenDCE">
+<span id="_CPPv3N14VmbPayloadType19VmbPayloadTypeGenDCE"></span><span id="_CPPv2N14VmbPayloadType19VmbPayloadTypeGenDCE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9a80a7b2baa93cdefb84cc509643bc8d72"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeGenDC</span></span></span><a class="headerlink" href="#_CPPv4N14VmbPayloadType19VmbPayloadTypeGenDCE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>GenDC data. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1a5adeacabbe66ddc41a4210ec9b424f91"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv418VmbFrameStatusType" title="VmbFrameStatusType"><span class="n"><span class="pre">VmbFrameStatusType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusType</span></span></span><br /></dt>
+<dd><p>Status of a frame transfer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv416VmbFrameStatus_t">
+<span id="_CPPv316VmbFrameStatus_t"></span><span id="_CPPv216VmbFrameStatus_t"></span><span id="VmbFrameStatus_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1a86e9a2f0bef3237409361eb9a56e6d7b"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv410VmbInt32_t" title="VmbInt32_t"><span class="n"><span class="pre">VmbInt32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatus_t</span></span></span><a class="headerlink" href="#_CPPv416VmbFrameStatus_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for the frame status; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0"><span class="std std-ref">VmbFrameStatusType</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1a891f8f070a58647a7b30ea90b7f16bd8"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv417VmbFrameFlagsType" title="VmbFrameFlagsType"><span class="n"><span class="pre">VmbFrameFlagsType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsType</span></span></span><br /></dt>
+<dd><p>Frame flags. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv415VmbFrameFlags_t">
+<span id="_CPPv315VmbFrameFlags_t"></span><span id="_CPPv215VmbFrameFlags_t"></span><span id="VmbFrameFlags_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1ac2b57de7213de5daac2c245055c06628"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlags_t</span></span></span><a class="headerlink" href="#_CPPv415VmbFrameFlags_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for Frame flags; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5"><span class="std std-ref">VmbFrameFlagsType</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1ae094a9cc9dcbc8d8a68665501b36e8bf"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv414VmbPayloadType" title="VmbPayloadType"><span class="n"><span class="pre">VmbPayloadType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadType</span></span></span><br /></dt>
+<dd><p>Frame payload type. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv416VmbPayloadType_t">
+<span id="_CPPv316VmbPayloadType_t"></span><span id="_CPPv216VmbPayloadType_t"></span><span id="VmbPayloadType_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1a9e15c4dfd6f482ca95a756dc56be7c9d"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadType_t</span></span></span><a class="headerlink" href="#_CPPv416VmbPayloadType_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type representing the payload type of a frame. For values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9"><span class="std std-ref">VmbPayloadType</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv419VmbImageDimension_t">
+<span id="_CPPv319VmbImageDimension_t"></span><span id="_CPPv219VmbImageDimension_t"></span><span id="VmbImageDimension_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1a625afeedce0298e42cd7423f3c852c7c"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbImageDimension_t</span></span></span><a class="headerlink" href="#_CPPv419VmbImageDimension_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type used to represent a dimension value, e.g. the image height. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv410VmbFrame_t">
+<span id="_CPPv310VmbFrame_t"></span><span id="_CPPv210VmbFrame_t"></span><span id="VmbFrame_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1a875563f52bc13d30598741248ea80812"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv48VmbFrame" title="VmbFrame"><span class="n"><span class="pre">VmbFrame</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrame_t</span></span></span><a class="headerlink" href="#_CPPv410VmbFrame_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame delivered by the camera. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-save/loadsettings">Save/LoadSettings</p>
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv421VmbFeaturePersistType">
+<span id="_CPPv321VmbFeaturePersistType"></span><span id="_CPPv221VmbFeaturePersistType"></span><span class="target" id="VmbCTypeDefinitions_8h_1a547095368385f75fa03524debf5b83e8"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistType</span></span></span><a class="headerlink" href="#_CPPv421VmbFeaturePersistType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type of features that are to be saved (persisted) to the XML file when using VmbSettingsSave. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbFeaturePersistType20VmbFeaturePersistAllE">
+<span id="_CPPv3N21VmbFeaturePersistType20VmbFeaturePersistAllE"></span><span id="_CPPv2N21VmbFeaturePersistType20VmbFeaturePersistAllE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a547095368385f75fa03524debf5b83e8a2d6e59b527bb0b51dcbe4af19bcf9795"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistAll</span></span></span><a class="headerlink" href="#_CPPv4N21VmbFeaturePersistType20VmbFeaturePersistAllE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Save all features to XML, including look-up tables (if possible) </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbFeaturePersistType27VmbFeaturePersistStreamableE">
+<span id="_CPPv3N21VmbFeaturePersistType27VmbFeaturePersistStreamableE"></span><span id="_CPPv2N21VmbFeaturePersistType27VmbFeaturePersistStreamableE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a547095368385f75fa03524debf5b83e8a9244af7428acf8dea131bb44b226fb72"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistStreamable</span></span></span><a class="headerlink" href="#_CPPv4N21VmbFeaturePersistType27VmbFeaturePersistStreamableE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Save only features marked as streamable, excluding look-up tables. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbFeaturePersistType22VmbFeaturePersistNoLUTE">
+<span id="_CPPv3N21VmbFeaturePersistType22VmbFeaturePersistNoLUTE"></span><span id="_CPPv2N21VmbFeaturePersistType22VmbFeaturePersistNoLUTE"></span><span class="target" id="VmbCTypeDefinitions_8h_1a547095368385f75fa03524debf5b83e8ad1f4433805a352dca02bc5efbaf57022"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistNoLUT</span></span></span><a class="headerlink" href="#_CPPv4N21VmbFeaturePersistType22VmbFeaturePersistNoLUTE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Save all features except look-up tables (default) </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv425VmbModulePersistFlagsType">
+<span id="_CPPv325VmbModulePersistFlagsType"></span><span id="_CPPv225VmbModulePersistFlagsType"></span><span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580ca"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsType</span></span></span><a class="headerlink" href="#_CPPv425VmbModulePersistFlagsType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Parameters determining the operation mode of VmbSettingsSave and VmbSettingsLoad. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbModulePersistFlagsType25VmbModulePersistFlagsNoneE">
+<span id="_CPPv3N25VmbModulePersistFlagsType25VmbModulePersistFlagsNoneE"></span><span id="_CPPv2N25VmbModulePersistFlagsType25VmbModulePersistFlagsNoneE"></span><span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caaad7050b42cc722b3736ce47558acf17e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsNone</span></span></span><a class="headerlink" href="#_CPPv4N25VmbModulePersistFlagsType25VmbModulePersistFlagsNoneE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load features for no module. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbModulePersistFlagsType35VmbModulePersistFlagsTransportLayerE">
+<span id="_CPPv3N25VmbModulePersistFlagsType35VmbModulePersistFlagsTransportLayerE"></span><span id="_CPPv2N25VmbModulePersistFlagsType35VmbModulePersistFlagsTransportLayerE"></span><span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caa272ac4e89e07badfed01a4799cd0bd7b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsTransportLayer</span></span></span><a class="headerlink" href="#_CPPv4N25VmbModulePersistFlagsType35VmbModulePersistFlagsTransportLayerE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load the transport layer features. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbModulePersistFlagsType30VmbModulePersistFlagsInterfaceE">
+<span id="_CPPv3N25VmbModulePersistFlagsType30VmbModulePersistFlagsInterfaceE"></span><span id="_CPPv2N25VmbModulePersistFlagsType30VmbModulePersistFlagsInterfaceE"></span><span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caa9afc8b9d7fafaa4e1ec788b49ae18c86"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsInterface</span></span></span><a class="headerlink" href="#_CPPv4N25VmbModulePersistFlagsType30VmbModulePersistFlagsInterfaceE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load the interface features. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbModulePersistFlagsType33VmbModulePersistFlagsRemoteDeviceE">
+<span id="_CPPv3N25VmbModulePersistFlagsType33VmbModulePersistFlagsRemoteDeviceE"></span><span id="_CPPv2N25VmbModulePersistFlagsType33VmbModulePersistFlagsRemoteDeviceE"></span><span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caa01a119fea54ade86934499734037c4f9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsRemoteDevice</span></span></span><a class="headerlink" href="#_CPPv4N25VmbModulePersistFlagsType33VmbModulePersistFlagsRemoteDeviceE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load the remote device features. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbModulePersistFlagsType32VmbModulePersistFlagsLocalDeviceE">
+<span id="_CPPv3N25VmbModulePersistFlagsType32VmbModulePersistFlagsLocalDeviceE"></span><span id="_CPPv2N25VmbModulePersistFlagsType32VmbModulePersistFlagsLocalDeviceE"></span><span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caad59df874b4cff81c732d045e32952fde"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsLocalDevice</span></span></span><a class="headerlink" href="#_CPPv4N25VmbModulePersistFlagsType32VmbModulePersistFlagsLocalDeviceE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load the local device features. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbModulePersistFlagsType28VmbModulePersistFlagsStreamsE">
+<span id="_CPPv3N25VmbModulePersistFlagsType28VmbModulePersistFlagsStreamsE"></span><span id="_CPPv2N25VmbModulePersistFlagsType28VmbModulePersistFlagsStreamsE"></span><span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caa0693ab7ab371582aacdbd24fbd1c39e6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsStreams</span></span></span><a class="headerlink" href="#_CPPv4N25VmbModulePersistFlagsType28VmbModulePersistFlagsStreamsE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load the features of stream modules. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbModulePersistFlagsType24VmbModulePersistFlagsAllE">
+<span id="_CPPv3N25VmbModulePersistFlagsType24VmbModulePersistFlagsAllE"></span><span id="_CPPv2N25VmbModulePersistFlagsType24VmbModulePersistFlagsAllE"></span><span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caacbdd4f6972dea214896af22464693c46"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsAll</span></span></span><a class="headerlink" href="#_CPPv4N25VmbModulePersistFlagsType24VmbModulePersistFlagsAllE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load features for all modules. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp enum">
+<dt class="sig sig-object cpp" id="_CPPv411VmbLogLevel">
+<span id="_CPPv311VmbLogLevel"></span><span id="_CPPv211VmbLogLevel"></span><span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevel</span></span></span><a class="headerlink" href="#_CPPv411VmbLogLevel" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A level to use for logging. </p>
+<p><em>Values:</em></p>
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N11VmbLogLevel15VmbLogLevelNoneE">
+<span id="_CPPv3N11VmbLogLevel15VmbLogLevelNoneE"></span><span id="_CPPv2N11VmbLogLevel15VmbLogLevelNoneE"></span><span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a6133a71ab181d781e9eb8fc39ab62727"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelNone</span></span></span><a class="headerlink" href="#_CPPv4N11VmbLogLevel15VmbLogLevelNoneE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Nothing is logged regardless of the severity of the issue. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N11VmbLogLevel16VmbLogLevelErrorE">
+<span id="_CPPv3N11VmbLogLevel16VmbLogLevelErrorE"></span><span id="_CPPv2N11VmbLogLevel16VmbLogLevelErrorE"></span><span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a4c3dcfd9c3688f4b03e5d74fc1b24098"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelError</span></span></span><a class="headerlink" href="#_CPPv4N11VmbLogLevel16VmbLogLevelErrorE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Only errors are logged. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N11VmbLogLevel16VmbLogLevelDebugE">
+<span id="_CPPv3N11VmbLogLevel16VmbLogLevelDebugE"></span><span id="_CPPv2N11VmbLogLevel16VmbLogLevelDebugE"></span><span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a606405d0b6c54a2395171584c3a6bf81"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelDebug</span></span></span><a class="headerlink" href="#_CPPv4N11VmbLogLevel16VmbLogLevelDebugE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Only error and debug messages are logged. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N11VmbLogLevel15VmbLogLevelWarnE">
+<span id="_CPPv3N11VmbLogLevel15VmbLogLevelWarnE"></span><span id="_CPPv2N11VmbLogLevel15VmbLogLevelWarnE"></span><span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a5c497f9dd2c5b2d6f6a8149086c4b7e9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelWarn</span></span></span><a class="headerlink" href="#_CPPv4N11VmbLogLevel15VmbLogLevelWarnE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Only error, debug and warn messages are logged. </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N11VmbLogLevel16VmbLogLevelTraceE">
+<span id="_CPPv3N11VmbLogLevel16VmbLogLevelTraceE"></span><span id="_CPPv2N11VmbLogLevel16VmbLogLevelTraceE"></span><span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a2b0cbd973a8b9195a55038761e409dac"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelTrace</span></span></span><a class="headerlink" href="#_CPPv4N11VmbLogLevel16VmbLogLevelTraceE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>all messages are logged </p>
+</dd></dl>
+
+<dl class="cpp enumerator">
+<dt class="sig sig-object cpp" id="_CPPv4N11VmbLogLevel14VmbLogLevelAllE">
+<span id="_CPPv3N11VmbLogLevel14VmbLogLevelAllE"></span><span id="_CPPv2N11VmbLogLevel14VmbLogLevelAllE"></span><span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a605eac4fe6d1ba4c8979dde9aac433e4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelAll</span></span></span><a class="headerlink" href="#_CPPv4N11VmbLogLevel14VmbLogLevelAllE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>all messages are logged </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1a8893d5c140a033547d219d37dd298960"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv421VmbFeaturePersistType" title="VmbFeaturePersistType"><span class="n"><span class="pre">VmbFeaturePersistType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistType</span></span></span><br /></dt>
+<dd><p>Type of features that are to be saved (persisted) to the XML file when using VmbSettingsSave. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv419VmbFeaturePersist_t">
+<span id="_CPPv319VmbFeaturePersist_t"></span><span id="_CPPv219VmbFeaturePersist_t"></span><span id="VmbFeaturePersist_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1a732ac0da2f7b1f47684fd35a2f0f03d7"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersist_t</span></span></span><a class="headerlink" href="#_CPPv419VmbFeaturePersist_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for feature persistence; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a547095368385f75fa03524debf5b83e8"><span class="std std-ref">VmbFeaturePersistType</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1a4c3c9202c924b171f55f71fc9e65c18a"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv425VmbModulePersistFlagsType" title="VmbModulePersistFlagsType"><span class="n"><span class="pre">VmbModulePersistFlagsType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsType</span></span></span><br /></dt>
+<dd><p>Parameters determining the operation mode of VmbSettingsSave and VmbSettingsLoad. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv423VmbModulePersistFlags_t">
+<span id="_CPPv323VmbModulePersistFlags_t"></span><span id="_CPPv223VmbModulePersistFlags_t"></span><span id="VmbModulePersistFlags_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1a60d866e106ff787d4cd4a6919ee9b915"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlags_t</span></span></span><a class="headerlink" href="#_CPPv423VmbModulePersistFlags_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for module persist flags; for values see VmbModulePersistFlagsType. </p>
+<p>Use a combination of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580ca"><span class="std std-ref">VmbModulePersistFlagsType</span></a> constants </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1a7f619b399eaed2a144e3b4c75ab77863"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbLogLevel" title="VmbLogLevel"><span class="n"><span class="pre">VmbLogLevel</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevel</span></span></span><br /></dt>
+<dd><p>A level to use for logging. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv413VmbLogLevel_t">
+<span id="_CPPv313VmbLogLevel_t"></span><span id="_CPPv213VmbLogLevel_t"></span><span id="VmbLogLevel_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1a02cc0a47020372536386f2b67b578d8a"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevel_t</span></span></span><a class="headerlink" href="#_CPPv413VmbLogLevel_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The type used for storing the log level. </p>
+<p>Use a constant from <a class="reference internal" href="#VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536"><span class="std std-ref">VmbLogLevel</span></a> </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv427VmbFeaturePersistSettings_t">
+<span id="_CPPv327VmbFeaturePersistSettings_t"></span><span id="_CPPv227VmbFeaturePersistSettings_t"></span><span id="VmbFeaturePersistSettings_t"></span><span class="target" id="VmbCTypeDefinitions_8h_1aa1459f69a5b0f766b3c51e7aaa6b0ded"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv425VmbFeaturePersistSettings" title="VmbFeaturePersistSettings"><span class="n"><span class="pre">VmbFeaturePersistSettings</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistSettings_t</span></span></span><a class="headerlink" href="#_CPPv427VmbFeaturePersistSettings_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Parameters determining the operation mode of VmbSettingsSave and VmbSettingsLoad. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-callbacks">Callbacks</p>
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1a414c98f3ebbfc3cb3e65e6719dcff480"></span><span class="sig-name descname"><span class="pre">void(VMB_CALL</span> <span class="pre">*</span> <span class="pre">VmbInvalidationCallback</span> <span class="pre">)(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">void</span> <span class="pre">*userContext)</span></span></dt>
+<dd><p>Invalidation callback type for a function that gets called in a separate thread and has been registered with VmbFeatureInvalidationRegister(). </p>
+<p>While the callback is run, all feature data is atomic. After the callback finishes, the feature data may be updated with new values.</p>
+<p>Do not spend too much time in this thread; it prevents the feature values from being updated from any other thread or the lower-level drivers.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Param handle</dt>
+<dd class="field-odd"><p><strong>[in]</strong> Handle for an entity that exposes features </p>
+</dd>
+<dt class="field-even">Param name</dt>
+<dd class="field-even"><p><strong>[in]</strong> Name of the feature </p>
+</dd>
+<dt class="field-odd">Param userContext</dt>
+<dd class="field-odd"><p><strong>[in]</strong> Pointer to the user context, see VmbFeatureInvalidationRegister </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1a9e4b620625aff5e0d26812484d7da8c7"></span><span class="sig-name descname"><span class="pre">void(VMB_CALL</span> <span class="pre">*</span> <span class="pre">VmbFrameCallback</span> <span class="pre">)(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">cameraHandle,</span> <span class="pre">const</span> <span class="pre">VmbHandle_t</span> <span class="pre">streamHandle,</span> <span class="pre">VmbFrame_t</span> <span class="pre">*frame)</span></span></dt>
+<dd><p>Frame Callback type for a function that gets called in a separate thread if a frame has been queued with VmbCaptureFrameQueue. </p>
+<div class="admonition warning">
+<p class="admonition-title">Warning</p>
+<p>Any operations closing the stream including VmbShutdown and VmbCameraClose in addition to VmbCaptureEnd block until any currently active callbacks return. If the callback does not return in finite time, the program may not return.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Param cameraHandle</dt>
+<dd class="field-odd"><p><strong>[in]</strong> Handle of the camera the frame belongs to </p>
+</dd>
+<dt class="field-even">Param streamHandle</dt>
+<dd class="field-even"><p><strong>[in]</strong> Handle of the stream the frame belongs to </p>
+</dd>
+<dt class="field-odd">Param frame</dt>
+<dd class="field-odd"><p><strong>[in]</strong> The received frame </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp">
+<span class="target" id="VmbCTypeDefinitions_8h_1a1065de7704c3ac5ebdc595b641fe6ad4"></span><span class="sig-name descname"><span class="pre">VmbError_t(VMB_CALL</span> <span class="pre">*</span> <span class="pre">VmbChunkAccessCallback</span> <span class="pre">)(VmbHandle_t</span> <span class="pre">featureAccessHandle,</span> <span class="pre">void</span> <span class="pre">*userContext)</span></span></dt>
+<dd><p>Function pointer type to access chunk data. </p>
+<p>This function should complete as quickly as possible, since it blocks other updates on the remote device.</p>
+<p>This function should not throw exceptions, even if VmbC is used from C++. Any exception thrown will only result in an error code indicating that an exception was thrown.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Param featureAccessHandle</dt>
+<dd class="field-odd"><p><strong>[in]</strong> A special handle that can be used for accessing features; the handle is only valid during the call of the function. </p>
+</dd>
+<dt class="field-even">Param userContext</dt>
+<dd class="field-even"><p><strong>[in]</strong> The value the user passed to VmbChunkDataAccess.</p>
+</dd>
+<dt class="field-odd">Return</dt>
+<dd class="field-odd"><p>An error to be returned from VmbChunkDataAccess in the absence of other errors; A custom exit code &gt;= <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a9ad210fe4d1d090508ff016367d530fb"><span class="std std-ref">VmbErrorCustom</span></a> can be returned to indicate a failure via VmbChunkDataAccess return code </p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+<dl class="cpp struct">
+<dt class="sig sig-object cpp" id="_CPPv421VmbTransportLayerInfo">
+<span id="_CPPv321VmbTransportLayerInfo"></span><span id="_CPPv221VmbTransportLayerInfo"></span><span id="VmbTransportLayerInfo"></span><span class="target" id="structVmbTransportLayerInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerInfo</span></span></span><a class="headerlink" href="#_CPPv421VmbTransportLayerInfo" title="Permalink to this definition"></a><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Transport layer information. </p>
+<p>Holds read-only information about a transport layer. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerInfo22transportLayerIdStringE">
+<span id="_CPPv3N21VmbTransportLayerInfo22transportLayerIdStringE"></span><span id="_CPPv2N21VmbTransportLayerInfo22transportLayerIdStringE"></span><span id="VmbTransportLayerInfo::transportLayerIdString__cCP"></span><span class="target" id="structVmbTransportLayerInfo_1a6f7e0a491e29c92453380298b6d08e68"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerIdString</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerInfo22transportLayerIdStringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unique id of the transport layer. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerInfo18transportLayerNameE">
+<span id="_CPPv3N21VmbTransportLayerInfo18transportLayerNameE"></span><span id="_CPPv2N21VmbTransportLayerInfo18transportLayerNameE"></span><span id="VmbTransportLayerInfo::transportLayerName__cCP"></span><span class="target" id="structVmbTransportLayerInfo_1a26b4eec68f4ca3517df698867801719e"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerName</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerInfo18transportLayerNameE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Name of the transport layer. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerInfo23transportLayerModelNameE">
+<span id="_CPPv3N21VmbTransportLayerInfo23transportLayerModelNameE"></span><span id="_CPPv2N21VmbTransportLayerInfo23transportLayerModelNameE"></span><span id="VmbTransportLayerInfo::transportLayerModelName__cCP"></span><span class="target" id="structVmbTransportLayerInfo_1a289c08c21caf1fcc513bb49187b004b8"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerModelName</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerInfo23transportLayerModelNameE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Model name of the transport layer. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerInfo20transportLayerVendorE">
+<span id="_CPPv3N21VmbTransportLayerInfo20transportLayerVendorE"></span><span id="_CPPv2N21VmbTransportLayerInfo20transportLayerVendorE"></span><span id="VmbTransportLayerInfo::transportLayerVendor__cCP"></span><span class="target" id="structVmbTransportLayerInfo_1acac270513c7802c92b1c426f01d90e76"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerVendor</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerInfo20transportLayerVendorE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Vendor of the transport layer. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerInfo21transportLayerVersionE">
+<span id="_CPPv3N21VmbTransportLayerInfo21transportLayerVersionE"></span><span id="_CPPv2N21VmbTransportLayerInfo21transportLayerVersionE"></span><span id="VmbTransportLayerInfo::transportLayerVersion__cCP"></span><span class="target" id="structVmbTransportLayerInfo_1a6de53fdc3d988b7480ec82e6a38da2c6"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerVersion</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerInfo21transportLayerVersionE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Version of the transport layer. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerInfo18transportLayerPathE">
+<span id="_CPPv3N21VmbTransportLayerInfo18transportLayerPathE"></span><span id="_CPPv2N21VmbTransportLayerInfo18transportLayerPathE"></span><span id="VmbTransportLayerInfo::transportLayerPath__cCP"></span><span class="target" id="structVmbTransportLayerInfo_1af9c09034fbc6b2af9839ebfe8a7e280c"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerPath</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerInfo18transportLayerPathE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Full path of the transport layer. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerInfo20transportLayerHandleE">
+<span id="_CPPv3N21VmbTransportLayerInfo20transportLayerHandleE"></span><span id="_CPPv2N21VmbTransportLayerInfo20transportLayerHandleE"></span><span id="VmbTransportLayerInfo::transportLayerHandle__VmbHandle_t"></span><span class="target" id="structVmbTransportLayerInfo_1a51c2eb9351de2ac2f93cc4e1097a0180"></span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerHandle</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerInfo20transportLayerHandleE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the transport layer for feature access. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N21VmbTransportLayerInfo18transportLayerTypeE">
+<span id="_CPPv3N21VmbTransportLayerInfo18transportLayerTypeE"></span><span id="_CPPv2N21VmbTransportLayerInfo18transportLayerTypeE"></span><span id="VmbTransportLayerInfo::transportLayerType__VmbTransportLayerType_t"></span><span class="target" id="structVmbTransportLayerInfo_1a0b79fd5622221aeed57ddd1e073cc34d"></span><a class="reference internal" href="#_CPPv423VmbTransportLayerType_t" title="VmbTransportLayerType_t"><span class="n"><span class="pre">VmbTransportLayerType_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerType</span></span></span><a class="headerlink" href="#_CPPv4N21VmbTransportLayerInfo18transportLayerTypeE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The type of the transport layer. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="cpp struct">
+<dt class="sig sig-object cpp" id="_CPPv416VmbInterfaceInfo">
+<span id="_CPPv316VmbInterfaceInfo"></span><span id="_CPPv216VmbInterfaceInfo"></span><span id="VmbInterfaceInfo"></span><span class="target" id="structVmbInterfaceInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInterfaceInfo</span></span></span><a class="headerlink" href="#_CPPv416VmbInterfaceInfo" title="Permalink to this definition"></a><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Interface information. </p>
+<p>Holds read-only information about an interface. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N16VmbInterfaceInfo17interfaceIdStringE">
+<span id="_CPPv3N16VmbInterfaceInfo17interfaceIdStringE"></span><span id="_CPPv2N16VmbInterfaceInfo17interfaceIdStringE"></span><span id="VmbInterfaceInfo::interfaceIdString__cCP"></span><span class="target" id="structVmbInterfaceInfo_1a47bbeaa473a4700a9d806365005a8691"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">interfaceIdString</span></span></span><a class="headerlink" href="#_CPPv4N16VmbInterfaceInfo17interfaceIdStringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Identifier of the interface. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N16VmbInterfaceInfo13interfaceNameE">
+<span id="_CPPv3N16VmbInterfaceInfo13interfaceNameE"></span><span id="_CPPv2N16VmbInterfaceInfo13interfaceNameE"></span><span id="VmbInterfaceInfo::interfaceName__cCP"></span><span class="target" id="structVmbInterfaceInfo_1aa02e95a6c0bd019f1e2323c8b93c5f54"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">interfaceName</span></span></span><a class="headerlink" href="#_CPPv4N16VmbInterfaceInfo13interfaceNameE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Interface name, given by the transport layer. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N16VmbInterfaceInfo15interfaceHandleE">
+<span id="_CPPv3N16VmbInterfaceInfo15interfaceHandleE"></span><span id="_CPPv2N16VmbInterfaceInfo15interfaceHandleE"></span><span id="VmbInterfaceInfo::interfaceHandle__VmbHandle_t"></span><span class="target" id="structVmbInterfaceInfo_1a9c7cbbe0b7ca6fbfb31000b096fa68d5"></span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">interfaceHandle</span></span></span><a class="headerlink" href="#_CPPv4N16VmbInterfaceInfo15interfaceHandleE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the interface for feature access. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N16VmbInterfaceInfo20transportLayerHandleE">
+<span id="_CPPv3N16VmbInterfaceInfo20transportLayerHandleE"></span><span id="_CPPv2N16VmbInterfaceInfo20transportLayerHandleE"></span><span id="VmbInterfaceInfo::transportLayerHandle__VmbHandle_t"></span><span class="target" id="structVmbInterfaceInfo_1a88efd459cc32b3309d89c3c0f55fa417"></span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerHandle</span></span></span><a class="headerlink" href="#_CPPv4N16VmbInterfaceInfo20transportLayerHandleE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the related transport layer for feature access. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N16VmbInterfaceInfo13interfaceTypeE">
+<span id="_CPPv3N16VmbInterfaceInfo13interfaceTypeE"></span><span id="_CPPv2N16VmbInterfaceInfo13interfaceTypeE"></span><span id="VmbInterfaceInfo::interfaceType__VmbTransportLayerType_t"></span><span class="target" id="structVmbInterfaceInfo_1a626f06ba8366ea5c31ec9288fa7d95d3"></span><a class="reference internal" href="#_CPPv423VmbTransportLayerType_t" title="VmbTransportLayerType_t"><span class="n"><span class="pre">VmbTransportLayerType_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">interfaceType</span></span></span><a class="headerlink" href="#_CPPv4N16VmbInterfaceInfo13interfaceTypeE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The technology of the interface. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="cpp struct">
+<dt class="sig sig-object cpp" id="_CPPv413VmbCameraInfo">
+<span id="_CPPv313VmbCameraInfo"></span><span id="_CPPv213VmbCameraInfo"></span><span id="VmbCameraInfo"></span><span class="target" id="structVmbCameraInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbCameraInfo</span></span></span><a class="headerlink" href="#_CPPv413VmbCameraInfo" title="Permalink to this definition"></a><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Camera information. </p>
+<p>Holds read-only information about a camera. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo14cameraIdStringE">
+<span id="_CPPv3N13VmbCameraInfo14cameraIdStringE"></span><span id="_CPPv2N13VmbCameraInfo14cameraIdStringE"></span><span id="VmbCameraInfo::cameraIdString__cCP"></span><span class="target" id="structVmbCameraInfo_1abaaff803bd593e5ec7e5a1711d2f86bc"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraIdString</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo14cameraIdStringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Identifier of the camera. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo16cameraIdExtendedE">
+<span id="_CPPv3N13VmbCameraInfo16cameraIdExtendedE"></span><span id="_CPPv2N13VmbCameraInfo16cameraIdExtendedE"></span><span id="VmbCameraInfo::cameraIdExtended__cCP"></span><span class="target" id="structVmbCameraInfo_1a4ce8aeaa6602df59e829b1ddb7fe7e4d"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraIdExtended</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo16cameraIdExtendedE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>globally unique identifier for the camera </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo10cameraNameE">
+<span id="_CPPv3N13VmbCameraInfo10cameraNameE"></span><span id="_CPPv2N13VmbCameraInfo10cameraNameE"></span><span id="VmbCameraInfo::cameraName__cCP"></span><span class="target" id="structVmbCameraInfo_1a10a51f5abdf8445a14dcdeeb36a4f61b"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraName</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo10cameraNameE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The display name of the camera. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo9modelNameE">
+<span id="_CPPv3N13VmbCameraInfo9modelNameE"></span><span id="_CPPv2N13VmbCameraInfo9modelNameE"></span><span id="VmbCameraInfo::modelName__cCP"></span><span class="target" id="structVmbCameraInfo_1a2f85dbfe811c10613cb0481a623280d7"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">modelName</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo9modelNameE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Model name. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo12serialStringE">
+<span id="_CPPv3N13VmbCameraInfo12serialStringE"></span><span id="_CPPv2N13VmbCameraInfo12serialStringE"></span><span id="VmbCameraInfo::serialString__cCP"></span><span class="target" id="structVmbCameraInfo_1ac724c560124fe166778fe559622a0b84"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">serialString</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo12serialStringE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Serial number. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo20transportLayerHandleE">
+<span id="_CPPv3N13VmbCameraInfo20transportLayerHandleE"></span><span id="_CPPv2N13VmbCameraInfo20transportLayerHandleE"></span><span id="VmbCameraInfo::transportLayerHandle__VmbHandle_t"></span><span class="target" id="structVmbCameraInfo_1a317ada59d63ef4630060a4ab1b719f8f"></span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerHandle</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo20transportLayerHandleE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the related transport layer for feature access. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo15interfaceHandleE">
+<span id="_CPPv3N13VmbCameraInfo15interfaceHandleE"></span><span id="_CPPv2N13VmbCameraInfo15interfaceHandleE"></span><span id="VmbCameraInfo::interfaceHandle__VmbHandle_t"></span><span class="target" id="structVmbCameraInfo_1a2fbe7ed5eec82271ba67109022fc5ac7"></span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">interfaceHandle</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo15interfaceHandleE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the related interface for feature access. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo17localDeviceHandleE">
+<span id="_CPPv3N13VmbCameraInfo17localDeviceHandleE"></span><span id="_CPPv2N13VmbCameraInfo17localDeviceHandleE"></span><span id="VmbCameraInfo::localDeviceHandle__VmbHandle_t"></span><span class="target" id="structVmbCameraInfo_1a54735e37e55bbadfa386c701a4b6241b"></span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">localDeviceHandle</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo17localDeviceHandleE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the related GenTL local device. NULL if the camera is not opened. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo13streamHandlesE">
+<span id="_CPPv3N13VmbCameraInfo13streamHandlesE"></span><span id="_CPPv2N13VmbCameraInfo13streamHandlesE"></span><span id="VmbCameraInfo::streamHandles__VmbHandle_tCP"></span><span class="target" id="structVmbCameraInfo_1aa758a46b402b06b0e3c3175d4ba8092e"></span><a class="reference internal" href="#_CPPv411VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">streamHandles</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo13streamHandlesE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handles of the streams provided by the camera. NULL if the camera is not opened. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo11streamCountE">
+<span id="_CPPv3N13VmbCameraInfo11streamCountE"></span><span id="_CPPv2N13VmbCameraInfo11streamCountE"></span><span id="VmbCameraInfo::streamCount__VmbUint32_t"></span><span class="target" id="structVmbCameraInfo_1af136c70badac27cec7f4e06ae821a6cd"></span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">streamCount</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo11streamCountE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Number of stream handles in the streamHandles array. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N13VmbCameraInfo15permittedAccessE">
+<span id="_CPPv3N13VmbCameraInfo15permittedAccessE"></span><span id="_CPPv2N13VmbCameraInfo15permittedAccessE"></span><span id="VmbCameraInfo::permittedAccess__VmbAccessMode_t"></span><span class="target" id="structVmbCameraInfo_1ade9ea0657be84e40393a6af7e9024cf5"></span><a class="reference internal" href="#_CPPv415VmbAccessMode_t" title="VmbAccessMode_t"><span class="n"><span class="pre">VmbAccessMode_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">permittedAccess</span></span></span><a class="headerlink" href="#_CPPv4N13VmbCameraInfo15permittedAccessE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Permitted access modes, see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1aa0d1156f6eb619730081886bd2f4a951"><span class="std std-ref">VmbAccessModeType</span></a>. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="cpp struct">
+<dt class="sig sig-object cpp" id="_CPPv414VmbFeatureInfo">
+<span id="_CPPv314VmbFeatureInfo"></span><span id="_CPPv214VmbFeatureInfo"></span><span id="VmbFeatureInfo"></span><span class="target" id="structVmbFeatureInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureInfo</span></span></span><a class="headerlink" href="#_CPPv414VmbFeatureInfo" title="Permalink to this definition"></a><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Feature information. </p>
+<p>Holds read-only information about a feature. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo4nameE">
+<span id="_CPPv3N14VmbFeatureInfo4nameE"></span><span id="_CPPv2N14VmbFeatureInfo4nameE"></span><span id="VmbFeatureInfo::name__cCP"></span><span class="target" id="structVmbFeatureInfo_1a05ae916cf5c16c50d4b15be194152864"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">name</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo4nameE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Name used in the API. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo8categoryE">
+<span id="_CPPv3N14VmbFeatureInfo8categoryE"></span><span id="_CPPv2N14VmbFeatureInfo8categoryE"></span><span id="VmbFeatureInfo::category__cCP"></span><span class="target" id="structVmbFeatureInfo_1a14b4f3be29c4fdafdb5bb5a81d5da248"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">category</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo8categoryE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Category this feature can be found in. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo11displayNameE">
+<span id="_CPPv3N14VmbFeatureInfo11displayNameE"></span><span id="_CPPv2N14VmbFeatureInfo11displayNameE"></span><span id="VmbFeatureInfo::displayName__cCP"></span><span class="target" id="structVmbFeatureInfo_1a84992d3ff82a3c401a73703ad577c9fa"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">displayName</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo11displayNameE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature name to be used in GUIs. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo7tooltipE">
+<span id="_CPPv3N14VmbFeatureInfo7tooltipE"></span><span id="_CPPv2N14VmbFeatureInfo7tooltipE"></span><span id="VmbFeatureInfo::tooltip__cCP"></span><span class="target" id="structVmbFeatureInfo_1a71608e1a0071d12fceb8ebf0fc3bf3d3"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">tooltip</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo7tooltipE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Short description, e.g. for a tooltip. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo11descriptionE">
+<span id="_CPPv3N14VmbFeatureInfo11descriptionE"></span><span id="_CPPv2N14VmbFeatureInfo11descriptionE"></span><span id="VmbFeatureInfo::description__cCP"></span><span class="target" id="structVmbFeatureInfo_1a88e37c331937cbf9a652ab90fbb8b7b1"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">description</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo11descriptionE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Longer description. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo13sfncNamespaceE">
+<span id="_CPPv3N14VmbFeatureInfo13sfncNamespaceE"></span><span id="_CPPv2N14VmbFeatureInfo13sfncNamespaceE"></span><span id="VmbFeatureInfo::sfncNamespace__cCP"></span><span class="target" id="structVmbFeatureInfo_1ac7ff7d26ea886de46d81bb2a062ab2bf"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">sfncNamespace</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo13sfncNamespaceE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Namespace this feature resides in. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo4unitE">
+<span id="_CPPv3N14VmbFeatureInfo4unitE"></span><span id="_CPPv2N14VmbFeatureInfo4unitE"></span><span id="VmbFeatureInfo::unit__cCP"></span><span class="target" id="structVmbFeatureInfo_1a1ead094a89e856f1bf6ba8ad2a576224"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">unit</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo4unitE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Measuring unit as given in the XML file. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo14representationE">
+<span id="_CPPv3N14VmbFeatureInfo14representationE"></span><span id="_CPPv2N14VmbFeatureInfo14representationE"></span><span id="VmbFeatureInfo::representation__cCP"></span><span class="target" id="structVmbFeatureInfo_1a554488281d2611e83bd81157f5722981"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">representation</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo14representationE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Representation of a numeric feature. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo15featureDataTypeE">
+<span id="_CPPv3N14VmbFeatureInfo15featureDataTypeE"></span><span id="_CPPv2N14VmbFeatureInfo15featureDataTypeE"></span><span id="VmbFeatureInfo::featureDataType__VmbFeatureData_t"></span><span class="target" id="structVmbFeatureInfo_1a9108fd78e578dfac015ec460897a31c6"></span><a class="reference internal" href="#_CPPv416VmbFeatureData_t" title="VmbFeatureData_t"><span class="n"><span class="pre">VmbFeatureData_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">featureDataType</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo15featureDataTypeE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Data type of this feature. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo12featureFlagsE">
+<span id="_CPPv3N14VmbFeatureInfo12featureFlagsE"></span><span id="_CPPv2N14VmbFeatureInfo12featureFlagsE"></span><span id="VmbFeatureInfo::featureFlags__VmbFeatureFlags_t"></span><span class="target" id="structVmbFeatureInfo_1a0aad77511930ca2174caf0525ca5af66"></span><a class="reference internal" href="#_CPPv417VmbFeatureFlags_t" title="VmbFeatureFlags_t"><span class="n"><span class="pre">VmbFeatureFlags_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">featureFlags</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo12featureFlagsE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Access flags for this feature. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo11pollingTimeE">
+<span id="_CPPv3N14VmbFeatureInfo11pollingTimeE"></span><span id="_CPPv2N14VmbFeatureInfo11pollingTimeE"></span><span id="VmbFeatureInfo::pollingTime__VmbUint32_t"></span><span class="target" id="structVmbFeatureInfo_1a871a326032b4f8b2b079a53a5b2ecf7d"></span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">pollingTime</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo11pollingTimeE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Predefined polling time for volatile features. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo10visibilityE">
+<span id="_CPPv3N14VmbFeatureInfo10visibilityE"></span><span id="_CPPv2N14VmbFeatureInfo10visibilityE"></span><span id="VmbFeatureInfo::visibility__VmbFeatureVisibility_t"></span><span class="target" id="structVmbFeatureInfo_1a2541f3c53da7cd41d11771c5ab9c6713"></span><a class="reference internal" href="#_CPPv422VmbFeatureVisibility_t" title="VmbFeatureVisibility_t"><span class="n"><span class="pre">VmbFeatureVisibility_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">visibility</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo10visibilityE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>GUI visibility. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo12isStreamableE">
+<span id="_CPPv3N14VmbFeatureInfo12isStreamableE"></span><span id="_CPPv2N14VmbFeatureInfo12isStreamableE"></span><span id="VmbFeatureInfo::isStreamable__VmbBool_t"></span><span class="target" id="structVmbFeatureInfo_1ad0b198bde3cf7048863f0f24807b49db"></span><a class="reference internal" href="#_CPPv49VmbBool_t" title="VmbBool_t"><span class="n"><span class="pre">VmbBool_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">isStreamable</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo12isStreamableE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Indicates if a feature can be stored to / loaded from a file. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N14VmbFeatureInfo19hasSelectedFeaturesE">
+<span id="_CPPv3N14VmbFeatureInfo19hasSelectedFeaturesE"></span><span id="_CPPv2N14VmbFeatureInfo19hasSelectedFeaturesE"></span><span id="VmbFeatureInfo::hasSelectedFeatures__VmbBool_t"></span><span class="target" id="structVmbFeatureInfo_1a2b5e977f004f703a158045f9ae345b0c"></span><a class="reference internal" href="#_CPPv49VmbBool_t" title="VmbBool_t"><span class="n"><span class="pre">VmbBool_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">hasSelectedFeatures</span></span></span><a class="headerlink" href="#_CPPv4N14VmbFeatureInfo19hasSelectedFeaturesE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Indicates if the feature selects other features. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="cpp struct">
+<dt class="sig sig-object cpp" id="_CPPv419VmbFeatureEnumEntry">
+<span id="_CPPv319VmbFeatureEnumEntry"></span><span id="_CPPv219VmbFeatureEnumEntry"></span><span id="VmbFeatureEnumEntry"></span><span class="target" id="structVmbFeatureEnumEntry"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureEnumEntry</span></span></span><a class="headerlink" href="#_CPPv419VmbFeatureEnumEntry" title="Permalink to this definition"></a><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Info about possible entries of an enumeration feature. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureEnumEntry4nameE">
+<span id="_CPPv3N19VmbFeatureEnumEntry4nameE"></span><span id="_CPPv2N19VmbFeatureEnumEntry4nameE"></span><span id="VmbFeatureEnumEntry::name__cCP"></span><span class="target" id="structVmbFeatureEnumEntry_1ab7ea2db6d4dbdee8e409585fcc9daebf"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">name</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureEnumEntry4nameE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Name used in the API. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureEnumEntry11displayNameE">
+<span id="_CPPv3N19VmbFeatureEnumEntry11displayNameE"></span><span id="_CPPv2N19VmbFeatureEnumEntry11displayNameE"></span><span id="VmbFeatureEnumEntry::displayName__cCP"></span><span class="target" id="structVmbFeatureEnumEntry_1ae3ec279078159a547337faff44176e30"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">displayName</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureEnumEntry11displayNameE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Enumeration entry name to be used in GUIs. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureEnumEntry7tooltipE">
+<span id="_CPPv3N19VmbFeatureEnumEntry7tooltipE"></span><span id="_CPPv2N19VmbFeatureEnumEntry7tooltipE"></span><span id="VmbFeatureEnumEntry::tooltip__cCP"></span><span class="target" id="structVmbFeatureEnumEntry_1a19683960df3457641cda740ecc07ab36"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">tooltip</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureEnumEntry7tooltipE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Short description, e.g. for a tooltip. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureEnumEntry11descriptionE">
+<span id="_CPPv3N19VmbFeatureEnumEntry11descriptionE"></span><span id="_CPPv2N19VmbFeatureEnumEntry11descriptionE"></span><span id="VmbFeatureEnumEntry::description__cCP"></span><span class="target" id="structVmbFeatureEnumEntry_1a3ba2cd8dfdf100617b006a9f51366bec"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">description</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureEnumEntry11descriptionE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Longer description. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureEnumEntry8intValueE">
+<span id="_CPPv3N19VmbFeatureEnumEntry8intValueE"></span><span id="_CPPv2N19VmbFeatureEnumEntry8intValueE"></span><span id="VmbFeatureEnumEntry::intValue__VmbInt64_t"></span><span class="target" id="structVmbFeatureEnumEntry_1aa5d9fee1a684c3d184113b030f0b704c"></span><a class="reference internal" href="#_CPPv410VmbInt64_t" title="VmbInt64_t"><span class="n"><span class="pre">VmbInt64_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">intValue</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureEnumEntry8intValueE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Integer value of this enumeration entry. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureEnumEntry13sfncNamespaceE">
+<span id="_CPPv3N19VmbFeatureEnumEntry13sfncNamespaceE"></span><span id="_CPPv2N19VmbFeatureEnumEntry13sfncNamespaceE"></span><span id="VmbFeatureEnumEntry::sfncNamespace__cCP"></span><span class="target" id="structVmbFeatureEnumEntry_1ac1b4143df80aea790ae424f0607c9534"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">sfncNamespace</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureEnumEntry13sfncNamespaceE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Namespace this feature resides in. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N19VmbFeatureEnumEntry10visibilityE">
+<span id="_CPPv3N19VmbFeatureEnumEntry10visibilityE"></span><span id="_CPPv2N19VmbFeatureEnumEntry10visibilityE"></span><span id="VmbFeatureEnumEntry::visibility__VmbFeatureVisibility_t"></span><span class="target" id="structVmbFeatureEnumEntry_1a3fbb849aa981c5a18e4d32eedbaf720d"></span><a class="reference internal" href="#_CPPv422VmbFeatureVisibility_t" title="VmbFeatureVisibility_t"><span class="n"><span class="pre">VmbFeatureVisibility_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">visibility</span></span></span><a class="headerlink" href="#_CPPv4N19VmbFeatureEnumEntry10visibilityE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>GUI visibility. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="cpp struct">
+<dt class="sig sig-object cpp" id="_CPPv48VmbFrame">
+<span id="_CPPv38VmbFrame"></span><span id="_CPPv28VmbFrame"></span><span id="VmbFrame"></span><span class="target" id="structVmbFrame"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrame</span></span></span><a class="headerlink" href="#_CPPv48VmbFrame" title="Permalink to this definition"></a><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Frame delivered by the camera. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-in">In</p>
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame6bufferE">
+<span id="_CPPv3N8VmbFrame6bufferE"></span><span id="_CPPv2N8VmbFrame6bufferE"></span><span id="VmbFrame::buffer__voidP"></span><span class="target" id="structVmbFrame_1aad6043634732325e11b2bb4a88c8cf28"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">buffer</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame6bufferE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Comprises image and potentially chunk data. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame10bufferSizeE">
+<span id="_CPPv3N8VmbFrame10bufferSizeE"></span><span id="_CPPv2N8VmbFrame10bufferSizeE"></span><span id="VmbFrame::bufferSize__VmbUint32_t"></span><span class="target" id="structVmbFrame_1ae414da43614ab456e3ea0b27cd490827"></span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">bufferSize</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame10bufferSizeE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The size of the data buffer. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame7contextE">
+<span id="_CPPv3N8VmbFrame7contextE"></span><span id="_CPPv2N8VmbFrame7contextE"></span><span id="VmbFrame::context__voidPA"></span><span class="target" id="structVmbFrame_1acf5b032440dd5da997cdd353331517a4"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">context</span></span></span><span class="p"><span class="pre">[</span></span><span class="m"><span class="pre">4</span></span><span class="p"><span class="pre">]</span></span><a class="headerlink" href="#_CPPv4N8VmbFrame7contextE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>4 void pointers that can be employed by the user (e.g. for storing handles) </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame13receiveStatusE">
+<span id="_CPPv3N8VmbFrame13receiveStatusE"></span><span id="_CPPv2N8VmbFrame13receiveStatusE"></span><span id="VmbFrame::receiveStatus__VmbFrameStatus_t"></span><span class="target" id="structVmbFrame_1a2b7da7f4d43d1a666e307a95eff75894"></span><a class="reference internal" href="#_CPPv416VmbFrameStatus_t" title="VmbFrameStatus_t"><span class="n"><span class="pre">VmbFrameStatus_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">receiveStatus</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame13receiveStatusE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The resulting status of the receive operation. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame7frameIDE">
+<span id="_CPPv3N8VmbFrame7frameIDE"></span><span id="_CPPv2N8VmbFrame7frameIDE"></span><span id="VmbFrame::frameID__VmbUint64_t"></span><span class="target" id="structVmbFrame_1acf8edd02ec2ac3e0894277a7de3eb11e"></span><a class="reference internal" href="#_CPPv411VmbUint64_t" title="VmbUint64_t"><span class="n"><span class="pre">VmbUint64_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">frameID</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame7frameIDE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unique ID of this frame in this stream. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame9timestampE">
+<span id="_CPPv3N8VmbFrame9timestampE"></span><span id="_CPPv2N8VmbFrame9timestampE"></span><span id="VmbFrame::timestamp__VmbUint64_t"></span><span class="target" id="structVmbFrame_1a582e5f0ff30509371370d02cfee77b12"></span><a class="reference internal" href="#_CPPv411VmbUint64_t" title="VmbUint64_t"><span class="n"><span class="pre">VmbUint64_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">timestamp</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame9timestampE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The timestamp set by the camera. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame9imageDataE">
+<span id="_CPPv3N8VmbFrame9imageDataE"></span><span id="_CPPv2N8VmbFrame9imageDataE"></span><span id="VmbFrame::imageData__VmbUint8_tP"></span><span class="target" id="structVmbFrame_1ac22a2a3781084f8a84e0ec2545082842"></span><a class="reference internal" href="#_CPPv410VmbUint8_t" title="VmbUint8_t"><span class="n"><span class="pre">VmbUint8_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">imageData</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame9imageDataE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The start of the image data, if present, or null. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame12receiveFlagsE">
+<span id="_CPPv3N8VmbFrame12receiveFlagsE"></span><span id="_CPPv2N8VmbFrame12receiveFlagsE"></span><span id="VmbFrame::receiveFlags__VmbFrameFlags_t"></span><span class="target" id="structVmbFrame_1a03fefaf716f75a6c67af54791e304602"></span><a class="reference internal" href="#_CPPv415VmbFrameFlags_t" title="VmbFrameFlags_t"><span class="n"><span class="pre">VmbFrameFlags_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">receiveFlags</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame12receiveFlagsE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Flags indicating which additional frame information is available. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame11pixelFormatE">
+<span id="_CPPv3N8VmbFrame11pixelFormatE"></span><span id="_CPPv2N8VmbFrame11pixelFormatE"></span><span id="VmbFrame::pixelFormat__VmbPixelFormat_t"></span><span class="target" id="structVmbFrame_1a16e647cf1beba6b0f66cc1a7c6892f34"></span><a class="reference internal" href="#_CPPv416VmbPixelFormat_t" title="VmbPixelFormat_t"><span class="n"><span class="pre">VmbPixelFormat_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">pixelFormat</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame11pixelFormatE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel format of the image. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame5widthE">
+<span id="_CPPv3N8VmbFrame5widthE"></span><span id="_CPPv2N8VmbFrame5widthE"></span><span id="VmbFrame::width__VmbImageDimension_t"></span><span class="target" id="structVmbFrame_1a75f1209cc47de628b6cc3e848ddd30b6"></span><a class="reference internal" href="#_CPPv419VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">width</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame5widthE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Width of an image. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame6heightE">
+<span id="_CPPv3N8VmbFrame6heightE"></span><span id="_CPPv2N8VmbFrame6heightE"></span><span id="VmbFrame::height__VmbImageDimension_t"></span><span class="target" id="structVmbFrame_1a3b862560c995e974708c53941be05cbd"></span><a class="reference internal" href="#_CPPv419VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">height</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame6heightE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Height of an image. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame7offsetXE">
+<span id="_CPPv3N8VmbFrame7offsetXE"></span><span id="_CPPv2N8VmbFrame7offsetXE"></span><span id="VmbFrame::offsetX__VmbImageDimension_t"></span><span class="target" id="structVmbFrame_1a5c78cb4e7471257e2be5268a628aaa5c"></span><a class="reference internal" href="#_CPPv419VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">offsetX</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame7offsetXE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Horizontal offset of an image. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame7offsetYE">
+<span id="_CPPv3N8VmbFrame7offsetYE"></span><span id="_CPPv2N8VmbFrame7offsetYE"></span><span id="VmbFrame::offsetY__VmbImageDimension_t"></span><span class="target" id="structVmbFrame_1aaebdc7a43d5d255c23dca5da3df7e656"></span><a class="reference internal" href="#_CPPv419VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">offsetY</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame7offsetYE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Vertical offset of an image. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame11payloadTypeE">
+<span id="_CPPv3N8VmbFrame11payloadTypeE"></span><span id="_CPPv2N8VmbFrame11payloadTypeE"></span><span id="VmbFrame::payloadType__VmbPayloadType_t"></span><span class="target" id="structVmbFrame_1aa525dff28c846426bbda92011b96739b"></span><a class="reference internal" href="#_CPPv416VmbPayloadType_t" title="VmbPayloadType_t"><span class="n"><span class="pre">VmbPayloadType_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">payloadType</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame11payloadTypeE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The type of payload. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N8VmbFrame16chunkDataPresentE">
+<span id="_CPPv3N8VmbFrame16chunkDataPresentE"></span><span id="_CPPv2N8VmbFrame16chunkDataPresentE"></span><span id="VmbFrame::chunkDataPresent__VmbBool_t"></span><span class="target" id="structVmbFrame_1a6af5700e735a429d74439d166b079a3e"></span><a class="reference internal" href="#_CPPv49VmbBool_t" title="VmbBool_t"><span class="n"><span class="pre">VmbBool_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">chunkDataPresent</span></span></span><a class="headerlink" href="#_CPPv4N8VmbFrame16chunkDataPresentE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>True if the transport layer reported chunk data to be present in the buffer. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="cpp struct">
+<dt class="sig sig-object cpp" id="_CPPv425VmbFeaturePersistSettings">
+<span id="_CPPv325VmbFeaturePersistSettings"></span><span id="_CPPv225VmbFeaturePersistSettings"></span><span id="VmbFeaturePersistSettings"></span><span class="target" id="structVmbFeaturePersistSettings"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistSettings</span></span></span><a class="headerlink" href="#_CPPv425VmbFeaturePersistSettings" title="Permalink to this definition"></a><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Parameters determining the operation mode of VmbSettingsSave and VmbSettingsLoad. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-in">In</p>
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbFeaturePersistSettings11persistTypeE">
+<span id="_CPPv3N25VmbFeaturePersistSettings11persistTypeE"></span><span id="_CPPv2N25VmbFeaturePersistSettings11persistTypeE"></span><span id="VmbFeaturePersistSettings::persistType__VmbFeaturePersist_t"></span><span class="target" id="structVmbFeaturePersistSettings_1a69b37ca86fd7e5ba9ef89975385f39a0"></span><a class="reference internal" href="#_CPPv419VmbFeaturePersist_t" title="VmbFeaturePersist_t"><span class="n"><span class="pre">VmbFeaturePersist_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">persistType</span></span></span><a class="headerlink" href="#_CPPv4N25VmbFeaturePersistSettings11persistTypeE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type of features that are to be saved. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbFeaturePersistSettings18modulePersistFlagsE">
+<span id="_CPPv3N25VmbFeaturePersistSettings18modulePersistFlagsE"></span><span id="_CPPv2N25VmbFeaturePersistSettings18modulePersistFlagsE"></span><span id="VmbFeaturePersistSettings::modulePersistFlags__VmbModulePersistFlags_t"></span><span class="target" id="structVmbFeaturePersistSettings_1a9604b6c00134a362ec8de4927d1e07a3"></span><a class="reference internal" href="#_CPPv423VmbModulePersistFlags_t" title="VmbModulePersistFlags_t"><span class="n"><span class="pre">VmbModulePersistFlags_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">modulePersistFlags</span></span></span><a class="headerlink" href="#_CPPv4N25VmbFeaturePersistSettings18modulePersistFlagsE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Flags specifying the modules to persist/load. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbFeaturePersistSettings13maxIterationsE">
+<span id="_CPPv3N25VmbFeaturePersistSettings13maxIterationsE"></span><span id="_CPPv2N25VmbFeaturePersistSettings13maxIterationsE"></span><span id="VmbFeaturePersistSettings::maxIterations__VmbUint32_t"></span><span class="target" id="structVmbFeaturePersistSettings_1a29b31568a79c3f86e4c1814dd00f1f46"></span><a class="reference internal" href="#_CPPv411VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">maxIterations</span></span></span><a class="headerlink" href="#_CPPv4N25VmbFeaturePersistSettings13maxIterationsE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Number of iterations when loading settings. </p>
+</dd></dl>
+
+<dl class="cpp var">
+<dt class="sig sig-object cpp" id="_CPPv4N25VmbFeaturePersistSettings12loggingLevelE">
+<span id="_CPPv3N25VmbFeaturePersistSettings12loggingLevelE"></span><span id="_CPPv2N25VmbFeaturePersistSettings12loggingLevelE"></span><span id="VmbFeaturePersistSettings::loggingLevel__VmbLogLevel_t"></span><span class="target" id="structVmbFeaturePersistSettings_1aefd09a24146d872cf50dfaf4ef9fd2c2"></span><a class="reference internal" href="#_CPPv413VmbLogLevel_t" title="VmbLogLevel_t"><span class="n"><span class="pre">VmbLogLevel_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">loggingLevel</span></span></span><a class="headerlink" href="#_CPPv4N25VmbFeaturePersistSettings12loggingLevelE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Determines level of detail for load/save settings logging. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<p>Definition of macros for using the standard shared pointer (std::tr1) for VmbCPP. </p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>If your version of STL does not provide a shared pointer implementation please see UserSharedPointerDefines.h for information on how to use another shared pointer than std::shared_ptr. </p>
+</div>
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv46VmbCPP">
+<span id="_CPPv36VmbCPP"></span><span id="_CPPv26VmbCPP"></span><span id="VmbCPP"></span><span class="target" id="namespaceVmbCPP"></span><span class="k"><span class="pre">namespace</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbCPP</span></span></span><a class="headerlink" href="#_CPPv46VmbCPP" title="Permalink to this definition"></a><br /></dt>
+<dd><div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-typedefs">Typedefs</p>
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP16BasicLockablePtrE">
+<span id="_CPPv3N6VmbCPP16BasicLockablePtrE"></span><span id="_CPPv2N6VmbCPP16BasicLockablePtrE"></span><span class="target" id="SharedPointerDefines_8h_1a84ea2bf06becd0a0a36c50c5fd62c352"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">BasicLockablePtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">BasicLockable</span></span><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP16BasicLockablePtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a BasicLockable. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9CameraPtrE">
+<span id="_CPPv3N6VmbCPP9CameraPtrE"></span><span id="_CPPv2N6VmbCPP9CameraPtrE"></span><span class="target" id="SharedPointerDefines_8h_1a58c0f23522b2c11016ecf5983531c838"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">CameraPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP6CameraE" title="VmbCPP::Camera"><span class="n"><span class="pre">Camera</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9CameraPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a <a class="reference internal" href="#classVmbCPP_1_1Camera"><span class="std std-ref">Camera</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP10FeaturePtrE">
+<span id="_CPPv3N6VmbCPP10FeaturePtrE"></span><span id="_CPPv2N6VmbCPP10FeaturePtrE"></span><span class="target" id="SharedPointerDefines_8h_1ac35dccb23b5ffd7ddac0944eb445113c"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">FeaturePtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP7FeatureE" title="VmbCPP::Feature"><span class="n"><span class="pre">Feature</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP10FeaturePtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a <a class="reference internal" href="#classVmbCPP_1_1Feature"><span class="std std-ref">Feature</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP19FeatureContainerPtrE">
+<span id="_CPPv3N6VmbCPP19FeatureContainerPtrE"></span><span id="_CPPv2N6VmbCPP19FeatureContainerPtrE"></span><span class="target" id="SharedPointerDefines_8h_1a74a89a1841fb90e01e2a1f2fc08bc9cc"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">FeatureContainerPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP16FeatureContainerE" title="VmbCPP::FeatureContainer"><span class="n"><span class="pre">FeatureContainer</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP19FeatureContainerPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a <a class="reference internal" href="#classVmbCPP_1_1FeatureContainer"><span class="std std-ref">FeatureContainer</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP8FramePtrE">
+<span id="_CPPv3N6VmbCPP8FramePtrE"></span><span id="_CPPv2N6VmbCPP8FramePtrE"></span><span class="target" id="SharedPointerDefines_8h_1ada7b751a03b338244d0cb74311631979"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">FramePtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP5FrameE" title="VmbCPP::Frame"><span class="n"><span class="pre">Frame</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP8FramePtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a <a class="reference internal" href="#classVmbCPP_1_1Frame"><span class="std std-ref">Frame</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP15FrameHandlerPtrE">
+<span id="_CPPv3N6VmbCPP15FrameHandlerPtrE"></span><span id="_CPPv2N6VmbCPP15FrameHandlerPtrE"></span><span class="target" id="SharedPointerDefines_8h_1a41e14f3128c94861ed18528d5979c676"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">FrameHandlerPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">FrameHandler</span></span><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP15FrameHandlerPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a FrameHandler. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP17ICameraFactoryPtrE">
+<span id="_CPPv3N6VmbCPP17ICameraFactoryPtrE"></span><span id="_CPPv2N6VmbCPP17ICameraFactoryPtrE"></span><span class="target" id="SharedPointerDefines_8h_1a7c850319ceeaf570998341b73aa989ad"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ICameraFactoryPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">ICameraFactory</span></span><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP17ICameraFactoryPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a camera factory. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP22ICameraListObserverPtrE">
+<span id="_CPPv3N6VmbCPP22ICameraListObserverPtrE"></span><span id="_CPPv2N6VmbCPP22ICameraListObserverPtrE"></span><span class="target" id="SharedPointerDefines_8h_1a7f5e799715d4f562a1c6e691c88c84ea"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ICameraListObserverPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP19ICameraListObserverE" title="VmbCPP::ICameraListObserver"><span class="n"><span class="pre">ICameraListObserver</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP22ICameraListObserverPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a camera list observer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP19IFeatureObserverPtrE">
+<span id="_CPPv3N6VmbCPP19IFeatureObserverPtrE"></span><span id="_CPPv2N6VmbCPP19IFeatureObserverPtrE"></span><span class="target" id="SharedPointerDefines_8h_1ae0bf4d4abb0b57380ced48ce8c30df98"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">IFeatureObserverPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP16IFeatureObserverE" title="VmbCPP::IFeatureObserver"><span class="n"><span class="pre">IFeatureObserver</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP19IFeatureObserverPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a feature observer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP17IFrameObserverPtrE">
+<span id="_CPPv3N6VmbCPP17IFrameObserverPtrE"></span><span id="_CPPv2N6VmbCPP17IFrameObserverPtrE"></span><span class="target" id="SharedPointerDefines_8h_1a0fc6ed5d8415e70bc189adf0547cc586"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">IFrameObserverPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP14IFrameObserverE" title="VmbCPP::IFrameObserver"><span class="n"><span class="pre">IFrameObserver</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP17IFrameObserverPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a frame observer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP12InterfacePtrE">
+<span id="_CPPv3N6VmbCPP12InterfacePtrE"></span><span id="_CPPv2N6VmbCPP12InterfacePtrE"></span><span class="target" id="SharedPointerDefines_8h_1a7bf2a0f85e0b166ee461943240281c4b"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">InterfacePtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP9InterfaceE" title="VmbCPP::Interface"><span class="n"><span class="pre">Interface</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP12InterfacePtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to an <a class="reference internal" href="#classVmbCPP_1_1Interface"><span class="std std-ref">Interface</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP25IInterfaceListObserverPtrE">
+<span id="_CPPv3N6VmbCPP25IInterfaceListObserverPtrE"></span><span id="_CPPv2N6VmbCPP25IInterfaceListObserverPtrE"></span><span class="target" id="SharedPointerDefines_8h_1a7070e3196319d9a8332a3b2e56816d13"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">IInterfaceListObserverPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP22IInterfaceListObserverE" title="VmbCPP::IInterfaceListObserver"><span class="n"><span class="pre">IInterfaceListObserver</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP25IInterfaceListObserverPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to an interface list observer. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP14LocalDevicePtrE">
+<span id="_CPPv3N6VmbCPP14LocalDevicePtrE"></span><span id="_CPPv2N6VmbCPP14LocalDevicePtrE"></span><span class="target" id="SharedPointerDefines_8h_1ae9412603af6c43d71c5264857d73d376"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">LocalDevicePtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP11LocalDeviceE" title="VmbCPP::LocalDevice"><span class="n"><span class="pre">LocalDevice</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP14LocalDevicePtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a <a class="reference internal" href="#classVmbCPP_1_1LocalDevice"><span class="std std-ref">LocalDevice</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP8MutexPtrE">
+<span id="_CPPv3N6VmbCPP8MutexPtrE"></span><span id="_CPPv2N6VmbCPP8MutexPtrE"></span><span class="target" id="SharedPointerDefines_8h_1a3a5a63bb93a3ff8f8140ea00c3247bf8"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">MutexPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">Mutex</span></span><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP8MutexPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a Mutex. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP9StreamPtrE">
+<span id="_CPPv3N6VmbCPP9StreamPtrE"></span><span id="_CPPv2N6VmbCPP9StreamPtrE"></span><span class="target" id="SharedPointerDefines_8h_1a9199f2dc8fd93dc678b8b2facb09f976"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StreamPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP6StreamE" title="VmbCPP::Stream"><span class="n"><span class="pre">Stream</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP9StreamPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a <a class="reference internal" href="#classVmbCPP_1_1Stream"><span class="std std-ref">Stream</span></a>. </p>
+</dd></dl>
+
+<dl class="cpp type">
+<dt class="sig sig-object cpp" id="_CPPv4N6VmbCPP17TransportLayerPtrE">
+<span id="_CPPv3N6VmbCPP17TransportLayerPtrE"></span><span id="_CPPv2N6VmbCPP17TransportLayerPtrE"></span><span class="target" id="SharedPointerDefines_8h_1ace4ab9518695f58e0abc8acf92d8ea10"></span><span class="k"><span class="pre">using</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">TransportLayerPtr</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">SharedPointer</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4N6VmbCPP14TransportLayerE" title="VmbCPP::TransportLayer"><span class="n"><span class="pre">TransportLayer</span></span></a><span class="p"><span class="pre">&gt;</span></span><a class="headerlink" href="#_CPPv4N6VmbCPP17TransportLayerPtrE" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An alias for a shared pointer to a <a class="reference internal" href="#classVmbCPP_1_1TransportLayer"><span class="std std-ref">TransportLayer</span></a>. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="index.html" class="btn btn-neutral float-left" title="VmbCPP API Function Reference" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/genindex.html b/VimbaX/doc/VmbCPP_Function_Reference/genindex.html
new file mode 100644
index 0000000000000000000000000000000000000000..79d915adfaa4bb7247fa248f89e7a6053a2a0810
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/genindex.html
@@ -0,0 +1,1089 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Index &mdash; VmbCPP 1.0.2 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="#" />
+    <link rel="search" title="Search" href="search.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> VmbCPP
+          </a>
+              <div class="version">
+                1.0.2
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIReference.html">VmbCPP C++ API Function Reference</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">VmbCPP</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Index</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ <a href="#V"><strong>V</strong></a>
+ 
+</div>
+<h2 id="V">V</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cppAPIReference.html#c.VMB_FILE_PATH_LITERAL">VMB_FILE_PATH_LITERAL (C macro)</a>
+</li>
+      <li><a href="cppAPIReference.html#c.VMB_PATH_SEPARATOR_CHAR">VMB_PATH_SEPARATOR_CHAR (C macro)</a>
+</li>
+      <li><a href="cppAPIReference.html#c.VMB_PATH_SEPARATOR_STRING">VMB_PATH_SEPARATOR_STRING (C macro)</a>
+</li>
+      <li><a href="cppAPIReference.html#c.VMB_SFNC_NAMESPACE_CUSTOM">VMB_SFNC_NAMESPACE_CUSTOM (C macro)</a>
+</li>
+      <li><a href="cppAPIReference.html#c.VMB_SFNC_NAMESPACE_STANDARD">VMB_SFNC_NAMESPACE_STANDARD (C macro)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv415VmbAccessMode_t">VmbAccessMode_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv417VmbAccessModeType">VmbAccessModeType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv417VmbAccessModeType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbAccessModeType22VmbAccessModeExclusiveE">VmbAccessModeType::VmbAccessModeExclusive (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbAccessModeType17VmbAccessModeFullE">VmbAccessModeType::VmbAccessModeFull (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbAccessModeType17VmbAccessModeNoneE">VmbAccessModeType::VmbAccessModeNone (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbAccessModeType17VmbAccessModeReadE">VmbAccessModeType::VmbAccessModeRead (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbAccessModeType20VmbAccessModeUnknownE">VmbAccessModeType::VmbAccessModeUnknown (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv49VmbBool_t">VmbBool_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv410VmbBoolVal">VmbBoolVal (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv410VmbBoolVal">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N10VmbBoolVal12VmbBoolFalseE">VmbBoolVal::VmbBoolFalse (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N10VmbBoolVal11VmbBoolTrueE">VmbBoolVal::VmbBoolTrue (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv413VmbCameraInfo">VmbCameraInfo (C++ struct)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo16cameraIdExtendedE">VmbCameraInfo::cameraIdExtended (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo14cameraIdStringE">VmbCameraInfo::cameraIdString (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo10cameraNameE">VmbCameraInfo::cameraName (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo15interfaceHandleE">VmbCameraInfo::interfaceHandle (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo17localDeviceHandleE">VmbCameraInfo::localDeviceHandle (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo9modelNameE">VmbCameraInfo::modelName (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo15permittedAccessE">VmbCameraInfo::permittedAccess (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo12serialStringE">VmbCameraInfo::serialString (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo11streamCountE">VmbCameraInfo::streamCount (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo13streamHandlesE">VmbCameraInfo::streamHandles (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N13VmbCameraInfo20transportLayerHandleE">VmbCameraInfo::transportLayerHandle (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv415VmbCameraInfo_t">VmbCameraInfo_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv46VmbCPP">VmbCPP (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16BasicLockablePtrE">VmbCPP::BasicLockablePtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6CameraE">VmbCPP::Camera (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_t19FrameAllocationMode">VmbCPP::Camera::AcquireMultipleImages (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_tR11VmbUint32_t19FrameAllocationMode">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6Camera6CameraERK15VmbCameraInfo_tRK12InterfacePtr">VmbCPP::Camera::Camera (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP6Camera6CameraERK6Camera">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP6Camera13GetExtendedIDERNSt6stringE">VmbCPP::Camera::GetExtendedID (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP6Camera5GetIDERNSt6stringE">VmbCPP::Camera::GetID (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP6Camera14GetInterfaceIDERNSt6stringE">VmbCPP::Camera::GetInterfaceID (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP6Camera8GetModelERNSt6stringE">VmbCPP::Camera::GetModel (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP6Camera7GetNameERNSt6stringE">VmbCPP::Camera::GetName (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP6Camera15GetSerialNumberERNSt6stringE">VmbCPP::Camera::GetSerialNumber (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6Camera10GetStreamsER15StreamPtrVector">VmbCPP::Camera::GetStreams (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6CameraaSERK6Camera">VmbCPP::Camera::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVector">VmbCPP::Camera::ReadMemory (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVectorR11VmbUint32_t">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVector">VmbCPP::Camera::WriteMemory (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVectorR11VmbUint32_t">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6CameraD0Ev">VmbCPP::Camera::~Camera (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9CameraPtrE">VmbCPP::CameraPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP7FeatureE">VmbCPP::Feature (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP7Feature7FeatureERK7Feature">VmbCPP::Feature::Feature (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP7Feature7FeatureEv">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature11GetCategoryERNSt6stringE">VmbCPP::Feature::GetCategory (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature14GetDescriptionERNSt6stringE">VmbCPP::Feature::GetDescription (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature14GetDisplayNameERNSt6stringE">VmbCPP::Feature::GetDisplayName (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP7Feature10GetEntriesER15EnumEntryVector">VmbCPP::Feature::GetEntries (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature7GetNameERNSt6stringE">VmbCPP::Feature::GetName (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature17GetRepresentationERNSt6stringE">VmbCPP::Feature::GetRepresentation (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP7Feature19GetSelectedFeaturesER16FeaturePtrVector">VmbCPP::Feature::GetSelectedFeatures (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature16GetSFNCNamespaceERNSt6stringE">VmbCPP::Feature::GetSFNCNamespace (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature10GetToolTipERNSt6stringE">VmbCPP::Feature::GetToolTip (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature7GetUnitERNSt6stringE">VmbCPP::Feature::GetUnit (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature16GetValidValueSetER11Int64Vector">VmbCPP::Feature::GetValidValueSet (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVector">VmbCPP::Feature::GetValue (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVectorR11VmbUint32_t">[1]</a>, <a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature8GetValueERNSt6stringE">[2]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP7Feature9GetValuesER11Int64Vector">VmbCPP::Feature::GetValues (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP7Feature9GetValuesER12StringVector">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP7Feature16IsValueAvailableENSt9nullptr_tERb">VmbCPP::Feature::IsValueAvailable (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP7FeatureaSERK7Feature">VmbCPP::Feature::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXaaNSt11is_integralI12IntegralTypeE5valueEntNSt7is_sameI12IntegralType10VmbInt64_tE5valueEE12VmbErrorTypeE4typeE12IntegralType">VmbCPP::Feature::SetValue (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXntNSt7is_sameIbN4impl20UnderlyingTypeHelperI8EnumTypeE4typeEE5valueEE12VmbErrorTypeE4typeE8EnumType">[1]</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP7Feature8SetValueENSt9nullptr_tE">[2]</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP7Feature8SetValueERK11UcharVector">[3]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16FeatureContainerE">VmbCPP::FeatureContainer (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16FeatureContainer16FeatureContainerERK16FeatureContainer">VmbCPP::FeatureContainer::FeatureContainer (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP16FeatureContainer16FeatureContainerEv">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16FeatureContainer16GetFeatureByNameENSt9nullptr_tER10FeaturePtr">VmbCPP::FeatureContainer::GetFeatureByName (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16FeatureContainer11GetFeaturesER16FeaturePtrVector">VmbCPP::FeatureContainer::GetFeatures (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP16FeatureContainer9GetHandleEv">VmbCPP::FeatureContainer::GetHandle (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16FeatureContaineraSERK16FeatureContainer">VmbCPP::FeatureContainer::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16FeatureContainerD0Ev">VmbCPP::FeatureContainer::~FeatureContainer (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP19FeatureContainerPtrE">VmbCPP::FeatureContainerPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP10FeaturePtrE">VmbCPP::FeaturePtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP5FrameE">VmbCPP::Frame (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP5Frame15AccessChunkDataE23ChunkDataAccessFunction">VmbCPP::Frame::AccessChunkData (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP5Frame23ChunkDataAccessFunctionE">VmbCPP::Frame::ChunkDataAccessFunction (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP5Frame5FrameE10VmbInt64_t19FrameAllocationMode11VmbUint32_t">VmbCPP::Frame::Frame (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP5Frame5FrameEP10VmbUchar_t10VmbInt64_t">[1]</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP5Frame5FrameER5Frame">[2]</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP5Frame5FrameEv">[3]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP5Frame11GetObserverER17IFrameObserverPtr">VmbCPP::Frame::GetObserver (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP5Frame4ImplE">VmbCPP::Frame::Impl (C++ struct)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP5FrameaSERK5Frame">VmbCPP::Frame::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP5FrameD0Ev">VmbCPP::Frame::~Frame (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP15FrameHandlerPtrE">VmbCPP::FrameHandlerPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP8FramePtrE">VmbCPP::FramePtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP17ICameraFactoryPtrE">VmbCPP::ICameraFactoryPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP19ICameraListObserverE">VmbCPP::ICameraListObserver (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP19ICameraListObserverD0Ev">VmbCPP::ICameraListObserver::~ICameraListObserver (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP22ICameraListObserverPtrE">VmbCPP::ICameraListObserverPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16ICapturingModuleE">VmbCPP::ICapturingModule (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16ICapturingModule16ICapturingModuleERK16ICapturingModule">VmbCPP::ICapturingModule::ICapturingModule (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16ICapturingModuleaSERK16ICapturingModule">VmbCPP::ICapturingModule::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16ICapturingModuleD0Ev">VmbCPP::ICapturingModule::~ICapturingModule (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16IFeatureObserverE">VmbCPP::IFeatureObserver (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP16IFeatureObserverD0Ev">VmbCPP::IFeatureObserver::~IFeatureObserver (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP19IFeatureObserverPtrE">VmbCPP::IFeatureObserverPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14IFrameObserverE">VmbCPP::IFrameObserver (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14IFrameObserver14IFrameObserverEv">VmbCPP::IFrameObserver::IFrameObserver (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14IFrameObserverD0Ev">VmbCPP::IFrameObserver::~IFrameObserver (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP17IFrameObserverPtrE">VmbCPP::IFrameObserverPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP22IInterfaceListObserverE">VmbCPP::IInterfaceListObserver (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP22IInterfaceListObserverD0Ev">VmbCPP::IInterfaceListObserver::~IInterfaceListObserver (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP25IInterfaceListObserverPtrE">VmbCPP::IInterfaceListObserverPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9InterfaceE">VmbCPP::Interface (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9Interface10GetCamerasER15CameraPtrVector">VmbCPP::Interface::GetCameras (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9Interface29GetCamerasByInterfaceFunctionE">VmbCPP::Interface::GetCamerasByInterfaceFunction (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP9Interface5GetIDERNSt6stringE">VmbCPP::Interface::GetID (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP9Interface7GetNameERNSt6stringE">VmbCPP::Interface::GetName (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9Interface9InterfaceERK18VmbInterfaceInfo_tRK17TransportLayerPtr29GetCamerasByInterfaceFunction">VmbCPP::Interface::Interface (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP9Interface9InterfaceERK9Interface">[1]</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP9Interface9InterfaceEv">[2]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9InterfaceaSERK9Interface">VmbCPP::Interface::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP12InterfacePtrE">VmbCPP::InterfacePtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP11LocalDeviceE">VmbCPP::LocalDevice (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP11LocalDevice11LocalDeviceE11VmbHandle_t">VmbCPP::LocalDevice::LocalDevice (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP11LocalDevice11LocalDeviceERK11LocalDevice">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP11LocalDeviceaSERK11LocalDevice">VmbCPP::LocalDevice::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14LocalDevicePtrE">VmbCPP::LocalDevicePtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP8MutexPtrE">VmbCPP::MutexPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP27PersistableFeatureContainerE">VmbCPP::PersistableFeatureContainer (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP27PersistableFeatureContainer12LoadSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t">VmbCPP::PersistableFeatureContainer::LoadSettings (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP27PersistableFeatureContaineraSERK27PersistableFeatureContainer">VmbCPP::PersistableFeatureContainer::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerERK27PersistableFeatureContainer">VmbCPP::PersistableFeatureContainer::PersistableFeatureContainer (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerEv">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP27PersistableFeatureContainer12SaveSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t">VmbCPP::PersistableFeatureContainer::SaveSettings (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6StreamE">VmbCPP::Stream (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6StreamaSERK6Stream">VmbCPP::Stream::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6Stream6StreamE11VmbHandle_tb">VmbCPP::Stream::Stream (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP6Stream6StreamERK6Stream">[1]</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP6Stream6StreamEv">[2]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP6StreamD0Ev">VmbCPP::Stream::~Stream (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9StreamPtrE">VmbCPP::StreamPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14TransportLayerE">VmbCPP::TransportLayer (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14TransportLayer10GetCamerasER15CameraPtrVector">VmbCPP::TransportLayer::GetCameras (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14TransportLayer22GetCamerasByTLFunctionE">VmbCPP::TransportLayer::GetCamerasByTLFunction (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP14TransportLayer5GetIDERNSt6stringE">VmbCPP::TransportLayer::GetID (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14TransportLayer13GetInterfacesER18InterfacePtrVector">VmbCPP::TransportLayer::GetInterfaces (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14TransportLayer25GetInterfacesByTLFunctionE">VmbCPP::TransportLayer::GetInterfacesByTLFunction (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP14TransportLayer12GetModelNameERNSt6stringE">VmbCPP::TransportLayer::GetModelName (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP14TransportLayer7GetNameERNSt6stringE">VmbCPP::TransportLayer::GetName (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP14TransportLayer7GetPathERNSt6stringE">VmbCPP::TransportLayer::GetPath (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP14TransportLayer9GetVendorERNSt6stringE">VmbCPP::TransportLayer::GetVendor (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP14TransportLayer10GetVersionERNSt6stringE">VmbCPP::TransportLayer::GetVersion (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14TransportLayeraSERK14TransportLayer">VmbCPP::TransportLayer::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK14TransportLayer">VmbCPP::TransportLayer::TransportLayer (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK23VmbTransportLayerInfo_t25GetInterfacesByTLFunction22GetCamerasByTLFunction">[1]</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP14TransportLayer14TransportLayerEv">[2]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP17TransportLayerPtrE">VmbCPP::TransportLayerPtr (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9VmbSystemE">VmbCPP::VmbSystem (C++ class)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4I0EN6VmbCPP9VmbSystem13GetCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr">VmbCPP::VmbSystem::GetCameraByID (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP9VmbSystem13GetCameraByIDENSt9nullptr_tER9CameraPtr">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP9VmbSystem20GetCameraPtrByHandleEK11VmbHandle_t">VmbCPP::VmbSystem::GetCameraPtrByHandle (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9VmbSystem10GetCamerasER15CameraPtrVector">VmbCPP::VmbSystem::GetCameras (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4I0EN6VmbCPP9VmbSystem16GetInterfaceByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR12InterfacePtr">VmbCPP::VmbSystem::GetInterfaceByID (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP9VmbSystem16GetInterfaceByIDENSt9nullptr_tER12InterfacePtr">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9VmbSystem13GetInterfacesER18InterfacePtrVector">VmbCPP::VmbSystem::GetInterfaces (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4NK6VmbCPP9VmbSystem9GetLoggerEv">VmbCPP::VmbSystem::GetLogger (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR17TransportLayerPtr">VmbCPP::VmbSystem::GetTransportLayerByID (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9nullptr_tER17TransportLayerPtr">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9VmbSystem18GetTransportLayersER23TransportLayerPtrVector">VmbCPP::VmbSystem::GetTransportLayers (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4I0EN6VmbCPP9VmbSystem14OpenCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr">VmbCPP::VmbSystem::OpenCameraByID (C++ function)</a>, <a href="cppAPIReference.html#_CPPv4N6VmbCPP9VmbSystem14OpenCameraByIDENSt9nullptr_tE17VmbAccessModeTypeR9CameraPtr">[1]</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9VmbSystemaSERK9VmbSystem">VmbCPP::VmbSystem::operator= (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N6VmbCPP9VmbSystem9VmbSystemERK9VmbSystem">VmbCPP::VmbSystem::VmbSystem (C++ function)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv410VmbError_t">VmbError_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv412VmbErrorType">VmbErrorType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv412VmbErrorType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType15VmbErrorAlreadyE">VmbErrorType::VmbErrorAlready (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType17VmbErrorAmbiguousE">VmbErrorType::VmbErrorAmbiguous (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType21VmbErrorApiNotStartedE">VmbErrorType::VmbErrorApiNotStarted (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType17VmbErrorBadHandleE">VmbErrorType::VmbErrorBadHandle (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType20VmbErrorBadParameterE">VmbErrorType::VmbErrorBadParameter (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType12VmbErrorBusyE">VmbErrorType::VmbErrorBusy (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType14VmbErrorCustomE">VmbErrorType::VmbErrorCustom (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType21VmbErrorDeviceNotOpenE">VmbErrorType::VmbErrorDeviceNotOpen (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType27VmbErrorFeaturesUnavailableE">VmbErrorType::VmbErrorFeaturesUnavailable (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType24VmbErrorGenTLUnspecifiedE">VmbErrorType::VmbErrorGenTLUnspecified (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType18VmbErrorIncompleteE">VmbErrorType::VmbErrorIncomplete (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType31VmbErrorInsufficientBufferCountE">VmbErrorType::VmbErrorInsufficientBufferCount (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType21VmbErrorInternalFaultE">VmbErrorType::VmbErrorInternalFault (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType13VmbErrorInUseE">VmbErrorType::VmbErrorInUse (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType21VmbErrorInvalidAccessE">VmbErrorType::VmbErrorInvalidAccess (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType22VmbErrorInvalidAddressE">VmbErrorType::VmbErrorInvalidAddress (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType19VmbErrorInvalidCallE">VmbErrorType::VmbErrorInvalidCall (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType20VmbErrorInvalidValueE">VmbErrorType::VmbErrorInvalidValue (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType10VmbErrorIOE">VmbErrorType::VmbErrorIO (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType16VmbErrorMoreDataE">VmbErrorType::VmbErrorMoreData (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType19VmbErrorNoChunkDataE">VmbErrorType::VmbErrorNoChunkData (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType14VmbErrorNoDataE">VmbErrorType::VmbErrorNoData (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType20VmbErrorNotAvailableE">VmbErrorType::VmbErrorNotAvailable (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType16VmbErrorNotFoundE">VmbErrorType::VmbErrorNotFound (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType22VmbErrorNotImplementedE">VmbErrorType::VmbErrorNotImplemented (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType22VmbErrorNotInitializedE">VmbErrorType::VmbErrorNotInitialized (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType12VmbErrorNoTLE">VmbErrorType::VmbErrorNoTL (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType20VmbErrorNotSupportedE">VmbErrorType::VmbErrorNotSupported (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType13VmbErrorOtherE">VmbErrorType::VmbErrorOther (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType24VmbErrorParsingChunkDataE">VmbErrorType::VmbErrorParsingChunkData (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType17VmbErrorResourcesE">VmbErrorType::VmbErrorResources (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType23VmbErrorRetriesExceededE">VmbErrorType::VmbErrorRetriesExceeded (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType18VmbErrorStructSizeE">VmbErrorType::VmbErrorStructSize (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType15VmbErrorSuccessE">VmbErrorType::VmbErrorSuccess (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType15VmbErrorTimeoutE">VmbErrorType::VmbErrorTimeout (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType18VmbErrorTLNotFoundE">VmbErrorType::VmbErrorTLNotFound (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType15VmbErrorUnknownE">VmbErrorType::VmbErrorUnknown (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType19VmbErrorUnspecifiedE">VmbErrorType::VmbErrorUnspecified (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType29VmbErrorUserCallbackExceptionE">VmbErrorType::VmbErrorUserCallbackException (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType31VmbErrorValidValueSetNotPresentE">VmbErrorType::VmbErrorValidValueSetNotPresent (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType17VmbErrorWrongTypeE">VmbErrorType::VmbErrorWrongType (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbErrorType11VmbErrorXmlE">VmbErrorType::VmbErrorXml (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv416VmbFeatureData_t">VmbFeatureData_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv418VmbFeatureDataType">VmbFeatureDataType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv418VmbFeatureDataType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFeatureDataType18VmbFeatureDataBoolE">VmbFeatureDataType::VmbFeatureDataBool (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFeatureDataType21VmbFeatureDataCommandE">VmbFeatureDataType::VmbFeatureDataCommand (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFeatureDataType18VmbFeatureDataEnumE">VmbFeatureDataType::VmbFeatureDataEnum (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFeatureDataType19VmbFeatureDataFloatE">VmbFeatureDataType::VmbFeatureDataFloat (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFeatureDataType17VmbFeatureDataIntE">VmbFeatureDataType::VmbFeatureDataInt (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFeatureDataType18VmbFeatureDataNoneE">VmbFeatureDataType::VmbFeatureDataNone (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFeatureDataType17VmbFeatureDataRawE">VmbFeatureDataType::VmbFeatureDataRaw (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFeatureDataType20VmbFeatureDataStringE">VmbFeatureDataType::VmbFeatureDataString (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFeatureDataType21VmbFeatureDataUnknownE">VmbFeatureDataType::VmbFeatureDataUnknown (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv419VmbFeatureEnumEntry">VmbFeatureEnumEntry (C++ struct)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureEnumEntry11descriptionE">VmbFeatureEnumEntry::description (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureEnumEntry11displayNameE">VmbFeatureEnumEntry::displayName (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureEnumEntry8intValueE">VmbFeatureEnumEntry::intValue (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureEnumEntry4nameE">VmbFeatureEnumEntry::name (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureEnumEntry13sfncNamespaceE">VmbFeatureEnumEntry::sfncNamespace (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureEnumEntry7tooltipE">VmbFeatureEnumEntry::tooltip (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureEnumEntry10visibilityE">VmbFeatureEnumEntry::visibility (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv421VmbFeatureEnumEntry_t">VmbFeatureEnumEntry_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv417VmbFeatureFlags_t">VmbFeatureFlags_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv419VmbFeatureFlagsType">VmbFeatureFlagsType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv419VmbFeatureFlagsType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureFlagsType26VmbFeatureFlagsModifyWriteE">VmbFeatureFlagsType::VmbFeatureFlagsModifyWrite (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureFlagsType19VmbFeatureFlagsNoneE">VmbFeatureFlagsType::VmbFeatureFlagsNone (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureFlagsType19VmbFeatureFlagsReadE">VmbFeatureFlagsType::VmbFeatureFlagsRead (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureFlagsType23VmbFeatureFlagsVolatileE">VmbFeatureFlagsType::VmbFeatureFlagsVolatile (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N19VmbFeatureFlagsType20VmbFeatureFlagsWriteE">VmbFeatureFlagsType::VmbFeatureFlagsWrite (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv414VmbFeatureInfo">VmbFeatureInfo (C++ struct)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo8categoryE">VmbFeatureInfo::category (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo11descriptionE">VmbFeatureInfo::description (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo11displayNameE">VmbFeatureInfo::displayName (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo15featureDataTypeE">VmbFeatureInfo::featureDataType (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo12featureFlagsE">VmbFeatureInfo::featureFlags (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo19hasSelectedFeaturesE">VmbFeatureInfo::hasSelectedFeatures (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo12isStreamableE">VmbFeatureInfo::isStreamable (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo4nameE">VmbFeatureInfo::name (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo11pollingTimeE">VmbFeatureInfo::pollingTime (C++ member)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo14representationE">VmbFeatureInfo::representation (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo13sfncNamespaceE">VmbFeatureInfo::sfncNamespace (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo7tooltipE">VmbFeatureInfo::tooltip (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo4unitE">VmbFeatureInfo::unit (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbFeatureInfo10visibilityE">VmbFeatureInfo::visibility (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv416VmbFeatureInfo_t">VmbFeatureInfo_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv419VmbFeaturePersist_t">VmbFeaturePersist_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv425VmbFeaturePersistSettings">VmbFeaturePersistSettings (C++ struct)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbFeaturePersistSettings12loggingLevelE">VmbFeaturePersistSettings::loggingLevel (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbFeaturePersistSettings13maxIterationsE">VmbFeaturePersistSettings::maxIterations (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbFeaturePersistSettings18modulePersistFlagsE">VmbFeaturePersistSettings::modulePersistFlags (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbFeaturePersistSettings11persistTypeE">VmbFeaturePersistSettings::persistType (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv427VmbFeaturePersistSettings_t">VmbFeaturePersistSettings_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv421VmbFeaturePersistType">VmbFeaturePersistType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv421VmbFeaturePersistType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbFeaturePersistType20VmbFeaturePersistAllE">VmbFeaturePersistType::VmbFeaturePersistAll (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbFeaturePersistType22VmbFeaturePersistNoLUTE">VmbFeaturePersistType::VmbFeaturePersistNoLUT (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbFeaturePersistType27VmbFeaturePersistStreamableE">VmbFeaturePersistType::VmbFeaturePersistStreamable (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv422VmbFeatureVisibility_t">VmbFeatureVisibility_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv424VmbFeatureVisibilityType">VmbFeatureVisibilityType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv424VmbFeatureVisibilityType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N24VmbFeatureVisibilityType28VmbFeatureVisibilityBeginnerE">VmbFeatureVisibilityType::VmbFeatureVisibilityBeginner (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N24VmbFeatureVisibilityType26VmbFeatureVisibilityExpertE">VmbFeatureVisibilityType::VmbFeatureVisibilityExpert (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N24VmbFeatureVisibilityType24VmbFeatureVisibilityGuruE">VmbFeatureVisibilityType::VmbFeatureVisibilityGuru (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N24VmbFeatureVisibilityType29VmbFeatureVisibilityInvisibleE">VmbFeatureVisibilityType::VmbFeatureVisibilityInvisible (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N24VmbFeatureVisibilityType27VmbFeatureVisibilityUnknownE">VmbFeatureVisibilityType::VmbFeatureVisibilityUnknown (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv417VmbFilePathChar_t">VmbFilePathChar_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv48VmbFrame">VmbFrame (C++ struct)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame6bufferE">VmbFrame::buffer (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame10bufferSizeE">VmbFrame::bufferSize (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame16chunkDataPresentE">VmbFrame::chunkDataPresent (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame7contextE">VmbFrame::context (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame7frameIDE">VmbFrame::frameID (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame6heightE">VmbFrame::height (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame9imageDataE">VmbFrame::imageData (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame7offsetXE">VmbFrame::offsetX (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame7offsetYE">VmbFrame::offsetY (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame11payloadTypeE">VmbFrame::payloadType (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame11pixelFormatE">VmbFrame::pixelFormat (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame12receiveFlagsE">VmbFrame::receiveFlags (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame13receiveStatusE">VmbFrame::receiveStatus (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame9timestampE">VmbFrame::timestamp (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N8VmbFrame5widthE">VmbFrame::width (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv410VmbFrame_t">VmbFrame_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv415VmbFrameFlags_t">VmbFrameFlags_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv417VmbFrameFlagsType">VmbFrameFlagsType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv417VmbFrameFlagsType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbFrameFlagsType29VmbFrameFlagsChunkDataPresentE">VmbFrameFlagsType::VmbFrameFlagsChunkDataPresent (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsDimensionE">VmbFrameFlagsType::VmbFrameFlagsDimension (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbFrameFlagsType20VmbFrameFlagsFrameIDE">VmbFrameFlagsType::VmbFrameFlagsFrameID (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsImageDataE">VmbFrameFlagsType::VmbFrameFlagsImageData (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbFrameFlagsType17VmbFrameFlagsNoneE">VmbFrameFlagsType::VmbFrameFlagsNone (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbFrameFlagsType19VmbFrameFlagsOffsetE">VmbFrameFlagsType::VmbFrameFlagsOffset (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbFrameFlagsType24VmbFrameFlagsPayloadTypeE">VmbFrameFlagsType::VmbFrameFlagsPayloadType (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsTimestampE">VmbFrameFlagsType::VmbFrameFlagsTimestamp (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv416VmbFrameStatus_t">VmbFrameStatus_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv418VmbFrameStatusType">VmbFrameStatusType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv418VmbFrameStatusType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFrameStatusType22VmbFrameStatusCompleteE">VmbFrameStatusType::VmbFrameStatusComplete (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFrameStatusType24VmbFrameStatusIncompleteE">VmbFrameStatusType::VmbFrameStatusIncomplete (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFrameStatusType21VmbFrameStatusInvalidE">VmbFrameStatusType::VmbFrameStatusInvalid (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbFrameStatusType22VmbFrameStatusTooSmallE">VmbFrameStatusType::VmbFrameStatusTooSmall (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv411VmbHandle_t">VmbHandle_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv419VmbImageDimension_t">VmbImageDimension_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv410VmbInt16_t">VmbInt16_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv410VmbInt32_t">VmbInt32_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv410VmbInt64_t">VmbInt64_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv49VmbInt8_t">VmbInt8_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv416VmbInterfaceInfo">VmbInterfaceInfo (C++ struct)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N16VmbInterfaceInfo15interfaceHandleE">VmbInterfaceInfo::interfaceHandle (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N16VmbInterfaceInfo17interfaceIdStringE">VmbInterfaceInfo::interfaceIdString (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N16VmbInterfaceInfo13interfaceNameE">VmbInterfaceInfo::interfaceName (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N16VmbInterfaceInfo13interfaceTypeE">VmbInterfaceInfo::interfaceType (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N16VmbInterfaceInfo20transportLayerHandleE">VmbInterfaceInfo::transportLayerHandle (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv418VmbInterfaceInfo_t">VmbInterfaceInfo_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv411VmbLogLevel">VmbLogLevel (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv411VmbLogLevel">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N11VmbLogLevel14VmbLogLevelAllE">VmbLogLevel::VmbLogLevelAll (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N11VmbLogLevel16VmbLogLevelDebugE">VmbLogLevel::VmbLogLevelDebug (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N11VmbLogLevel16VmbLogLevelErrorE">VmbLogLevel::VmbLogLevelError (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N11VmbLogLevel15VmbLogLevelNoneE">VmbLogLevel::VmbLogLevelNone (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N11VmbLogLevel16VmbLogLevelTraceE">VmbLogLevel::VmbLogLevelTrace (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N11VmbLogLevel15VmbLogLevelWarnE">VmbLogLevel::VmbLogLevelWarn (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv413VmbLogLevel_t">VmbLogLevel_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv423VmbModulePersistFlags_t">VmbModulePersistFlags_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv425VmbModulePersistFlagsType">VmbModulePersistFlagsType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv425VmbModulePersistFlagsType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbModulePersistFlagsType24VmbModulePersistFlagsAllE">VmbModulePersistFlagsType::VmbModulePersistFlagsAll (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbModulePersistFlagsType30VmbModulePersistFlagsInterfaceE">VmbModulePersistFlagsType::VmbModulePersistFlagsInterface (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbModulePersistFlagsType32VmbModulePersistFlagsLocalDeviceE">VmbModulePersistFlagsType::VmbModulePersistFlagsLocalDevice (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbModulePersistFlagsType25VmbModulePersistFlagsNoneE">VmbModulePersistFlagsType::VmbModulePersistFlagsNone (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbModulePersistFlagsType33VmbModulePersistFlagsRemoteDeviceE">VmbModulePersistFlagsType::VmbModulePersistFlagsRemoteDevice (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbModulePersistFlagsType28VmbModulePersistFlagsStreamsE">VmbModulePersistFlagsType::VmbModulePersistFlagsStreams (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N25VmbModulePersistFlagsType35VmbModulePersistFlagsTransportLayerE">VmbModulePersistFlagsType::VmbModulePersistFlagsTransportLayer (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv414VmbPayloadType">VmbPayloadType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv414VmbPayloadType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbPayloadType23VmbPayloadTypeChunkOnlyE">VmbPayloadType::VmbPayloadTypeChunkOnly (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbPayloadType28VmbPayloadTypeDeviceSpecificE">VmbPayloadType::VmbPayloadTypeDeviceSpecific (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbPayloadType18VmbPayloadTypeFileE">VmbPayloadType::VmbPayloadTypeFile (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbPayloadType19VmbPayloadTypeGenDCE">VmbPayloadType::VmbPayloadTypeGenDC (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbPayloadType18VmbPayloadTypeH264E">VmbPayloadType::VmbPayloadTypeH264 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbPayloadType19VmbPayloadTypeImageE">VmbPayloadType::VmbPayloadTypeImage (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbPayloadType18VmbPayloadTypeJPEGE">VmbPayloadType::VmbPayloadTypeJPEG (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbPayloadType17VmbPayloadTypeRawE">VmbPayloadType::VmbPayloadTypeRaw (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbPayloadType21VmbPayloadTypeUnknownE">VmbPayloadType::VmbPayloadTypeUnknown (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbPayloadType21VmbPayloadTypJPEG2000E">VmbPayloadType::VmbPayloadTypJPEG2000 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv416VmbPayloadType_t">VmbPayloadType_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv416VmbPixelFormat_t">VmbPixelFormat_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv418VmbPixelFormatType">VmbPixelFormatType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv418VmbPixelFormatType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatArgb8E">VmbPixelFormatType::VmbPixelFormatArgb8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG10E">VmbPixelFormatType::VmbPixelFormatBayerBG10 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerBG10pE">VmbPixelFormatType::VmbPixelFormatBayerBG10p (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG12E">VmbPixelFormatType::VmbPixelFormatBayerBG12 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerBG12pE">VmbPixelFormatType::VmbPixelFormatBayerBG12p (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerBG12PackedE">VmbPixelFormatType::VmbPixelFormatBayerBG12Packed (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG16E">VmbPixelFormatType::VmbPixelFormatBayerBG16 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerBG8E">VmbPixelFormatType::VmbPixelFormatBayerBG8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB10E">VmbPixelFormatType::VmbPixelFormatBayerGB10 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGB10pE">VmbPixelFormatType::VmbPixelFormatBayerGB10p (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB12E">VmbPixelFormatType::VmbPixelFormatBayerGB12 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGB12pE">VmbPixelFormatType::VmbPixelFormatBayerGB12p (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerGB12PackedE">VmbPixelFormatType::VmbPixelFormatBayerGB12Packed (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB16E">VmbPixelFormatType::VmbPixelFormatBayerGB16 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerGB8E">VmbPixelFormatType::VmbPixelFormatBayerGB8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR10E">VmbPixelFormatType::VmbPixelFormatBayerGR10 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGR10pE">VmbPixelFormatType::VmbPixelFormatBayerGR10p (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR12E">VmbPixelFormatType::VmbPixelFormatBayerGR12 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGR12pE">VmbPixelFormatType::VmbPixelFormatBayerGR12p (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerGR12PackedE">VmbPixelFormatType::VmbPixelFormatBayerGR12Packed (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR16E">VmbPixelFormatType::VmbPixelFormatBayerGR16 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerGR8E">VmbPixelFormatType::VmbPixelFormatBayerGR8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG10E">VmbPixelFormatType::VmbPixelFormatBayerRG10 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerRG10pE">VmbPixelFormatType::VmbPixelFormatBayerRG10p (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG12E">VmbPixelFormatType::VmbPixelFormatBayerRG12 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerRG12pE">VmbPixelFormatType::VmbPixelFormatBayerRG12p (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerRG12PackedE">VmbPixelFormatType::VmbPixelFormatBayerRG12Packed (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG16E">VmbPixelFormatType::VmbPixelFormatBayerRG16 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerRG8E">VmbPixelFormatType::VmbPixelFormatBayerRG8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr10E">VmbPixelFormatType::VmbPixelFormatBgr10 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr12E">VmbPixelFormatType::VmbPixelFormatBgr12 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr14E">VmbPixelFormatType::VmbPixelFormatBgr14 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr16E">VmbPixelFormatType::VmbPixelFormatBgr16 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType18VmbPixelFormatBgr8E">VmbPixelFormatType::VmbPixelFormatBgr8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra10E">VmbPixelFormatType::VmbPixelFormatBgra10 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra12E">VmbPixelFormatType::VmbPixelFormatBgra12 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra14E">VmbPixelFormatType::VmbPixelFormatBgra14 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra16E">VmbPixelFormatType::VmbPixelFormatBgra16 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgra8E">VmbPixelFormatType::VmbPixelFormatBgra8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType18VmbPixelFormatLastE">VmbPixelFormatType::VmbPixelFormatLast (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono10E">VmbPixelFormatType::VmbPixelFormatMono10 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType21VmbPixelFormatMono10pE">VmbPixelFormatType::VmbPixelFormatMono10p (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono12E">VmbPixelFormatType::VmbPixelFormatMono12 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType21VmbPixelFormatMono12pE">VmbPixelFormatType::VmbPixelFormatMono12p (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType26VmbPixelFormatMono12PackedE">VmbPixelFormatType::VmbPixelFormatMono12Packed (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono14E">VmbPixelFormatType::VmbPixelFormatMono14 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono16E">VmbPixelFormatType::VmbPixelFormatMono16 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatMono8E">VmbPixelFormatType::VmbPixelFormatMono8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb10E">VmbPixelFormatType::VmbPixelFormatRgb10 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb12E">VmbPixelFormatType::VmbPixelFormatRgb12 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb14E">VmbPixelFormatType::VmbPixelFormatRgb14 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb16E">VmbPixelFormatType::VmbPixelFormatRgb16 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType18VmbPixelFormatRgb8E">VmbPixelFormatType::VmbPixelFormatRgb8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba10E">VmbPixelFormatType::VmbPixelFormatRgba10 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba12E">VmbPixelFormatType::VmbPixelFormatRgba12 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba14E">VmbPixelFormatType::VmbPixelFormatRgba14 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba16E">VmbPixelFormatType::VmbPixelFormatRgba16 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgba8E">VmbPixelFormatType::VmbPixelFormatRgba8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType24VmbPixelFormatYCbCr411_8E">VmbPixelFormatType::VmbPixelFormatYCbCr411_8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType33VmbPixelFormatYCbCr411_8_CbYYCrYYE">VmbPixelFormatType::VmbPixelFormatYCbCr411_8_CbYYCrYY (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType24VmbPixelFormatYCbCr422_8E">VmbPixelFormatType::VmbPixelFormatYCbCr422_8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType31VmbPixelFormatYCbCr422_8_CbYCrYE">VmbPixelFormatType::VmbPixelFormatYCbCr422_8_CbYCrY (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType37VmbPixelFormatYCbCr601_411_8_CbYYCrYYE">VmbPixelFormatType::VmbPixelFormatYCbCr601_411_8_CbYYCrYY (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType28VmbPixelFormatYCbCr601_422_8E">VmbPixelFormatType::VmbPixelFormatYCbCr601_422_8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType35VmbPixelFormatYCbCr601_422_8_CbYCrYE">VmbPixelFormatType::VmbPixelFormatYCbCr601_422_8_CbYCrY (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType30VmbPixelFormatYCbCr601_8_CbYCrE">VmbPixelFormatType::VmbPixelFormatYCbCr601_8_CbYCr (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType37VmbPixelFormatYCbCr709_411_8_CbYYCrYYE">VmbPixelFormatType::VmbPixelFormatYCbCr709_411_8_CbYYCrYY (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType28VmbPixelFormatYCbCr709_422_8E">VmbPixelFormatType::VmbPixelFormatYCbCr709_422_8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType35VmbPixelFormatYCbCr709_422_8_CbYCrYE">VmbPixelFormatType::VmbPixelFormatYCbCr709_422_8_CbYCrY (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType30VmbPixelFormatYCbCr709_8_CbYCrE">VmbPixelFormatType::VmbPixelFormatYCbCr709_8_CbYCr (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatYCbCr8E">VmbPixelFormatType::VmbPixelFormatYCbCr8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType26VmbPixelFormatYCbCr8_CbYCrE">VmbPixelFormatType::VmbPixelFormatYCbCr8_CbYCr (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv411E">VmbPixelFormatType::VmbPixelFormatYuv411 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv422E">VmbPixelFormatType::VmbPixelFormatYuv422 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType22VmbPixelFormatYuv422_8E">VmbPixelFormatType::VmbPixelFormatYuv422_8 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv444E">VmbPixelFormatType::VmbPixelFormatYuv444 (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv418VmbPixelOccupyType">VmbPixelOccupyType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv418VmbPixelOccupyType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy10BitE">VmbPixelOccupyType::VmbPixelOccupy10Bit (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy12BitE">VmbPixelOccupyType::VmbPixelOccupy12Bit (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy14BitE">VmbPixelOccupyType::VmbPixelOccupy14Bit (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy16BitE">VmbPixelOccupyType::VmbPixelOccupy16Bit (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy24BitE">VmbPixelOccupyType::VmbPixelOccupy24Bit (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy32BitE">VmbPixelOccupyType::VmbPixelOccupy32Bit (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy48BitE">VmbPixelOccupyType::VmbPixelOccupy48Bit (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy64BitE">VmbPixelOccupyType::VmbPixelOccupy64Bit (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N18VmbPixelOccupyType18VmbPixelOccupy8BitE">VmbPixelOccupyType::VmbPixelOccupy8Bit (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv412VmbPixelType">VmbPixelType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv412VmbPixelType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbPixelType13VmbPixelColorE">VmbPixelType::VmbPixelColor (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N12VmbPixelType12VmbPixelMonoE">VmbPixelType::VmbPixelMono (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv421VmbTransportLayerInfo">VmbTransportLayerInfo (C++ struct)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerInfo20transportLayerHandleE">VmbTransportLayerInfo::transportLayerHandle (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerInfo22transportLayerIdStringE">VmbTransportLayerInfo::transportLayerIdString (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerInfo23transportLayerModelNameE">VmbTransportLayerInfo::transportLayerModelName (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerInfo18transportLayerNameE">VmbTransportLayerInfo::transportLayerName (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerInfo18transportLayerPathE">VmbTransportLayerInfo::transportLayerPath (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerInfo18transportLayerTypeE">VmbTransportLayerInfo::transportLayerType (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerInfo20transportLayerVendorE">VmbTransportLayerInfo::transportLayerVendor (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerInfo21transportLayerVersionE">VmbTransportLayerInfo::transportLayerVersion (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv423VmbTransportLayerInfo_t">VmbTransportLayerInfo_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv421VmbTransportLayerType">VmbTransportLayerType (C++ enum)</a>
+
+      <ul>
+        <li><a href="cppAPIReference.html#_CPPv421VmbTransportLayerType">(C++ type)</a>
+</li>
+      </ul></li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType23VmbTransportLayerTypeCLE">VmbTransportLayerType::VmbTransportLayerTypeCL (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType25VmbTransportLayerTypeCLHSE">VmbTransportLayerType::VmbTransportLayerTypeCLHS (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType27VmbTransportLayerTypeCustomE">VmbTransportLayerType::VmbTransportLayerTypeCustom (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeCXPE">VmbTransportLayerType::VmbTransportLayerTypeCXP (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType29VmbTransportLayerTypeEthernetE">VmbTransportLayerType::VmbTransportLayerTypeEthernet (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeGEVE">VmbTransportLayerType::VmbTransportLayerTypeGEV (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType25VmbTransportLayerTypeIIDCE">VmbTransportLayerType::VmbTransportLayerTypeIIDC (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType26VmbTransportLayerTypeMixedE">VmbTransportLayerType::VmbTransportLayerTypeMixed (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypePCIE">VmbTransportLayerType::VmbTransportLayerTypePCI (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeU3VE">VmbTransportLayerType::VmbTransportLayerTypeU3V (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType28VmbTransportLayerTypeUnknownE">VmbTransportLayerType::VmbTransportLayerTypeUnknown (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeUVCE">VmbTransportLayerType::VmbTransportLayerTypeUVC (C++ enumerator)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv423VmbTransportLayerType_t">VmbTransportLayerType_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv410VmbUchar_t">VmbUchar_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv411VmbUint16_t">VmbUint16_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv411VmbUint32_t">VmbUint32_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv411VmbUint64_t">VmbUint64_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv410VmbUint8_t">VmbUint8_t (C++ type)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv414VmbVersionInfo">VmbVersionInfo (C++ struct)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbVersionInfo5majorE">VmbVersionInfo::major (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbVersionInfo5minorE">VmbVersionInfo::minor (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv4N14VmbVersionInfo5patchE">VmbVersionInfo::patch (C++ member)</a>
+</li>
+      <li><a href="cppAPIReference.html#_CPPv416VmbVersionInfo_t">VmbVersionInfo_t (C++ type)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+
+
+           </div>
+          </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/index.html b/VimbaX/doc/VmbCPP_Function_Reference/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e9696de44ad17064f69520d74c3d03351abdc518
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/index.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>VmbCPP API Function Reference &mdash; VmbCPP 1.0.2 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="VmbCPP C++ API Function Reference" href="cppAPIReference.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="#" class="icon icon-home"> VmbCPP
+          </a>
+              <div class="version">
+                1.0.2
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIReference.html">VmbCPP C++ API Function Reference</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="#">VmbCPP</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="#" class="icon icon-home"></a> &raquo;</li>
+      <li>VmbCPP API Function Reference</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vmbcpp-api-function-reference">
+<h1>VmbCPP API Function Reference<a class="headerlink" href="#vmbcpp-api-function-reference" title="Permalink to this headline"></a></h1>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIReference.html">VmbCPP C++ API Function Reference</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="cppAPIReference.html#classes">Classes</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#vmbsystem">VmbSystem</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#transportlayer">TransportLayer</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#interface">Interface</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#camera">Camera</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#localdevice">LocalDevice</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#stream">Stream</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#frame">Frame</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#featurecontainer">FeatureContainer</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#persistablefeaturecontainer">PersistableFeatureContainer</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#feature">Feature</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="cppAPIReference.html#interfaces">Interfaces</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#icameralistobserver">ICameraListObserver</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#iinterfacelistobserver">IInterfaceListObserver</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#icapturingmodule">ICapturingModule</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#ifeatureobserver">IFeatureObserver</a></li>
+<li class="toctree-l3"><a class="reference internal" href="cppAPIReference.html#iframeobserver">IFrameObserver</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="cppAPIReference.html#common-types-constants">Common Types &amp; Constants</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</section>
+<section id="indices-and-tables">
+<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline"></a></h1>
+<ul class="simple">
+<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
+</ul>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="cppAPIReference.html" class="btn btn-neutral float-right" title="VmbCPP C++ API Function Reference" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/objects.inv b/VimbaX/doc/VmbCPP_Function_Reference/objects.inv
new file mode 100644
index 0000000000000000000000000000000000000000..9704a140c71f5020f1373ea60134c9fd812015b9
Binary files /dev/null and b/VimbaX/doc/VmbCPP_Function_Reference/objects.inv differ
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/search.html b/VimbaX/doc/VmbCPP_Function_Reference/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..8b2651f4ceeb6933670d9e867fbdcc8be23e48b1
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/search.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Search &mdash; VmbCPP 1.0.2 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+    
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="#" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> VmbCPP
+          </a>
+              <div class="version">
+                1.0.2
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="#" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul>
+<li class="toctree-l1"><a class="reference internal" href="cppAPIReference.html">VmbCPP C++ API Function Reference</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">VmbCPP</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Search</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <noscript>
+  <div id="fallback" class="admonition warning">
+    <p class="last">
+      Please activate JavaScript to enable the search functionality.
+    </p>
+  </div>
+  </noscript>
+
+  
+  <div id="search-results">
+  
+  </div>
+
+           </div>
+          </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+  <script>
+    jQuery(function() { Search.loadIndex("searchindex.js"); });
+  </script>
+  
+  <script id="searchindexloader"></script>
+   
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VmbCPP_Function_Reference/searchindex.js b/VimbaX/doc/VmbCPP_Function_Reference/searchindex.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b25db22e8fb5fcc6dda8841e428495f78dd2c78
--- /dev/null
+++ b/VimbaX/doc/VmbCPP_Function_Reference/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({docnames:["cppAPIReference","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["cppAPIReference.rst","index.rst"],objects:{"":[[0,0,1,"c.VMB_FILE_PATH_LITERAL","VMB_FILE_PATH_LITERAL"],[0,0,1,"c.VMB_PATH_SEPARATOR_CHAR","VMB_PATH_SEPARATOR_CHAR"],[0,0,1,"c.VMB_PATH_SEPARATOR_STRING","VMB_PATH_SEPARATOR_STRING"],[0,0,1,"c.VMB_SFNC_NAMESPACE_CUSTOM","VMB_SFNC_NAMESPACE_CUSTOM"],[0,0,1,"c.VMB_SFNC_NAMESPACE_STANDARD","VMB_SFNC_NAMESPACE_STANDARD"],[0,1,1,"_CPPv4N17VmbAccessModeType22VmbAccessModeExclusiveE","VmbAccessModeExclusive"],[0,1,1,"_CPPv4N17VmbAccessModeType17VmbAccessModeFullE","VmbAccessModeFull"],[0,1,1,"_CPPv4N17VmbAccessModeType17VmbAccessModeNoneE","VmbAccessModeNone"],[0,1,1,"_CPPv4N17VmbAccessModeType17VmbAccessModeReadE","VmbAccessModeRead"],[0,2,1,"_CPPv417VmbAccessModeType","VmbAccessModeType"],[0,3,1,"_CPPv417VmbAccessModeType","VmbAccessModeType"],[0,1,1,"_CPPv4N17VmbAccessModeType22VmbAccessModeExclusiveE","VmbAccessModeType::VmbAccessModeExclusive"],[0,1,1,"_CPPv4N17VmbAccessModeType17VmbAccessModeFullE","VmbAccessModeType::VmbAccessModeFull"],[0,1,1,"_CPPv4N17VmbAccessModeType17VmbAccessModeNoneE","VmbAccessModeType::VmbAccessModeNone"],[0,1,1,"_CPPv4N17VmbAccessModeType17VmbAccessModeReadE","VmbAccessModeType::VmbAccessModeRead"],[0,1,1,"_CPPv4N17VmbAccessModeType20VmbAccessModeUnknownE","VmbAccessModeType::VmbAccessModeUnknown"],[0,1,1,"_CPPv4N17VmbAccessModeType20VmbAccessModeUnknownE","VmbAccessModeUnknown"],[0,3,1,"_CPPv415VmbAccessMode_t","VmbAccessMode_t"],[0,1,1,"_CPPv4N10VmbBoolVal12VmbBoolFalseE","VmbBoolFalse"],[0,1,1,"_CPPv4N10VmbBoolVal11VmbBoolTrueE","VmbBoolTrue"],[0,2,1,"_CPPv410VmbBoolVal","VmbBoolVal"],[0,3,1,"_CPPv410VmbBoolVal","VmbBoolVal"],[0,1,1,"_CPPv4N10VmbBoolVal12VmbBoolFalseE","VmbBoolVal::VmbBoolFalse"],[0,1,1,"_CPPv4N10VmbBoolVal11VmbBoolTrueE","VmbBoolVal::VmbBoolTrue"],[0,3,1,"_CPPv49VmbBool_t","VmbBool_t"],[0,3,1,"_CPPv46VmbCPP","VmbCPP"],[0,3,1,"_CPPv4N6VmbCPP16BasicLockablePtrE","VmbCPP::BasicLockablePtr"],[0,4,1,"_CPPv4N6VmbCPP6CameraE","VmbCPP::Camera"],[0,5,1,"_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_t19FrameAllocationMode","VmbCPP::Camera::AcquireMultipleImages"],[0,5,1,"_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_tR11VmbUint32_t19FrameAllocationMode","VmbCPP::Camera::AcquireMultipleImages"],[0,6,1,"_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_t19FrameAllocationMode","VmbCPP::Camera::AcquireMultipleImages::allocationMode"],[0,6,1,"_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_tR11VmbUint32_t19FrameAllocationMode","VmbCPP::Camera::AcquireMultipleImages::allocationMode"],[0,6,1,"_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_t19FrameAllocationMode","VmbCPP::Camera::AcquireMultipleImages::frames"],[0,6,1,"_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_tR11VmbUint32_t19FrameAllocationMode","VmbCPP::Camera::AcquireMultipleImages::frames"],[0,6,1,"_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_tR11VmbUint32_t19FrameAllocationMode","VmbCPP::Camera::AcquireMultipleImages::numFramesCompleted"],[0,6,1,"_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_t19FrameAllocationMode","VmbCPP::Camera::AcquireMultipleImages::timeout"],[0,6,1,"_CPPv4N6VmbCPP6Camera21AcquireMultipleImagesER14FramePtrVector11VmbUint32_tR11VmbUint32_t19FrameAllocationMode","VmbCPP::Camera::AcquireMultipleImages::timeout"],[0,5,1,"_CPPv4N6VmbCPP6Camera6CameraERK15VmbCameraInfo_tRK12InterfacePtr","VmbCPP::Camera::Camera"],[0,5,1,"_CPPv4N6VmbCPP6Camera6CameraERK6Camera","VmbCPP::Camera::Camera"],[0,6,1,"_CPPv4N6VmbCPP6Camera6CameraERK15VmbCameraInfo_tRK12InterfacePtr","VmbCPP::Camera::Camera::cameraInfo"],[0,6,1,"_CPPv4N6VmbCPP6Camera6CameraERK15VmbCameraInfo_tRK12InterfacePtr","VmbCPP::Camera::Camera::pInterface"],[0,5,1,"_CPPv4NK6VmbCPP6Camera13GetExtendedIDERNSt6stringE","VmbCPP::Camera::GetExtendedID"],[0,6,1,"_CPPv4NK6VmbCPP6Camera13GetExtendedIDERNSt6stringE","VmbCPP::Camera::GetExtendedID::extendedID"],[0,5,1,"_CPPv4NK6VmbCPP6Camera5GetIDERNSt6stringE","VmbCPP::Camera::GetID"],[0,6,1,"_CPPv4NK6VmbCPP6Camera5GetIDERNSt6stringE","VmbCPP::Camera::GetID::cameraID"],[0,5,1,"_CPPv4NK6VmbCPP6Camera14GetInterfaceIDERNSt6stringE","VmbCPP::Camera::GetInterfaceID"],[0,6,1,"_CPPv4NK6VmbCPP6Camera14GetInterfaceIDERNSt6stringE","VmbCPP::Camera::GetInterfaceID::interfaceID"],[0,5,1,"_CPPv4NK6VmbCPP6Camera8GetModelERNSt6stringE","VmbCPP::Camera::GetModel"],[0,6,1,"_CPPv4NK6VmbCPP6Camera8GetModelERNSt6stringE","VmbCPP::Camera::GetModel::model"],[0,5,1,"_CPPv4NK6VmbCPP6Camera7GetNameERNSt6stringE","VmbCPP::Camera::GetName"],[0,6,1,"_CPPv4NK6VmbCPP6Camera7GetNameERNSt6stringE","VmbCPP::Camera::GetName::name"],[0,5,1,"_CPPv4NK6VmbCPP6Camera15GetSerialNumberERNSt6stringE","VmbCPP::Camera::GetSerialNumber"],[0,6,1,"_CPPv4NK6VmbCPP6Camera15GetSerialNumberERNSt6stringE","VmbCPP::Camera::GetSerialNumber::serialNumber"],[0,5,1,"_CPPv4N6VmbCPP6Camera10GetStreamsER15StreamPtrVector","VmbCPP::Camera::GetStreams"],[0,6,1,"_CPPv4N6VmbCPP6Camera10GetStreamsER15StreamPtrVector","VmbCPP::Camera::GetStreams::streams"],[0,5,1,"_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVector","VmbCPP::Camera::ReadMemory"],[0,5,1,"_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVectorR11VmbUint32_t","VmbCPP::Camera::ReadMemory"],[0,6,1,"_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVector","VmbCPP::Camera::ReadMemory::address"],[0,6,1,"_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVectorR11VmbUint32_t","VmbCPP::Camera::ReadMemory::address"],[0,6,1,"_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVector","VmbCPP::Camera::ReadMemory::buffer"],[0,6,1,"_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVectorR11VmbUint32_t","VmbCPP::Camera::ReadMemory::buffer"],[0,6,1,"_CPPv4NK6VmbCPP6Camera10ReadMemoryERK11VmbUint64_tR11UcharVectorR11VmbUint32_t","VmbCPP::Camera::ReadMemory::completeReads"],[0,5,1,"_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVector","VmbCPP::Camera::WriteMemory"],[0,5,1,"_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVectorR11VmbUint32_t","VmbCPP::Camera::WriteMemory"],[0,6,1,"_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVector","VmbCPP::Camera::WriteMemory::address"],[0,6,1,"_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVectorR11VmbUint32_t","VmbCPP::Camera::WriteMemory::address"],[0,6,1,"_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVector","VmbCPP::Camera::WriteMemory::buffer"],[0,6,1,"_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVectorR11VmbUint32_t","VmbCPP::Camera::WriteMemory::buffer"],[0,6,1,"_CPPv4N6VmbCPP6Camera11WriteMemoryERK11VmbUint64_tRK11UcharVectorR11VmbUint32_t","VmbCPP::Camera::WriteMemory::sizeComplete"],[0,5,1,"_CPPv4N6VmbCPP6CameraaSERK6Camera","VmbCPP::Camera::operator="],[0,5,1,"_CPPv4N6VmbCPP6CameraD0Ev","VmbCPP::Camera::~Camera"],[0,3,1,"_CPPv4N6VmbCPP9CameraPtrE","VmbCPP::CameraPtr"],[0,4,1,"_CPPv4N6VmbCPP7FeatureE","VmbCPP::Feature"],[0,5,1,"_CPPv4N6VmbCPP7Feature7FeatureERK7Feature","VmbCPP::Feature::Feature"],[0,5,1,"_CPPv4N6VmbCPP7Feature7FeatureEv","VmbCPP::Feature::Feature"],[0,5,1,"_CPPv4NK6VmbCPP7Feature11GetCategoryERNSt6stringE","VmbCPP::Feature::GetCategory"],[0,6,1,"_CPPv4NK6VmbCPP7Feature11GetCategoryERNSt6stringE","VmbCPP::Feature::GetCategory::category"],[0,5,1,"_CPPv4NK6VmbCPP7Feature14GetDescriptionERNSt6stringE","VmbCPP::Feature::GetDescription"],[0,6,1,"_CPPv4NK6VmbCPP7Feature14GetDescriptionERNSt6stringE","VmbCPP::Feature::GetDescription::description"],[0,5,1,"_CPPv4NK6VmbCPP7Feature14GetDisplayNameERNSt6stringE","VmbCPP::Feature::GetDisplayName"],[0,6,1,"_CPPv4NK6VmbCPP7Feature14GetDisplayNameERNSt6stringE","VmbCPP::Feature::GetDisplayName::displayName"],[0,5,1,"_CPPv4N6VmbCPP7Feature10GetEntriesER15EnumEntryVector","VmbCPP::Feature::GetEntries"],[0,6,1,"_CPPv4N6VmbCPP7Feature10GetEntriesER15EnumEntryVector","VmbCPP::Feature::GetEntries::entries"],[0,5,1,"_CPPv4NK6VmbCPP7Feature7GetNameERNSt6stringE","VmbCPP::Feature::GetName"],[0,6,1,"_CPPv4NK6VmbCPP7Feature7GetNameERNSt6stringE","VmbCPP::Feature::GetName::name"],[0,5,1,"_CPPv4NK6VmbCPP7Feature17GetRepresentationERNSt6stringE","VmbCPP::Feature::GetRepresentation"],[0,6,1,"_CPPv4NK6VmbCPP7Feature17GetRepresentationERNSt6stringE","VmbCPP::Feature::GetRepresentation::representation"],[0,5,1,"_CPPv4NK6VmbCPP7Feature16GetSFNCNamespaceERNSt6stringE","VmbCPP::Feature::GetSFNCNamespace"],[0,6,1,"_CPPv4NK6VmbCPP7Feature16GetSFNCNamespaceERNSt6stringE","VmbCPP::Feature::GetSFNCNamespace::sFNCNamespace"],[0,5,1,"_CPPv4N6VmbCPP7Feature19GetSelectedFeaturesER16FeaturePtrVector","VmbCPP::Feature::GetSelectedFeatures"],[0,6,1,"_CPPv4N6VmbCPP7Feature19GetSelectedFeaturesER16FeaturePtrVector","VmbCPP::Feature::GetSelectedFeatures::selectedFeatures"],[0,5,1,"_CPPv4NK6VmbCPP7Feature10GetToolTipERNSt6stringE","VmbCPP::Feature::GetToolTip"],[0,6,1,"_CPPv4NK6VmbCPP7Feature10GetToolTipERNSt6stringE","VmbCPP::Feature::GetToolTip::toolTip"],[0,5,1,"_CPPv4NK6VmbCPP7Feature7GetUnitERNSt6stringE","VmbCPP::Feature::GetUnit"],[0,6,1,"_CPPv4NK6VmbCPP7Feature7GetUnitERNSt6stringE","VmbCPP::Feature::GetUnit::unit"],[0,5,1,"_CPPv4NK6VmbCPP7Feature16GetValidValueSetER11Int64Vector","VmbCPP::Feature::GetValidValueSet"],[0,6,1,"_CPPv4NK6VmbCPP7Feature16GetValidValueSetER11Int64Vector","VmbCPP::Feature::GetValidValueSet::validValues"],[0,5,1,"_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVector","VmbCPP::Feature::GetValue"],[0,5,1,"_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVectorR11VmbUint32_t","VmbCPP::Feature::GetValue"],[0,5,1,"_CPPv4NK6VmbCPP7Feature8GetValueERNSt6stringE","VmbCPP::Feature::GetValue"],[0,6,1,"_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVectorR11VmbUint32_t","VmbCPP::Feature::GetValue::sizeFilled"],[0,6,1,"_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVector","VmbCPP::Feature::GetValue::value"],[0,6,1,"_CPPv4NK6VmbCPP7Feature8GetValueER11UcharVectorR11VmbUint32_t","VmbCPP::Feature::GetValue::value"],[0,6,1,"_CPPv4NK6VmbCPP7Feature8GetValueERNSt6stringE","VmbCPP::Feature::GetValue::value"],[0,5,1,"_CPPv4N6VmbCPP7Feature9GetValuesER11Int64Vector","VmbCPP::Feature::GetValues"],[0,5,1,"_CPPv4N6VmbCPP7Feature9GetValuesER12StringVector","VmbCPP::Feature::GetValues"],[0,6,1,"_CPPv4N6VmbCPP7Feature9GetValuesER11Int64Vector","VmbCPP::Feature::GetValues::values"],[0,6,1,"_CPPv4N6VmbCPP7Feature9GetValuesER12StringVector","VmbCPP::Feature::GetValues::values"],[0,5,1,"_CPPv4NK6VmbCPP7Feature16IsValueAvailableENSt9nullptr_tERb","VmbCPP::Feature::IsValueAvailable"],[0,5,1,"_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXaaNSt11is_integralI12IntegralTypeE5valueEntNSt7is_sameI12IntegralType10VmbInt64_tE5valueEE12VmbErrorTypeE4typeE12IntegralType","VmbCPP::Feature::SetValue"],[0,5,1,"_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXntNSt7is_sameIbN4impl20UnderlyingTypeHelperI8EnumTypeE4typeEE5valueEE12VmbErrorTypeE4typeE8EnumType","VmbCPP::Feature::SetValue"],[0,5,1,"_CPPv4N6VmbCPP7Feature8SetValueENSt9nullptr_tE","VmbCPP::Feature::SetValue"],[0,5,1,"_CPPv4N6VmbCPP7Feature8SetValueERK11UcharVector","VmbCPP::Feature::SetValue"],[0,7,1,"_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXntNSt7is_sameIbN4impl20UnderlyingTypeHelperI8EnumTypeE4typeEE5valueEE12VmbErrorTypeE4typeE8EnumType","VmbCPP::Feature::SetValue::EnumType"],[0,7,1,"_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXaaNSt11is_integralI12IntegralTypeE5valueEntNSt7is_sameI12IntegralType10VmbInt64_tE5valueEE12VmbErrorTypeE4typeE12IntegralType","VmbCPP::Feature::SetValue::IntegralType"],[0,6,1,"_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXaaNSt11is_integralI12IntegralTypeE5valueEntNSt7is_sameI12IntegralType10VmbInt64_tE5valueEE12VmbErrorTypeE4typeE12IntegralType","VmbCPP::Feature::SetValue::value"],[0,6,1,"_CPPv4I0EN6VmbCPP7Feature8SetValueENSt9enable_ifIXntNSt7is_sameIbN4impl20UnderlyingTypeHelperI8EnumTypeE4typeEE5valueEE12VmbErrorTypeE4typeE8EnumType","VmbCPP::Feature::SetValue::value"],[0,6,1,"_CPPv4N6VmbCPP7Feature8SetValueERK11UcharVector","VmbCPP::Feature::SetValue::value"],[0,5,1,"_CPPv4N6VmbCPP7FeatureaSERK7Feature","VmbCPP::Feature::operator="],[0,4,1,"_CPPv4N6VmbCPP16FeatureContainerE","VmbCPP::FeatureContainer"],[0,5,1,"_CPPv4N6VmbCPP16FeatureContainer16FeatureContainerERK16FeatureContainer","VmbCPP::FeatureContainer::FeatureContainer"],[0,5,1,"_CPPv4N6VmbCPP16FeatureContainer16FeatureContainerEv","VmbCPP::FeatureContainer::FeatureContainer"],[0,5,1,"_CPPv4N6VmbCPP16FeatureContainer16GetFeatureByNameENSt9nullptr_tER10FeaturePtr","VmbCPP::FeatureContainer::GetFeatureByName"],[0,5,1,"_CPPv4N6VmbCPP16FeatureContainer11GetFeaturesER16FeaturePtrVector","VmbCPP::FeatureContainer::GetFeatures"],[0,6,1,"_CPPv4N6VmbCPP16FeatureContainer11GetFeaturesER16FeaturePtrVector","VmbCPP::FeatureContainer::GetFeatures::features"],[0,5,1,"_CPPv4NK6VmbCPP16FeatureContainer9GetHandleEv","VmbCPP::FeatureContainer::GetHandle"],[0,5,1,"_CPPv4N6VmbCPP16FeatureContaineraSERK16FeatureContainer","VmbCPP::FeatureContainer::operator="],[0,5,1,"_CPPv4N6VmbCPP16FeatureContainerD0Ev","VmbCPP::FeatureContainer::~FeatureContainer"],[0,3,1,"_CPPv4N6VmbCPP19FeatureContainerPtrE","VmbCPP::FeatureContainerPtr"],[0,3,1,"_CPPv4N6VmbCPP10FeaturePtrE","VmbCPP::FeaturePtr"],[0,4,1,"_CPPv4N6VmbCPP5FrameE","VmbCPP::Frame"],[0,5,1,"_CPPv4N6VmbCPP5Frame15AccessChunkDataE23ChunkDataAccessFunction","VmbCPP::Frame::AccessChunkData"],[0,6,1,"_CPPv4N6VmbCPP5Frame15AccessChunkDataE23ChunkDataAccessFunction","VmbCPP::Frame::AccessChunkData::chunkAccessFunction"],[0,3,1,"_CPPv4N6VmbCPP5Frame23ChunkDataAccessFunctionE","VmbCPP::Frame::ChunkDataAccessFunction"],[0,5,1,"_CPPv4N6VmbCPP5Frame5FrameE10VmbInt64_t19FrameAllocationMode11VmbUint32_t","VmbCPP::Frame::Frame"],[0,5,1,"_CPPv4N6VmbCPP5Frame5FrameEP10VmbUchar_t10VmbInt64_t","VmbCPP::Frame::Frame"],[0,5,1,"_CPPv4N6VmbCPP5Frame5FrameER5Frame","VmbCPP::Frame::Frame"],[0,5,1,"_CPPv4N6VmbCPP5Frame5FrameEv","VmbCPP::Frame::Frame"],[0,6,1,"_CPPv4N6VmbCPP5Frame5FrameE10VmbInt64_t19FrameAllocationMode11VmbUint32_t","VmbCPP::Frame::Frame::allocationMode"],[0,6,1,"_CPPv4N6VmbCPP5Frame5FrameE10VmbInt64_t19FrameAllocationMode11VmbUint32_t","VmbCPP::Frame::Frame::bufferAlignment"],[0,6,1,"_CPPv4N6VmbCPP5Frame5FrameE10VmbInt64_t19FrameAllocationMode11VmbUint32_t","VmbCPP::Frame::Frame::bufferSize"],[0,6,1,"_CPPv4N6VmbCPP5Frame5FrameEP10VmbUchar_t10VmbInt64_t","VmbCPP::Frame::Frame::bufferSize"],[0,6,1,"_CPPv4N6VmbCPP5Frame5FrameEP10VmbUchar_t10VmbInt64_t","VmbCPP::Frame::Frame::pBuffer"],[0,5,1,"_CPPv4NK6VmbCPP5Frame11GetObserverER17IFrameObserverPtr","VmbCPP::Frame::GetObserver"],[0,6,1,"_CPPv4NK6VmbCPP5Frame11GetObserverER17IFrameObserverPtr","VmbCPP::Frame::GetObserver::observer"],[0,4,1,"_CPPv4N6VmbCPP5Frame4ImplE","VmbCPP::Frame::Impl"],[0,5,1,"_CPPv4N6VmbCPP5FrameaSERK5Frame","VmbCPP::Frame::operator="],[0,5,1,"_CPPv4N6VmbCPP5FrameD0Ev","VmbCPP::Frame::~Frame"],[0,3,1,"_CPPv4N6VmbCPP15FrameHandlerPtrE","VmbCPP::FrameHandlerPtr"],[0,3,1,"_CPPv4N6VmbCPP8FramePtrE","VmbCPP::FramePtr"],[0,3,1,"_CPPv4N6VmbCPP17ICameraFactoryPtrE","VmbCPP::ICameraFactoryPtr"],[0,4,1,"_CPPv4N6VmbCPP19ICameraListObserverE","VmbCPP::ICameraListObserver"],[0,5,1,"_CPPv4N6VmbCPP19ICameraListObserverD0Ev","VmbCPP::ICameraListObserver::~ICameraListObserver"],[0,3,1,"_CPPv4N6VmbCPP22ICameraListObserverPtrE","VmbCPP::ICameraListObserverPtr"],[0,4,1,"_CPPv4N6VmbCPP16ICapturingModuleE","VmbCPP::ICapturingModule"],[0,5,1,"_CPPv4N6VmbCPP16ICapturingModule16ICapturingModuleERK16ICapturingModule","VmbCPP::ICapturingModule::ICapturingModule"],[0,5,1,"_CPPv4N6VmbCPP16ICapturingModuleaSERK16ICapturingModule","VmbCPP::ICapturingModule::operator="],[0,5,1,"_CPPv4N6VmbCPP16ICapturingModuleD0Ev","VmbCPP::ICapturingModule::~ICapturingModule"],[0,4,1,"_CPPv4N6VmbCPP16IFeatureObserverE","VmbCPP::IFeatureObserver"],[0,5,1,"_CPPv4N6VmbCPP16IFeatureObserverD0Ev","VmbCPP::IFeatureObserver::~IFeatureObserver"],[0,3,1,"_CPPv4N6VmbCPP19IFeatureObserverPtrE","VmbCPP::IFeatureObserverPtr"],[0,4,1,"_CPPv4N6VmbCPP14IFrameObserverE","VmbCPP::IFrameObserver"],[0,5,1,"_CPPv4N6VmbCPP14IFrameObserver14IFrameObserverEv","VmbCPP::IFrameObserver::IFrameObserver"],[0,5,1,"_CPPv4N6VmbCPP14IFrameObserverD0Ev","VmbCPP::IFrameObserver::~IFrameObserver"],[0,3,1,"_CPPv4N6VmbCPP17IFrameObserverPtrE","VmbCPP::IFrameObserverPtr"],[0,4,1,"_CPPv4N6VmbCPP22IInterfaceListObserverE","VmbCPP::IInterfaceListObserver"],[0,5,1,"_CPPv4N6VmbCPP22IInterfaceListObserverD0Ev","VmbCPP::IInterfaceListObserver::~IInterfaceListObserver"],[0,3,1,"_CPPv4N6VmbCPP25IInterfaceListObserverPtrE","VmbCPP::IInterfaceListObserverPtr"],[0,4,1,"_CPPv4N6VmbCPP9InterfaceE","VmbCPP::Interface"],[0,5,1,"_CPPv4N6VmbCPP9Interface10GetCamerasER15CameraPtrVector","VmbCPP::Interface::GetCameras"],[0,6,1,"_CPPv4N6VmbCPP9Interface10GetCamerasER15CameraPtrVector","VmbCPP::Interface::GetCameras::cameras"],[0,3,1,"_CPPv4N6VmbCPP9Interface29GetCamerasByInterfaceFunctionE","VmbCPP::Interface::GetCamerasByInterfaceFunction"],[0,5,1,"_CPPv4NK6VmbCPP9Interface5GetIDERNSt6stringE","VmbCPP::Interface::GetID"],[0,6,1,"_CPPv4NK6VmbCPP9Interface5GetIDERNSt6stringE","VmbCPP::Interface::GetID::interfaceID"],[0,5,1,"_CPPv4NK6VmbCPP9Interface7GetNameERNSt6stringE","VmbCPP::Interface::GetName"],[0,6,1,"_CPPv4NK6VmbCPP9Interface7GetNameERNSt6stringE","VmbCPP::Interface::GetName::name"],[0,5,1,"_CPPv4N6VmbCPP9Interface9InterfaceERK18VmbInterfaceInfo_tRK17TransportLayerPtr29GetCamerasByInterfaceFunction","VmbCPP::Interface::Interface"],[0,5,1,"_CPPv4N6VmbCPP9Interface9InterfaceERK9Interface","VmbCPP::Interface::Interface"],[0,5,1,"_CPPv4N6VmbCPP9Interface9InterfaceEv","VmbCPP::Interface::Interface"],[0,6,1,"_CPPv4N6VmbCPP9Interface9InterfaceERK18VmbInterfaceInfo_tRK17TransportLayerPtr29GetCamerasByInterfaceFunction","VmbCPP::Interface::Interface::getCamerasByInterface"],[0,6,1,"_CPPv4N6VmbCPP9Interface9InterfaceERK18VmbInterfaceInfo_tRK17TransportLayerPtr29GetCamerasByInterfaceFunction","VmbCPP::Interface::Interface::interfaceInfo"],[0,6,1,"_CPPv4N6VmbCPP9Interface9InterfaceERK18VmbInterfaceInfo_tRK17TransportLayerPtr29GetCamerasByInterfaceFunction","VmbCPP::Interface::Interface::pTransportLayerPtr"],[0,5,1,"_CPPv4N6VmbCPP9InterfaceaSERK9Interface","VmbCPP::Interface::operator="],[0,3,1,"_CPPv4N6VmbCPP12InterfacePtrE","VmbCPP::InterfacePtr"],[0,4,1,"_CPPv4N6VmbCPP11LocalDeviceE","VmbCPP::LocalDevice"],[0,5,1,"_CPPv4N6VmbCPP11LocalDevice11LocalDeviceE11VmbHandle_t","VmbCPP::LocalDevice::LocalDevice"],[0,5,1,"_CPPv4N6VmbCPP11LocalDevice11LocalDeviceERK11LocalDevice","VmbCPP::LocalDevice::LocalDevice"],[0,6,1,"_CPPv4N6VmbCPP11LocalDevice11LocalDeviceE11VmbHandle_t","VmbCPP::LocalDevice::LocalDevice::handle"],[0,5,1,"_CPPv4N6VmbCPP11LocalDeviceaSERK11LocalDevice","VmbCPP::LocalDevice::operator="],[0,3,1,"_CPPv4N6VmbCPP14LocalDevicePtrE","VmbCPP::LocalDevicePtr"],[0,3,1,"_CPPv4N6VmbCPP8MutexPtrE","VmbCPP::MutexPtr"],[0,4,1,"_CPPv4N6VmbCPP27PersistableFeatureContainerE","VmbCPP::PersistableFeatureContainer"],[0,5,1,"_CPPv4NK6VmbCPP27PersistableFeatureContainer12LoadSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t","VmbCPP::PersistableFeatureContainer::LoadSettings"],[0,6,1,"_CPPv4NK6VmbCPP27PersistableFeatureContainer12LoadSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t","VmbCPP::PersistableFeatureContainer::LoadSettings::pSettings"],[0,5,1,"_CPPv4N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerERK27PersistableFeatureContainer","VmbCPP::PersistableFeatureContainer::PersistableFeatureContainer"],[0,5,1,"_CPPv4N6VmbCPP27PersistableFeatureContainer27PersistableFeatureContainerEv","VmbCPP::PersistableFeatureContainer::PersistableFeatureContainer"],[0,5,1,"_CPPv4NK6VmbCPP27PersistableFeatureContainer12SaveSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t","VmbCPP::PersistableFeatureContainer::SaveSettings"],[0,6,1,"_CPPv4NK6VmbCPP27PersistableFeatureContainer12SaveSettingsENSt9nullptr_tEP27VmbFeaturePersistSettings_t","VmbCPP::PersistableFeatureContainer::SaveSettings::pSettings"],[0,5,1,"_CPPv4N6VmbCPP27PersistableFeatureContaineraSERK27PersistableFeatureContainer","VmbCPP::PersistableFeatureContainer::operator="],[0,4,1,"_CPPv4N6VmbCPP6StreamE","VmbCPP::Stream"],[0,5,1,"_CPPv4N6VmbCPP6Stream6StreamE11VmbHandle_tb","VmbCPP::Stream::Stream"],[0,5,1,"_CPPv4N6VmbCPP6Stream6StreamERK6Stream","VmbCPP::Stream::Stream"],[0,5,1,"_CPPv4N6VmbCPP6Stream6StreamEv","VmbCPP::Stream::Stream"],[0,6,1,"_CPPv4N6VmbCPP6Stream6StreamE11VmbHandle_tb","VmbCPP::Stream::Stream::deviceIsOpen"],[0,6,1,"_CPPv4N6VmbCPP6Stream6StreamE11VmbHandle_tb","VmbCPP::Stream::Stream::streamHandle"],[0,5,1,"_CPPv4N6VmbCPP6StreamaSERK6Stream","VmbCPP::Stream::operator="],[0,5,1,"_CPPv4N6VmbCPP6StreamD0Ev","VmbCPP::Stream::~Stream"],[0,3,1,"_CPPv4N6VmbCPP9StreamPtrE","VmbCPP::StreamPtr"],[0,4,1,"_CPPv4N6VmbCPP14TransportLayerE","VmbCPP::TransportLayer"],[0,5,1,"_CPPv4N6VmbCPP14TransportLayer10GetCamerasER15CameraPtrVector","VmbCPP::TransportLayer::GetCameras"],[0,6,1,"_CPPv4N6VmbCPP14TransportLayer10GetCamerasER15CameraPtrVector","VmbCPP::TransportLayer::GetCameras::cameras"],[0,3,1,"_CPPv4N6VmbCPP14TransportLayer22GetCamerasByTLFunctionE","VmbCPP::TransportLayer::GetCamerasByTLFunction"],[0,5,1,"_CPPv4NK6VmbCPP14TransportLayer5GetIDERNSt6stringE","VmbCPP::TransportLayer::GetID"],[0,6,1,"_CPPv4NK6VmbCPP14TransportLayer5GetIDERNSt6stringE","VmbCPP::TransportLayer::GetID::transportLayerID"],[0,5,1,"_CPPv4N6VmbCPP14TransportLayer13GetInterfacesER18InterfacePtrVector","VmbCPP::TransportLayer::GetInterfaces"],[0,6,1,"_CPPv4N6VmbCPP14TransportLayer13GetInterfacesER18InterfacePtrVector","VmbCPP::TransportLayer::GetInterfaces::interfaces"],[0,3,1,"_CPPv4N6VmbCPP14TransportLayer25GetInterfacesByTLFunctionE","VmbCPP::TransportLayer::GetInterfacesByTLFunction"],[0,5,1,"_CPPv4NK6VmbCPP14TransportLayer12GetModelNameERNSt6stringE","VmbCPP::TransportLayer::GetModelName"],[0,6,1,"_CPPv4NK6VmbCPP14TransportLayer12GetModelNameERNSt6stringE","VmbCPP::TransportLayer::GetModelName::modelName"],[0,5,1,"_CPPv4NK6VmbCPP14TransportLayer7GetNameERNSt6stringE","VmbCPP::TransportLayer::GetName"],[0,6,1,"_CPPv4NK6VmbCPP14TransportLayer7GetNameERNSt6stringE","VmbCPP::TransportLayer::GetName::name"],[0,5,1,"_CPPv4NK6VmbCPP14TransportLayer7GetPathERNSt6stringE","VmbCPP::TransportLayer::GetPath"],[0,6,1,"_CPPv4NK6VmbCPP14TransportLayer7GetPathERNSt6stringE","VmbCPP::TransportLayer::GetPath::path"],[0,5,1,"_CPPv4NK6VmbCPP14TransportLayer9GetVendorERNSt6stringE","VmbCPP::TransportLayer::GetVendor"],[0,6,1,"_CPPv4NK6VmbCPP14TransportLayer9GetVendorERNSt6stringE","VmbCPP::TransportLayer::GetVendor::vendor"],[0,5,1,"_CPPv4NK6VmbCPP14TransportLayer10GetVersionERNSt6stringE","VmbCPP::TransportLayer::GetVersion"],[0,6,1,"_CPPv4NK6VmbCPP14TransportLayer10GetVersionERNSt6stringE","VmbCPP::TransportLayer::GetVersion::version"],[0,5,1,"_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK14TransportLayer","VmbCPP::TransportLayer::TransportLayer"],[0,5,1,"_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK23VmbTransportLayerInfo_t25GetInterfacesByTLFunction22GetCamerasByTLFunction","VmbCPP::TransportLayer::TransportLayer"],[0,5,1,"_CPPv4N6VmbCPP14TransportLayer14TransportLayerEv","VmbCPP::TransportLayer::TransportLayer"],[0,6,1,"_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK23VmbTransportLayerInfo_t25GetInterfacesByTLFunction22GetCamerasByTLFunction","VmbCPP::TransportLayer::TransportLayer::getCamerasByTL"],[0,6,1,"_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK23VmbTransportLayerInfo_t25GetInterfacesByTLFunction22GetCamerasByTLFunction","VmbCPP::TransportLayer::TransportLayer::getInterfacesByTL"],[0,6,1,"_CPPv4N6VmbCPP14TransportLayer14TransportLayerERK23VmbTransportLayerInfo_t25GetInterfacesByTLFunction22GetCamerasByTLFunction","VmbCPP::TransportLayer::TransportLayer::transportLayerInfo"],[0,5,1,"_CPPv4N6VmbCPP14TransportLayeraSERK14TransportLayer","VmbCPP::TransportLayer::operator="],[0,3,1,"_CPPv4N6VmbCPP17TransportLayerPtrE","VmbCPP::TransportLayerPtr"],[0,4,1,"_CPPv4N6VmbCPP9VmbSystemE","VmbCPP::VmbSystem"],[0,5,1,"_CPPv4I0EN6VmbCPP9VmbSystem13GetCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::GetCameraByID"],[0,5,1,"_CPPv4N6VmbCPP9VmbSystem13GetCameraByIDENSt9nullptr_tER9CameraPtr","VmbCPP::VmbSystem::GetCameraByID"],[0,7,1,"_CPPv4I0EN6VmbCPP9VmbSystem13GetCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::GetCameraByID::IdType"],[0,6,1,"_CPPv4I0EN6VmbCPP9VmbSystem13GetCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::GetCameraByID::eAccessMode"],[0,6,1,"_CPPv4I0EN6VmbCPP9VmbSystem13GetCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::GetCameraByID::id"],[0,6,1,"_CPPv4I0EN6VmbCPP9VmbSystem13GetCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::GetCameraByID::pCamera"],[0,5,1,"_CPPv4NK6VmbCPP9VmbSystem20GetCameraPtrByHandleEK11VmbHandle_t","VmbCPP::VmbSystem::GetCameraPtrByHandle"],[0,6,1,"_CPPv4NK6VmbCPP9VmbSystem20GetCameraPtrByHandleEK11VmbHandle_t","VmbCPP::VmbSystem::GetCameraPtrByHandle::handle"],[0,5,1,"_CPPv4N6VmbCPP9VmbSystem10GetCamerasER15CameraPtrVector","VmbCPP::VmbSystem::GetCameras"],[0,6,1,"_CPPv4N6VmbCPP9VmbSystem10GetCamerasER15CameraPtrVector","VmbCPP::VmbSystem::GetCameras::cameras"],[0,5,1,"_CPPv4I0EN6VmbCPP9VmbSystem16GetInterfaceByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR12InterfacePtr","VmbCPP::VmbSystem::GetInterfaceByID"],[0,5,1,"_CPPv4N6VmbCPP9VmbSystem16GetInterfaceByIDENSt9nullptr_tER12InterfacePtr","VmbCPP::VmbSystem::GetInterfaceByID"],[0,7,1,"_CPPv4I0EN6VmbCPP9VmbSystem16GetInterfaceByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR12InterfacePtr","VmbCPP::VmbSystem::GetInterfaceByID::T"],[0,6,1,"_CPPv4I0EN6VmbCPP9VmbSystem16GetInterfaceByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR12InterfacePtr","VmbCPP::VmbSystem::GetInterfaceByID::id"],[0,6,1,"_CPPv4I0EN6VmbCPP9VmbSystem16GetInterfaceByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR12InterfacePtr","VmbCPP::VmbSystem::GetInterfaceByID::pInterface"],[0,5,1,"_CPPv4N6VmbCPP9VmbSystem13GetInterfacesER18InterfacePtrVector","VmbCPP::VmbSystem::GetInterfaces"],[0,6,1,"_CPPv4N6VmbCPP9VmbSystem13GetInterfacesER18InterfacePtrVector","VmbCPP::VmbSystem::GetInterfaces::interfaces"],[0,5,1,"_CPPv4NK6VmbCPP9VmbSystem9GetLoggerEv","VmbCPP::VmbSystem::GetLogger"],[0,5,1,"_CPPv4I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR17TransportLayerPtr","VmbCPP::VmbSystem::GetTransportLayerByID"],[0,5,1,"_CPPv4N6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9nullptr_tER17TransportLayerPtr","VmbCPP::VmbSystem::GetTransportLayerByID"],[0,7,1,"_CPPv4I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR17TransportLayerPtr","VmbCPP::VmbSystem::GetTransportLayerByID::T"],[0,6,1,"_CPPv4I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR17TransportLayerPtr","VmbCPP::VmbSystem::GetTransportLayerByID::id"],[0,6,1,"_CPPv4I0EN6VmbCPP9VmbSystem21GetTransportLayerByIDENSt9enable_ifIN17CStringLikeTraitsI1TE13IsCStringLikeE12VmbErrorTypeE4typeERK1TR17TransportLayerPtr","VmbCPP::VmbSystem::GetTransportLayerByID::pTransportLayer"],[0,5,1,"_CPPv4N6VmbCPP9VmbSystem18GetTransportLayersER23TransportLayerPtrVector","VmbCPP::VmbSystem::GetTransportLayers"],[0,6,1,"_CPPv4N6VmbCPP9VmbSystem18GetTransportLayersER23TransportLayerPtrVector","VmbCPP::VmbSystem::GetTransportLayers::transportLayers"],[0,5,1,"_CPPv4I0EN6VmbCPP9VmbSystem14OpenCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::OpenCameraByID"],[0,5,1,"_CPPv4N6VmbCPP9VmbSystem14OpenCameraByIDENSt9nullptr_tE17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::OpenCameraByID"],[0,7,1,"_CPPv4I0EN6VmbCPP9VmbSystem14OpenCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::OpenCameraByID::IdType"],[0,6,1,"_CPPv4I0EN6VmbCPP9VmbSystem14OpenCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::OpenCameraByID::eAccessMode"],[0,6,1,"_CPPv4I0EN6VmbCPP9VmbSystem14OpenCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::OpenCameraByID::id"],[0,6,1,"_CPPv4I0EN6VmbCPP9VmbSystem14OpenCameraByIDENSt9enable_ifIN17CStringLikeTraitsI6IdTypeE13IsCStringLikeE12VmbErrorTypeE4typeERK6IdType17VmbAccessModeTypeR9CameraPtr","VmbCPP::VmbSystem::OpenCameraByID::pCamera"],[0,5,1,"_CPPv4N6VmbCPP9VmbSystem9VmbSystemERK9VmbSystem","VmbCPP::VmbSystem::VmbSystem"],[0,5,1,"_CPPv4N6VmbCPP9VmbSystemaSERK9VmbSystem","VmbCPP::VmbSystem::operator="],[0,6,1,"_CPPv4N6VmbCPP9VmbSystemaSERK9VmbSystem","VmbCPP::VmbSystem::operator=::system"],[0,4,1,"_CPPv413VmbCameraInfo","VmbCameraInfo"],[0,8,1,"_CPPv4N13VmbCameraInfo16cameraIdExtendedE","VmbCameraInfo::cameraIdExtended"],[0,8,1,"_CPPv4N13VmbCameraInfo14cameraIdStringE","VmbCameraInfo::cameraIdString"],[0,8,1,"_CPPv4N13VmbCameraInfo10cameraNameE","VmbCameraInfo::cameraName"],[0,8,1,"_CPPv4N13VmbCameraInfo15interfaceHandleE","VmbCameraInfo::interfaceHandle"],[0,8,1,"_CPPv4N13VmbCameraInfo17localDeviceHandleE","VmbCameraInfo::localDeviceHandle"],[0,8,1,"_CPPv4N13VmbCameraInfo9modelNameE","VmbCameraInfo::modelName"],[0,8,1,"_CPPv4N13VmbCameraInfo15permittedAccessE","VmbCameraInfo::permittedAccess"],[0,8,1,"_CPPv4N13VmbCameraInfo12serialStringE","VmbCameraInfo::serialString"],[0,8,1,"_CPPv4N13VmbCameraInfo11streamCountE","VmbCameraInfo::streamCount"],[0,8,1,"_CPPv4N13VmbCameraInfo13streamHandlesE","VmbCameraInfo::streamHandles"],[0,8,1,"_CPPv4N13VmbCameraInfo20transportLayerHandleE","VmbCameraInfo::transportLayerHandle"],[0,3,1,"_CPPv415VmbCameraInfo_t","VmbCameraInfo_t"],[0,1,1,"_CPPv4N12VmbErrorType15VmbErrorAlreadyE","VmbErrorAlready"],[0,1,1,"_CPPv4N12VmbErrorType17VmbErrorAmbiguousE","VmbErrorAmbiguous"],[0,1,1,"_CPPv4N12VmbErrorType21VmbErrorApiNotStartedE","VmbErrorApiNotStarted"],[0,1,1,"_CPPv4N12VmbErrorType17VmbErrorBadHandleE","VmbErrorBadHandle"],[0,1,1,"_CPPv4N12VmbErrorType20VmbErrorBadParameterE","VmbErrorBadParameter"],[0,1,1,"_CPPv4N12VmbErrorType12VmbErrorBusyE","VmbErrorBusy"],[0,1,1,"_CPPv4N12VmbErrorType14VmbErrorCustomE","VmbErrorCustom"],[0,1,1,"_CPPv4N12VmbErrorType21VmbErrorDeviceNotOpenE","VmbErrorDeviceNotOpen"],[0,1,1,"_CPPv4N12VmbErrorType27VmbErrorFeaturesUnavailableE","VmbErrorFeaturesUnavailable"],[0,1,1,"_CPPv4N12VmbErrorType24VmbErrorGenTLUnspecifiedE","VmbErrorGenTLUnspecified"],[0,1,1,"_CPPv4N12VmbErrorType10VmbErrorIOE","VmbErrorIO"],[0,1,1,"_CPPv4N12VmbErrorType13VmbErrorInUseE","VmbErrorInUse"],[0,1,1,"_CPPv4N12VmbErrorType18VmbErrorIncompleteE","VmbErrorIncomplete"],[0,1,1,"_CPPv4N12VmbErrorType31VmbErrorInsufficientBufferCountE","VmbErrorInsufficientBufferCount"],[0,1,1,"_CPPv4N12VmbErrorType21VmbErrorInternalFaultE","VmbErrorInternalFault"],[0,1,1,"_CPPv4N12VmbErrorType21VmbErrorInvalidAccessE","VmbErrorInvalidAccess"],[0,1,1,"_CPPv4N12VmbErrorType22VmbErrorInvalidAddressE","VmbErrorInvalidAddress"],[0,1,1,"_CPPv4N12VmbErrorType19VmbErrorInvalidCallE","VmbErrorInvalidCall"],[0,1,1,"_CPPv4N12VmbErrorType20VmbErrorInvalidValueE","VmbErrorInvalidValue"],[0,1,1,"_CPPv4N12VmbErrorType16VmbErrorMoreDataE","VmbErrorMoreData"],[0,1,1,"_CPPv4N12VmbErrorType19VmbErrorNoChunkDataE","VmbErrorNoChunkData"],[0,1,1,"_CPPv4N12VmbErrorType14VmbErrorNoDataE","VmbErrorNoData"],[0,1,1,"_CPPv4N12VmbErrorType12VmbErrorNoTLE","VmbErrorNoTL"],[0,1,1,"_CPPv4N12VmbErrorType20VmbErrorNotAvailableE","VmbErrorNotAvailable"],[0,1,1,"_CPPv4N12VmbErrorType16VmbErrorNotFoundE","VmbErrorNotFound"],[0,1,1,"_CPPv4N12VmbErrorType22VmbErrorNotImplementedE","VmbErrorNotImplemented"],[0,1,1,"_CPPv4N12VmbErrorType22VmbErrorNotInitializedE","VmbErrorNotInitialized"],[0,1,1,"_CPPv4N12VmbErrorType20VmbErrorNotSupportedE","VmbErrorNotSupported"],[0,1,1,"_CPPv4N12VmbErrorType13VmbErrorOtherE","VmbErrorOther"],[0,1,1,"_CPPv4N12VmbErrorType24VmbErrorParsingChunkDataE","VmbErrorParsingChunkData"],[0,1,1,"_CPPv4N12VmbErrorType17VmbErrorResourcesE","VmbErrorResources"],[0,1,1,"_CPPv4N12VmbErrorType23VmbErrorRetriesExceededE","VmbErrorRetriesExceeded"],[0,1,1,"_CPPv4N12VmbErrorType18VmbErrorStructSizeE","VmbErrorStructSize"],[0,1,1,"_CPPv4N12VmbErrorType15VmbErrorSuccessE","VmbErrorSuccess"],[0,1,1,"_CPPv4N12VmbErrorType18VmbErrorTLNotFoundE","VmbErrorTLNotFound"],[0,1,1,"_CPPv4N12VmbErrorType15VmbErrorTimeoutE","VmbErrorTimeout"],[0,2,1,"_CPPv412VmbErrorType","VmbErrorType"],[0,3,1,"_CPPv412VmbErrorType","VmbErrorType"],[0,1,1,"_CPPv4N12VmbErrorType15VmbErrorAlreadyE","VmbErrorType::VmbErrorAlready"],[0,1,1,"_CPPv4N12VmbErrorType17VmbErrorAmbiguousE","VmbErrorType::VmbErrorAmbiguous"],[0,1,1,"_CPPv4N12VmbErrorType21VmbErrorApiNotStartedE","VmbErrorType::VmbErrorApiNotStarted"],[0,1,1,"_CPPv4N12VmbErrorType17VmbErrorBadHandleE","VmbErrorType::VmbErrorBadHandle"],[0,1,1,"_CPPv4N12VmbErrorType20VmbErrorBadParameterE","VmbErrorType::VmbErrorBadParameter"],[0,1,1,"_CPPv4N12VmbErrorType12VmbErrorBusyE","VmbErrorType::VmbErrorBusy"],[0,1,1,"_CPPv4N12VmbErrorType14VmbErrorCustomE","VmbErrorType::VmbErrorCustom"],[0,1,1,"_CPPv4N12VmbErrorType21VmbErrorDeviceNotOpenE","VmbErrorType::VmbErrorDeviceNotOpen"],[0,1,1,"_CPPv4N12VmbErrorType27VmbErrorFeaturesUnavailableE","VmbErrorType::VmbErrorFeaturesUnavailable"],[0,1,1,"_CPPv4N12VmbErrorType24VmbErrorGenTLUnspecifiedE","VmbErrorType::VmbErrorGenTLUnspecified"],[0,1,1,"_CPPv4N12VmbErrorType10VmbErrorIOE","VmbErrorType::VmbErrorIO"],[0,1,1,"_CPPv4N12VmbErrorType13VmbErrorInUseE","VmbErrorType::VmbErrorInUse"],[0,1,1,"_CPPv4N12VmbErrorType18VmbErrorIncompleteE","VmbErrorType::VmbErrorIncomplete"],[0,1,1,"_CPPv4N12VmbErrorType31VmbErrorInsufficientBufferCountE","VmbErrorType::VmbErrorInsufficientBufferCount"],[0,1,1,"_CPPv4N12VmbErrorType21VmbErrorInternalFaultE","VmbErrorType::VmbErrorInternalFault"],[0,1,1,"_CPPv4N12VmbErrorType21VmbErrorInvalidAccessE","VmbErrorType::VmbErrorInvalidAccess"],[0,1,1,"_CPPv4N12VmbErrorType22VmbErrorInvalidAddressE","VmbErrorType::VmbErrorInvalidAddress"],[0,1,1,"_CPPv4N12VmbErrorType19VmbErrorInvalidCallE","VmbErrorType::VmbErrorInvalidCall"],[0,1,1,"_CPPv4N12VmbErrorType20VmbErrorInvalidValueE","VmbErrorType::VmbErrorInvalidValue"],[0,1,1,"_CPPv4N12VmbErrorType16VmbErrorMoreDataE","VmbErrorType::VmbErrorMoreData"],[0,1,1,"_CPPv4N12VmbErrorType19VmbErrorNoChunkDataE","VmbErrorType::VmbErrorNoChunkData"],[0,1,1,"_CPPv4N12VmbErrorType14VmbErrorNoDataE","VmbErrorType::VmbErrorNoData"],[0,1,1,"_CPPv4N12VmbErrorType12VmbErrorNoTLE","VmbErrorType::VmbErrorNoTL"],[0,1,1,"_CPPv4N12VmbErrorType20VmbErrorNotAvailableE","VmbErrorType::VmbErrorNotAvailable"],[0,1,1,"_CPPv4N12VmbErrorType16VmbErrorNotFoundE","VmbErrorType::VmbErrorNotFound"],[0,1,1,"_CPPv4N12VmbErrorType22VmbErrorNotImplementedE","VmbErrorType::VmbErrorNotImplemented"],[0,1,1,"_CPPv4N12VmbErrorType22VmbErrorNotInitializedE","VmbErrorType::VmbErrorNotInitialized"],[0,1,1,"_CPPv4N12VmbErrorType20VmbErrorNotSupportedE","VmbErrorType::VmbErrorNotSupported"],[0,1,1,"_CPPv4N12VmbErrorType13VmbErrorOtherE","VmbErrorType::VmbErrorOther"],[0,1,1,"_CPPv4N12VmbErrorType24VmbErrorParsingChunkDataE","VmbErrorType::VmbErrorParsingChunkData"],[0,1,1,"_CPPv4N12VmbErrorType17VmbErrorResourcesE","VmbErrorType::VmbErrorResources"],[0,1,1,"_CPPv4N12VmbErrorType23VmbErrorRetriesExceededE","VmbErrorType::VmbErrorRetriesExceeded"],[0,1,1,"_CPPv4N12VmbErrorType18VmbErrorStructSizeE","VmbErrorType::VmbErrorStructSize"],[0,1,1,"_CPPv4N12VmbErrorType15VmbErrorSuccessE","VmbErrorType::VmbErrorSuccess"],[0,1,1,"_CPPv4N12VmbErrorType18VmbErrorTLNotFoundE","VmbErrorType::VmbErrorTLNotFound"],[0,1,1,"_CPPv4N12VmbErrorType15VmbErrorTimeoutE","VmbErrorType::VmbErrorTimeout"],[0,1,1,"_CPPv4N12VmbErrorType15VmbErrorUnknownE","VmbErrorType::VmbErrorUnknown"],[0,1,1,"_CPPv4N12VmbErrorType19VmbErrorUnspecifiedE","VmbErrorType::VmbErrorUnspecified"],[0,1,1,"_CPPv4N12VmbErrorType29VmbErrorUserCallbackExceptionE","VmbErrorType::VmbErrorUserCallbackException"],[0,1,1,"_CPPv4N12VmbErrorType31VmbErrorValidValueSetNotPresentE","VmbErrorType::VmbErrorValidValueSetNotPresent"],[0,1,1,"_CPPv4N12VmbErrorType17VmbErrorWrongTypeE","VmbErrorType::VmbErrorWrongType"],[0,1,1,"_CPPv4N12VmbErrorType11VmbErrorXmlE","VmbErrorType::VmbErrorXml"],[0,1,1,"_CPPv4N12VmbErrorType15VmbErrorUnknownE","VmbErrorUnknown"],[0,1,1,"_CPPv4N12VmbErrorType19VmbErrorUnspecifiedE","VmbErrorUnspecified"],[0,1,1,"_CPPv4N12VmbErrorType29VmbErrorUserCallbackExceptionE","VmbErrorUserCallbackException"],[0,1,1,"_CPPv4N12VmbErrorType31VmbErrorValidValueSetNotPresentE","VmbErrorValidValueSetNotPresent"],[0,1,1,"_CPPv4N12VmbErrorType17VmbErrorWrongTypeE","VmbErrorWrongType"],[0,1,1,"_CPPv4N12VmbErrorType11VmbErrorXmlE","VmbErrorXml"],[0,3,1,"_CPPv410VmbError_t","VmbError_t"],[0,1,1,"_CPPv4N18VmbFeatureDataType18VmbFeatureDataBoolE","VmbFeatureDataBool"],[0,1,1,"_CPPv4N18VmbFeatureDataType21VmbFeatureDataCommandE","VmbFeatureDataCommand"],[0,1,1,"_CPPv4N18VmbFeatureDataType18VmbFeatureDataEnumE","VmbFeatureDataEnum"],[0,1,1,"_CPPv4N18VmbFeatureDataType19VmbFeatureDataFloatE","VmbFeatureDataFloat"],[0,1,1,"_CPPv4N18VmbFeatureDataType17VmbFeatureDataIntE","VmbFeatureDataInt"],[0,1,1,"_CPPv4N18VmbFeatureDataType18VmbFeatureDataNoneE","VmbFeatureDataNone"],[0,1,1,"_CPPv4N18VmbFeatureDataType17VmbFeatureDataRawE","VmbFeatureDataRaw"],[0,1,1,"_CPPv4N18VmbFeatureDataType20VmbFeatureDataStringE","VmbFeatureDataString"],[0,2,1,"_CPPv418VmbFeatureDataType","VmbFeatureDataType"],[0,3,1,"_CPPv418VmbFeatureDataType","VmbFeatureDataType"],[0,1,1,"_CPPv4N18VmbFeatureDataType18VmbFeatureDataBoolE","VmbFeatureDataType::VmbFeatureDataBool"],[0,1,1,"_CPPv4N18VmbFeatureDataType21VmbFeatureDataCommandE","VmbFeatureDataType::VmbFeatureDataCommand"],[0,1,1,"_CPPv4N18VmbFeatureDataType18VmbFeatureDataEnumE","VmbFeatureDataType::VmbFeatureDataEnum"],[0,1,1,"_CPPv4N18VmbFeatureDataType19VmbFeatureDataFloatE","VmbFeatureDataType::VmbFeatureDataFloat"],[0,1,1,"_CPPv4N18VmbFeatureDataType17VmbFeatureDataIntE","VmbFeatureDataType::VmbFeatureDataInt"],[0,1,1,"_CPPv4N18VmbFeatureDataType18VmbFeatureDataNoneE","VmbFeatureDataType::VmbFeatureDataNone"],[0,1,1,"_CPPv4N18VmbFeatureDataType17VmbFeatureDataRawE","VmbFeatureDataType::VmbFeatureDataRaw"],[0,1,1,"_CPPv4N18VmbFeatureDataType20VmbFeatureDataStringE","VmbFeatureDataType::VmbFeatureDataString"],[0,1,1,"_CPPv4N18VmbFeatureDataType21VmbFeatureDataUnknownE","VmbFeatureDataType::VmbFeatureDataUnknown"],[0,1,1,"_CPPv4N18VmbFeatureDataType21VmbFeatureDataUnknownE","VmbFeatureDataUnknown"],[0,3,1,"_CPPv416VmbFeatureData_t","VmbFeatureData_t"],[0,4,1,"_CPPv419VmbFeatureEnumEntry","VmbFeatureEnumEntry"],[0,8,1,"_CPPv4N19VmbFeatureEnumEntry11descriptionE","VmbFeatureEnumEntry::description"],[0,8,1,"_CPPv4N19VmbFeatureEnumEntry11displayNameE","VmbFeatureEnumEntry::displayName"],[0,8,1,"_CPPv4N19VmbFeatureEnumEntry8intValueE","VmbFeatureEnumEntry::intValue"],[0,8,1,"_CPPv4N19VmbFeatureEnumEntry4nameE","VmbFeatureEnumEntry::name"],[0,8,1,"_CPPv4N19VmbFeatureEnumEntry13sfncNamespaceE","VmbFeatureEnumEntry::sfncNamespace"],[0,8,1,"_CPPv4N19VmbFeatureEnumEntry7tooltipE","VmbFeatureEnumEntry::tooltip"],[0,8,1,"_CPPv4N19VmbFeatureEnumEntry10visibilityE","VmbFeatureEnumEntry::visibility"],[0,3,1,"_CPPv421VmbFeatureEnumEntry_t","VmbFeatureEnumEntry_t"],[0,1,1,"_CPPv4N19VmbFeatureFlagsType26VmbFeatureFlagsModifyWriteE","VmbFeatureFlagsModifyWrite"],[0,1,1,"_CPPv4N19VmbFeatureFlagsType19VmbFeatureFlagsNoneE","VmbFeatureFlagsNone"],[0,1,1,"_CPPv4N19VmbFeatureFlagsType19VmbFeatureFlagsReadE","VmbFeatureFlagsRead"],[0,2,1,"_CPPv419VmbFeatureFlagsType","VmbFeatureFlagsType"],[0,3,1,"_CPPv419VmbFeatureFlagsType","VmbFeatureFlagsType"],[0,1,1,"_CPPv4N19VmbFeatureFlagsType26VmbFeatureFlagsModifyWriteE","VmbFeatureFlagsType::VmbFeatureFlagsModifyWrite"],[0,1,1,"_CPPv4N19VmbFeatureFlagsType19VmbFeatureFlagsNoneE","VmbFeatureFlagsType::VmbFeatureFlagsNone"],[0,1,1,"_CPPv4N19VmbFeatureFlagsType19VmbFeatureFlagsReadE","VmbFeatureFlagsType::VmbFeatureFlagsRead"],[0,1,1,"_CPPv4N19VmbFeatureFlagsType23VmbFeatureFlagsVolatileE","VmbFeatureFlagsType::VmbFeatureFlagsVolatile"],[0,1,1,"_CPPv4N19VmbFeatureFlagsType20VmbFeatureFlagsWriteE","VmbFeatureFlagsType::VmbFeatureFlagsWrite"],[0,1,1,"_CPPv4N19VmbFeatureFlagsType23VmbFeatureFlagsVolatileE","VmbFeatureFlagsVolatile"],[0,1,1,"_CPPv4N19VmbFeatureFlagsType20VmbFeatureFlagsWriteE","VmbFeatureFlagsWrite"],[0,3,1,"_CPPv417VmbFeatureFlags_t","VmbFeatureFlags_t"],[0,4,1,"_CPPv414VmbFeatureInfo","VmbFeatureInfo"],[0,8,1,"_CPPv4N14VmbFeatureInfo8categoryE","VmbFeatureInfo::category"],[0,8,1,"_CPPv4N14VmbFeatureInfo11descriptionE","VmbFeatureInfo::description"],[0,8,1,"_CPPv4N14VmbFeatureInfo11displayNameE","VmbFeatureInfo::displayName"],[0,8,1,"_CPPv4N14VmbFeatureInfo15featureDataTypeE","VmbFeatureInfo::featureDataType"],[0,8,1,"_CPPv4N14VmbFeatureInfo12featureFlagsE","VmbFeatureInfo::featureFlags"],[0,8,1,"_CPPv4N14VmbFeatureInfo19hasSelectedFeaturesE","VmbFeatureInfo::hasSelectedFeatures"],[0,8,1,"_CPPv4N14VmbFeatureInfo12isStreamableE","VmbFeatureInfo::isStreamable"],[0,8,1,"_CPPv4N14VmbFeatureInfo4nameE","VmbFeatureInfo::name"],[0,8,1,"_CPPv4N14VmbFeatureInfo11pollingTimeE","VmbFeatureInfo::pollingTime"],[0,8,1,"_CPPv4N14VmbFeatureInfo14representationE","VmbFeatureInfo::representation"],[0,8,1,"_CPPv4N14VmbFeatureInfo13sfncNamespaceE","VmbFeatureInfo::sfncNamespace"],[0,8,1,"_CPPv4N14VmbFeatureInfo7tooltipE","VmbFeatureInfo::tooltip"],[0,8,1,"_CPPv4N14VmbFeatureInfo4unitE","VmbFeatureInfo::unit"],[0,8,1,"_CPPv4N14VmbFeatureInfo10visibilityE","VmbFeatureInfo::visibility"],[0,3,1,"_CPPv416VmbFeatureInfo_t","VmbFeatureInfo_t"],[0,1,1,"_CPPv4N21VmbFeaturePersistType20VmbFeaturePersistAllE","VmbFeaturePersistAll"],[0,1,1,"_CPPv4N21VmbFeaturePersistType22VmbFeaturePersistNoLUTE","VmbFeaturePersistNoLUT"],[0,4,1,"_CPPv425VmbFeaturePersistSettings","VmbFeaturePersistSettings"],[0,8,1,"_CPPv4N25VmbFeaturePersistSettings12loggingLevelE","VmbFeaturePersistSettings::loggingLevel"],[0,8,1,"_CPPv4N25VmbFeaturePersistSettings13maxIterationsE","VmbFeaturePersistSettings::maxIterations"],[0,8,1,"_CPPv4N25VmbFeaturePersistSettings18modulePersistFlagsE","VmbFeaturePersistSettings::modulePersistFlags"],[0,8,1,"_CPPv4N25VmbFeaturePersistSettings11persistTypeE","VmbFeaturePersistSettings::persistType"],[0,3,1,"_CPPv427VmbFeaturePersistSettings_t","VmbFeaturePersistSettings_t"],[0,1,1,"_CPPv4N21VmbFeaturePersistType27VmbFeaturePersistStreamableE","VmbFeaturePersistStreamable"],[0,2,1,"_CPPv421VmbFeaturePersistType","VmbFeaturePersistType"],[0,3,1,"_CPPv421VmbFeaturePersistType","VmbFeaturePersistType"],[0,1,1,"_CPPv4N21VmbFeaturePersistType20VmbFeaturePersistAllE","VmbFeaturePersistType::VmbFeaturePersistAll"],[0,1,1,"_CPPv4N21VmbFeaturePersistType22VmbFeaturePersistNoLUTE","VmbFeaturePersistType::VmbFeaturePersistNoLUT"],[0,1,1,"_CPPv4N21VmbFeaturePersistType27VmbFeaturePersistStreamableE","VmbFeaturePersistType::VmbFeaturePersistStreamable"],[0,3,1,"_CPPv419VmbFeaturePersist_t","VmbFeaturePersist_t"],[0,1,1,"_CPPv4N24VmbFeatureVisibilityType28VmbFeatureVisibilityBeginnerE","VmbFeatureVisibilityBeginner"],[0,1,1,"_CPPv4N24VmbFeatureVisibilityType26VmbFeatureVisibilityExpertE","VmbFeatureVisibilityExpert"],[0,1,1,"_CPPv4N24VmbFeatureVisibilityType24VmbFeatureVisibilityGuruE","VmbFeatureVisibilityGuru"],[0,1,1,"_CPPv4N24VmbFeatureVisibilityType29VmbFeatureVisibilityInvisibleE","VmbFeatureVisibilityInvisible"],[0,2,1,"_CPPv424VmbFeatureVisibilityType","VmbFeatureVisibilityType"],[0,3,1,"_CPPv424VmbFeatureVisibilityType","VmbFeatureVisibilityType"],[0,1,1,"_CPPv4N24VmbFeatureVisibilityType28VmbFeatureVisibilityBeginnerE","VmbFeatureVisibilityType::VmbFeatureVisibilityBeginner"],[0,1,1,"_CPPv4N24VmbFeatureVisibilityType26VmbFeatureVisibilityExpertE","VmbFeatureVisibilityType::VmbFeatureVisibilityExpert"],[0,1,1,"_CPPv4N24VmbFeatureVisibilityType24VmbFeatureVisibilityGuruE","VmbFeatureVisibilityType::VmbFeatureVisibilityGuru"],[0,1,1,"_CPPv4N24VmbFeatureVisibilityType29VmbFeatureVisibilityInvisibleE","VmbFeatureVisibilityType::VmbFeatureVisibilityInvisible"],[0,1,1,"_CPPv4N24VmbFeatureVisibilityType27VmbFeatureVisibilityUnknownE","VmbFeatureVisibilityType::VmbFeatureVisibilityUnknown"],[0,1,1,"_CPPv4N24VmbFeatureVisibilityType27VmbFeatureVisibilityUnknownE","VmbFeatureVisibilityUnknown"],[0,3,1,"_CPPv422VmbFeatureVisibility_t","VmbFeatureVisibility_t"],[0,3,1,"_CPPv417VmbFilePathChar_t","VmbFilePathChar_t"],[0,4,1,"_CPPv48VmbFrame","VmbFrame"],[0,8,1,"_CPPv4N8VmbFrame6bufferE","VmbFrame::buffer"],[0,8,1,"_CPPv4N8VmbFrame10bufferSizeE","VmbFrame::bufferSize"],[0,8,1,"_CPPv4N8VmbFrame16chunkDataPresentE","VmbFrame::chunkDataPresent"],[0,8,1,"_CPPv4N8VmbFrame7contextE","VmbFrame::context"],[0,8,1,"_CPPv4N8VmbFrame7frameIDE","VmbFrame::frameID"],[0,8,1,"_CPPv4N8VmbFrame6heightE","VmbFrame::height"],[0,8,1,"_CPPv4N8VmbFrame9imageDataE","VmbFrame::imageData"],[0,8,1,"_CPPv4N8VmbFrame7offsetXE","VmbFrame::offsetX"],[0,8,1,"_CPPv4N8VmbFrame7offsetYE","VmbFrame::offsetY"],[0,8,1,"_CPPv4N8VmbFrame11payloadTypeE","VmbFrame::payloadType"],[0,8,1,"_CPPv4N8VmbFrame11pixelFormatE","VmbFrame::pixelFormat"],[0,8,1,"_CPPv4N8VmbFrame12receiveFlagsE","VmbFrame::receiveFlags"],[0,8,1,"_CPPv4N8VmbFrame13receiveStatusE","VmbFrame::receiveStatus"],[0,8,1,"_CPPv4N8VmbFrame9timestampE","VmbFrame::timestamp"],[0,8,1,"_CPPv4N8VmbFrame5widthE","VmbFrame::width"],[0,1,1,"_CPPv4N17VmbFrameFlagsType29VmbFrameFlagsChunkDataPresentE","VmbFrameFlagsChunkDataPresent"],[0,1,1,"_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsDimensionE","VmbFrameFlagsDimension"],[0,1,1,"_CPPv4N17VmbFrameFlagsType20VmbFrameFlagsFrameIDE","VmbFrameFlagsFrameID"],[0,1,1,"_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsImageDataE","VmbFrameFlagsImageData"],[0,1,1,"_CPPv4N17VmbFrameFlagsType17VmbFrameFlagsNoneE","VmbFrameFlagsNone"],[0,1,1,"_CPPv4N17VmbFrameFlagsType19VmbFrameFlagsOffsetE","VmbFrameFlagsOffset"],[0,1,1,"_CPPv4N17VmbFrameFlagsType24VmbFrameFlagsPayloadTypeE","VmbFrameFlagsPayloadType"],[0,1,1,"_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsTimestampE","VmbFrameFlagsTimestamp"],[0,2,1,"_CPPv417VmbFrameFlagsType","VmbFrameFlagsType"],[0,3,1,"_CPPv417VmbFrameFlagsType","VmbFrameFlagsType"],[0,1,1,"_CPPv4N17VmbFrameFlagsType29VmbFrameFlagsChunkDataPresentE","VmbFrameFlagsType::VmbFrameFlagsChunkDataPresent"],[0,1,1,"_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsDimensionE","VmbFrameFlagsType::VmbFrameFlagsDimension"],[0,1,1,"_CPPv4N17VmbFrameFlagsType20VmbFrameFlagsFrameIDE","VmbFrameFlagsType::VmbFrameFlagsFrameID"],[0,1,1,"_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsImageDataE","VmbFrameFlagsType::VmbFrameFlagsImageData"],[0,1,1,"_CPPv4N17VmbFrameFlagsType17VmbFrameFlagsNoneE","VmbFrameFlagsType::VmbFrameFlagsNone"],[0,1,1,"_CPPv4N17VmbFrameFlagsType19VmbFrameFlagsOffsetE","VmbFrameFlagsType::VmbFrameFlagsOffset"],[0,1,1,"_CPPv4N17VmbFrameFlagsType24VmbFrameFlagsPayloadTypeE","VmbFrameFlagsType::VmbFrameFlagsPayloadType"],[0,1,1,"_CPPv4N17VmbFrameFlagsType22VmbFrameFlagsTimestampE","VmbFrameFlagsType::VmbFrameFlagsTimestamp"],[0,3,1,"_CPPv415VmbFrameFlags_t","VmbFrameFlags_t"],[0,1,1,"_CPPv4N18VmbFrameStatusType22VmbFrameStatusCompleteE","VmbFrameStatusComplete"],[0,1,1,"_CPPv4N18VmbFrameStatusType24VmbFrameStatusIncompleteE","VmbFrameStatusIncomplete"],[0,1,1,"_CPPv4N18VmbFrameStatusType21VmbFrameStatusInvalidE","VmbFrameStatusInvalid"],[0,1,1,"_CPPv4N18VmbFrameStatusType22VmbFrameStatusTooSmallE","VmbFrameStatusTooSmall"],[0,2,1,"_CPPv418VmbFrameStatusType","VmbFrameStatusType"],[0,3,1,"_CPPv418VmbFrameStatusType","VmbFrameStatusType"],[0,1,1,"_CPPv4N18VmbFrameStatusType22VmbFrameStatusCompleteE","VmbFrameStatusType::VmbFrameStatusComplete"],[0,1,1,"_CPPv4N18VmbFrameStatusType24VmbFrameStatusIncompleteE","VmbFrameStatusType::VmbFrameStatusIncomplete"],[0,1,1,"_CPPv4N18VmbFrameStatusType21VmbFrameStatusInvalidE","VmbFrameStatusType::VmbFrameStatusInvalid"],[0,1,1,"_CPPv4N18VmbFrameStatusType22VmbFrameStatusTooSmallE","VmbFrameStatusType::VmbFrameStatusTooSmall"],[0,3,1,"_CPPv416VmbFrameStatus_t","VmbFrameStatus_t"],[0,3,1,"_CPPv410VmbFrame_t","VmbFrame_t"],[0,3,1,"_CPPv411VmbHandle_t","VmbHandle_t"],[0,3,1,"_CPPv419VmbImageDimension_t","VmbImageDimension_t"],[0,3,1,"_CPPv410VmbInt16_t","VmbInt16_t"],[0,3,1,"_CPPv410VmbInt32_t","VmbInt32_t"],[0,3,1,"_CPPv410VmbInt64_t","VmbInt64_t"],[0,3,1,"_CPPv49VmbInt8_t","VmbInt8_t"],[0,4,1,"_CPPv416VmbInterfaceInfo","VmbInterfaceInfo"],[0,8,1,"_CPPv4N16VmbInterfaceInfo15interfaceHandleE","VmbInterfaceInfo::interfaceHandle"],[0,8,1,"_CPPv4N16VmbInterfaceInfo17interfaceIdStringE","VmbInterfaceInfo::interfaceIdString"],[0,8,1,"_CPPv4N16VmbInterfaceInfo13interfaceNameE","VmbInterfaceInfo::interfaceName"],[0,8,1,"_CPPv4N16VmbInterfaceInfo13interfaceTypeE","VmbInterfaceInfo::interfaceType"],[0,8,1,"_CPPv4N16VmbInterfaceInfo20transportLayerHandleE","VmbInterfaceInfo::transportLayerHandle"],[0,3,1,"_CPPv418VmbInterfaceInfo_t","VmbInterfaceInfo_t"],[0,2,1,"_CPPv411VmbLogLevel","VmbLogLevel"],[0,3,1,"_CPPv411VmbLogLevel","VmbLogLevel"],[0,1,1,"_CPPv4N11VmbLogLevel14VmbLogLevelAllE","VmbLogLevel::VmbLogLevelAll"],[0,1,1,"_CPPv4N11VmbLogLevel16VmbLogLevelDebugE","VmbLogLevel::VmbLogLevelDebug"],[0,1,1,"_CPPv4N11VmbLogLevel16VmbLogLevelErrorE","VmbLogLevel::VmbLogLevelError"],[0,1,1,"_CPPv4N11VmbLogLevel15VmbLogLevelNoneE","VmbLogLevel::VmbLogLevelNone"],[0,1,1,"_CPPv4N11VmbLogLevel16VmbLogLevelTraceE","VmbLogLevel::VmbLogLevelTrace"],[0,1,1,"_CPPv4N11VmbLogLevel15VmbLogLevelWarnE","VmbLogLevel::VmbLogLevelWarn"],[0,1,1,"_CPPv4N11VmbLogLevel14VmbLogLevelAllE","VmbLogLevelAll"],[0,1,1,"_CPPv4N11VmbLogLevel16VmbLogLevelDebugE","VmbLogLevelDebug"],[0,1,1,"_CPPv4N11VmbLogLevel16VmbLogLevelErrorE","VmbLogLevelError"],[0,1,1,"_CPPv4N11VmbLogLevel15VmbLogLevelNoneE","VmbLogLevelNone"],[0,1,1,"_CPPv4N11VmbLogLevel16VmbLogLevelTraceE","VmbLogLevelTrace"],[0,1,1,"_CPPv4N11VmbLogLevel15VmbLogLevelWarnE","VmbLogLevelWarn"],[0,3,1,"_CPPv413VmbLogLevel_t","VmbLogLevel_t"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType24VmbModulePersistFlagsAllE","VmbModulePersistFlagsAll"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType30VmbModulePersistFlagsInterfaceE","VmbModulePersistFlagsInterface"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType32VmbModulePersistFlagsLocalDeviceE","VmbModulePersistFlagsLocalDevice"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType25VmbModulePersistFlagsNoneE","VmbModulePersistFlagsNone"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType33VmbModulePersistFlagsRemoteDeviceE","VmbModulePersistFlagsRemoteDevice"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType28VmbModulePersistFlagsStreamsE","VmbModulePersistFlagsStreams"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType35VmbModulePersistFlagsTransportLayerE","VmbModulePersistFlagsTransportLayer"],[0,2,1,"_CPPv425VmbModulePersistFlagsType","VmbModulePersistFlagsType"],[0,3,1,"_CPPv425VmbModulePersistFlagsType","VmbModulePersistFlagsType"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType24VmbModulePersistFlagsAllE","VmbModulePersistFlagsType::VmbModulePersistFlagsAll"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType30VmbModulePersistFlagsInterfaceE","VmbModulePersistFlagsType::VmbModulePersistFlagsInterface"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType32VmbModulePersistFlagsLocalDeviceE","VmbModulePersistFlagsType::VmbModulePersistFlagsLocalDevice"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType25VmbModulePersistFlagsNoneE","VmbModulePersistFlagsType::VmbModulePersistFlagsNone"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType33VmbModulePersistFlagsRemoteDeviceE","VmbModulePersistFlagsType::VmbModulePersistFlagsRemoteDevice"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType28VmbModulePersistFlagsStreamsE","VmbModulePersistFlagsType::VmbModulePersistFlagsStreams"],[0,1,1,"_CPPv4N25VmbModulePersistFlagsType35VmbModulePersistFlagsTransportLayerE","VmbModulePersistFlagsType::VmbModulePersistFlagsTransportLayer"],[0,3,1,"_CPPv423VmbModulePersistFlags_t","VmbModulePersistFlags_t"],[0,1,1,"_CPPv4N14VmbPayloadType21VmbPayloadTypJPEG2000E","VmbPayloadTypJPEG2000"],[0,2,1,"_CPPv414VmbPayloadType","VmbPayloadType"],[0,3,1,"_CPPv414VmbPayloadType","VmbPayloadType"],[0,1,1,"_CPPv4N14VmbPayloadType21VmbPayloadTypJPEG2000E","VmbPayloadType::VmbPayloadTypJPEG2000"],[0,1,1,"_CPPv4N14VmbPayloadType23VmbPayloadTypeChunkOnlyE","VmbPayloadType::VmbPayloadTypeChunkOnly"],[0,1,1,"_CPPv4N14VmbPayloadType28VmbPayloadTypeDeviceSpecificE","VmbPayloadType::VmbPayloadTypeDeviceSpecific"],[0,1,1,"_CPPv4N14VmbPayloadType18VmbPayloadTypeFileE","VmbPayloadType::VmbPayloadTypeFile"],[0,1,1,"_CPPv4N14VmbPayloadType19VmbPayloadTypeGenDCE","VmbPayloadType::VmbPayloadTypeGenDC"],[0,1,1,"_CPPv4N14VmbPayloadType18VmbPayloadTypeH264E","VmbPayloadType::VmbPayloadTypeH264"],[0,1,1,"_CPPv4N14VmbPayloadType19VmbPayloadTypeImageE","VmbPayloadType::VmbPayloadTypeImage"],[0,1,1,"_CPPv4N14VmbPayloadType18VmbPayloadTypeJPEGE","VmbPayloadType::VmbPayloadTypeJPEG"],[0,1,1,"_CPPv4N14VmbPayloadType17VmbPayloadTypeRawE","VmbPayloadType::VmbPayloadTypeRaw"],[0,1,1,"_CPPv4N14VmbPayloadType21VmbPayloadTypeUnknownE","VmbPayloadType::VmbPayloadTypeUnknown"],[0,1,1,"_CPPv4N14VmbPayloadType23VmbPayloadTypeChunkOnlyE","VmbPayloadTypeChunkOnly"],[0,1,1,"_CPPv4N14VmbPayloadType28VmbPayloadTypeDeviceSpecificE","VmbPayloadTypeDeviceSpecific"],[0,1,1,"_CPPv4N14VmbPayloadType18VmbPayloadTypeFileE","VmbPayloadTypeFile"],[0,1,1,"_CPPv4N14VmbPayloadType19VmbPayloadTypeGenDCE","VmbPayloadTypeGenDC"],[0,1,1,"_CPPv4N14VmbPayloadType18VmbPayloadTypeH264E","VmbPayloadTypeH264"],[0,1,1,"_CPPv4N14VmbPayloadType19VmbPayloadTypeImageE","VmbPayloadTypeImage"],[0,1,1,"_CPPv4N14VmbPayloadType18VmbPayloadTypeJPEGE","VmbPayloadTypeJPEG"],[0,1,1,"_CPPv4N14VmbPayloadType17VmbPayloadTypeRawE","VmbPayloadTypeRaw"],[0,1,1,"_CPPv4N14VmbPayloadType21VmbPayloadTypeUnknownE","VmbPayloadTypeUnknown"],[0,3,1,"_CPPv416VmbPayloadType_t","VmbPayloadType_t"],[0,1,1,"_CPPv4N12VmbPixelType13VmbPixelColorE","VmbPixelColor"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatArgb8E","VmbPixelFormatArgb8"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG10E","VmbPixelFormatBayerBG10"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerBG10pE","VmbPixelFormatBayerBG10p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG12E","VmbPixelFormatBayerBG12"],[0,1,1,"_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerBG12PackedE","VmbPixelFormatBayerBG12Packed"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerBG12pE","VmbPixelFormatBayerBG12p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG16E","VmbPixelFormatBayerBG16"],[0,1,1,"_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerBG8E","VmbPixelFormatBayerBG8"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB10E","VmbPixelFormatBayerGB10"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGB10pE","VmbPixelFormatBayerGB10p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB12E","VmbPixelFormatBayerGB12"],[0,1,1,"_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerGB12PackedE","VmbPixelFormatBayerGB12Packed"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGB12pE","VmbPixelFormatBayerGB12p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB16E","VmbPixelFormatBayerGB16"],[0,1,1,"_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerGB8E","VmbPixelFormatBayerGB8"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR10E","VmbPixelFormatBayerGR10"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGR10pE","VmbPixelFormatBayerGR10p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR12E","VmbPixelFormatBayerGR12"],[0,1,1,"_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerGR12PackedE","VmbPixelFormatBayerGR12Packed"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGR12pE","VmbPixelFormatBayerGR12p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR16E","VmbPixelFormatBayerGR16"],[0,1,1,"_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerGR8E","VmbPixelFormatBayerGR8"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG10E","VmbPixelFormatBayerRG10"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerRG10pE","VmbPixelFormatBayerRG10p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG12E","VmbPixelFormatBayerRG12"],[0,1,1,"_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerRG12PackedE","VmbPixelFormatBayerRG12Packed"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerRG12pE","VmbPixelFormatBayerRG12p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG16E","VmbPixelFormatBayerRG16"],[0,1,1,"_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerRG8E","VmbPixelFormatBayerRG8"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr10E","VmbPixelFormatBgr10"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr12E","VmbPixelFormatBgr12"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr14E","VmbPixelFormatBgr14"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr16E","VmbPixelFormatBgr16"],[0,1,1,"_CPPv4N18VmbPixelFormatType18VmbPixelFormatBgr8E","VmbPixelFormatBgr8"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra10E","VmbPixelFormatBgra10"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra12E","VmbPixelFormatBgra12"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra14E","VmbPixelFormatBgra14"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra16E","VmbPixelFormatBgra16"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgra8E","VmbPixelFormatBgra8"],[0,1,1,"_CPPv4N18VmbPixelFormatType18VmbPixelFormatLastE","VmbPixelFormatLast"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono10E","VmbPixelFormatMono10"],[0,1,1,"_CPPv4N18VmbPixelFormatType21VmbPixelFormatMono10pE","VmbPixelFormatMono10p"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono12E","VmbPixelFormatMono12"],[0,1,1,"_CPPv4N18VmbPixelFormatType26VmbPixelFormatMono12PackedE","VmbPixelFormatMono12Packed"],[0,1,1,"_CPPv4N18VmbPixelFormatType21VmbPixelFormatMono12pE","VmbPixelFormatMono12p"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono14E","VmbPixelFormatMono14"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono16E","VmbPixelFormatMono16"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatMono8E","VmbPixelFormatMono8"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb10E","VmbPixelFormatRgb10"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb12E","VmbPixelFormatRgb12"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb14E","VmbPixelFormatRgb14"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb16E","VmbPixelFormatRgb16"],[0,1,1,"_CPPv4N18VmbPixelFormatType18VmbPixelFormatRgb8E","VmbPixelFormatRgb8"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba10E","VmbPixelFormatRgba10"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba12E","VmbPixelFormatRgba12"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba14E","VmbPixelFormatRgba14"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba16E","VmbPixelFormatRgba16"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgba8E","VmbPixelFormatRgba8"],[0,2,1,"_CPPv418VmbPixelFormatType","VmbPixelFormatType"],[0,3,1,"_CPPv418VmbPixelFormatType","VmbPixelFormatType"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatArgb8E","VmbPixelFormatType::VmbPixelFormatArgb8"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG10E","VmbPixelFormatType::VmbPixelFormatBayerBG10"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerBG10pE","VmbPixelFormatType::VmbPixelFormatBayerBG10p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG12E","VmbPixelFormatType::VmbPixelFormatBayerBG12"],[0,1,1,"_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerBG12PackedE","VmbPixelFormatType::VmbPixelFormatBayerBG12Packed"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerBG12pE","VmbPixelFormatType::VmbPixelFormatBayerBG12p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerBG16E","VmbPixelFormatType::VmbPixelFormatBayerBG16"],[0,1,1,"_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerBG8E","VmbPixelFormatType::VmbPixelFormatBayerBG8"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB10E","VmbPixelFormatType::VmbPixelFormatBayerGB10"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGB10pE","VmbPixelFormatType::VmbPixelFormatBayerGB10p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB12E","VmbPixelFormatType::VmbPixelFormatBayerGB12"],[0,1,1,"_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerGB12PackedE","VmbPixelFormatType::VmbPixelFormatBayerGB12Packed"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGB12pE","VmbPixelFormatType::VmbPixelFormatBayerGB12p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGB16E","VmbPixelFormatType::VmbPixelFormatBayerGB16"],[0,1,1,"_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerGB8E","VmbPixelFormatType::VmbPixelFormatBayerGB8"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR10E","VmbPixelFormatType::VmbPixelFormatBayerGR10"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGR10pE","VmbPixelFormatType::VmbPixelFormatBayerGR10p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR12E","VmbPixelFormatType::VmbPixelFormatBayerGR12"],[0,1,1,"_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerGR12PackedE","VmbPixelFormatType::VmbPixelFormatBayerGR12Packed"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerGR12pE","VmbPixelFormatType::VmbPixelFormatBayerGR12p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerGR16E","VmbPixelFormatType::VmbPixelFormatBayerGR16"],[0,1,1,"_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerGR8E","VmbPixelFormatType::VmbPixelFormatBayerGR8"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG10E","VmbPixelFormatType::VmbPixelFormatBayerRG10"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerRG10pE","VmbPixelFormatType::VmbPixelFormatBayerRG10p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG12E","VmbPixelFormatType::VmbPixelFormatBayerRG12"],[0,1,1,"_CPPv4N18VmbPixelFormatType29VmbPixelFormatBayerRG12PackedE","VmbPixelFormatType::VmbPixelFormatBayerRG12Packed"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatBayerRG12pE","VmbPixelFormatType::VmbPixelFormatBayerRG12p"],[0,1,1,"_CPPv4N18VmbPixelFormatType23VmbPixelFormatBayerRG16E","VmbPixelFormatType::VmbPixelFormatBayerRG16"],[0,1,1,"_CPPv4N18VmbPixelFormatType22VmbPixelFormatBayerRG8E","VmbPixelFormatType::VmbPixelFormatBayerRG8"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr10E","VmbPixelFormatType::VmbPixelFormatBgr10"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr12E","VmbPixelFormatType::VmbPixelFormatBgr12"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr14E","VmbPixelFormatType::VmbPixelFormatBgr14"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgr16E","VmbPixelFormatType::VmbPixelFormatBgr16"],[0,1,1,"_CPPv4N18VmbPixelFormatType18VmbPixelFormatBgr8E","VmbPixelFormatType::VmbPixelFormatBgr8"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra10E","VmbPixelFormatType::VmbPixelFormatBgra10"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra12E","VmbPixelFormatType::VmbPixelFormatBgra12"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra14E","VmbPixelFormatType::VmbPixelFormatBgra14"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatBgra16E","VmbPixelFormatType::VmbPixelFormatBgra16"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatBgra8E","VmbPixelFormatType::VmbPixelFormatBgra8"],[0,1,1,"_CPPv4N18VmbPixelFormatType18VmbPixelFormatLastE","VmbPixelFormatType::VmbPixelFormatLast"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono10E","VmbPixelFormatType::VmbPixelFormatMono10"],[0,1,1,"_CPPv4N18VmbPixelFormatType21VmbPixelFormatMono10pE","VmbPixelFormatType::VmbPixelFormatMono10p"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono12E","VmbPixelFormatType::VmbPixelFormatMono12"],[0,1,1,"_CPPv4N18VmbPixelFormatType26VmbPixelFormatMono12PackedE","VmbPixelFormatType::VmbPixelFormatMono12Packed"],[0,1,1,"_CPPv4N18VmbPixelFormatType21VmbPixelFormatMono12pE","VmbPixelFormatType::VmbPixelFormatMono12p"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono14E","VmbPixelFormatType::VmbPixelFormatMono14"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatMono16E","VmbPixelFormatType::VmbPixelFormatMono16"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatMono8E","VmbPixelFormatType::VmbPixelFormatMono8"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb10E","VmbPixelFormatType::VmbPixelFormatRgb10"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb12E","VmbPixelFormatType::VmbPixelFormatRgb12"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb14E","VmbPixelFormatType::VmbPixelFormatRgb14"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgb16E","VmbPixelFormatType::VmbPixelFormatRgb16"],[0,1,1,"_CPPv4N18VmbPixelFormatType18VmbPixelFormatRgb8E","VmbPixelFormatType::VmbPixelFormatRgb8"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba10E","VmbPixelFormatType::VmbPixelFormatRgba10"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba12E","VmbPixelFormatType::VmbPixelFormatRgba12"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba14E","VmbPixelFormatType::VmbPixelFormatRgba14"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatRgba16E","VmbPixelFormatType::VmbPixelFormatRgba16"],[0,1,1,"_CPPv4N18VmbPixelFormatType19VmbPixelFormatRgba8E","VmbPixelFormatType::VmbPixelFormatRgba8"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatYCbCr411_8E","VmbPixelFormatType::VmbPixelFormatYCbCr411_8"],[0,1,1,"_CPPv4N18VmbPixelFormatType33VmbPixelFormatYCbCr411_8_CbYYCrYYE","VmbPixelFormatType::VmbPixelFormatYCbCr411_8_CbYYCrYY"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatYCbCr422_8E","VmbPixelFormatType::VmbPixelFormatYCbCr422_8"],[0,1,1,"_CPPv4N18VmbPixelFormatType31VmbPixelFormatYCbCr422_8_CbYCrYE","VmbPixelFormatType::VmbPixelFormatYCbCr422_8_CbYCrY"],[0,1,1,"_CPPv4N18VmbPixelFormatType37VmbPixelFormatYCbCr601_411_8_CbYYCrYYE","VmbPixelFormatType::VmbPixelFormatYCbCr601_411_8_CbYYCrYY"],[0,1,1,"_CPPv4N18VmbPixelFormatType28VmbPixelFormatYCbCr601_422_8E","VmbPixelFormatType::VmbPixelFormatYCbCr601_422_8"],[0,1,1,"_CPPv4N18VmbPixelFormatType35VmbPixelFormatYCbCr601_422_8_CbYCrYE","VmbPixelFormatType::VmbPixelFormatYCbCr601_422_8_CbYCrY"],[0,1,1,"_CPPv4N18VmbPixelFormatType30VmbPixelFormatYCbCr601_8_CbYCrE","VmbPixelFormatType::VmbPixelFormatYCbCr601_8_CbYCr"],[0,1,1,"_CPPv4N18VmbPixelFormatType37VmbPixelFormatYCbCr709_411_8_CbYYCrYYE","VmbPixelFormatType::VmbPixelFormatYCbCr709_411_8_CbYYCrYY"],[0,1,1,"_CPPv4N18VmbPixelFormatType28VmbPixelFormatYCbCr709_422_8E","VmbPixelFormatType::VmbPixelFormatYCbCr709_422_8"],[0,1,1,"_CPPv4N18VmbPixelFormatType35VmbPixelFormatYCbCr709_422_8_CbYCrYE","VmbPixelFormatType::VmbPixelFormatYCbCr709_422_8_CbYCrY"],[0,1,1,"_CPPv4N18VmbPixelFormatType30VmbPixelFormatYCbCr709_8_CbYCrE","VmbPixelFormatType::VmbPixelFormatYCbCr709_8_CbYCr"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatYCbCr8E","VmbPixelFormatType::VmbPixelFormatYCbCr8"],[0,1,1,"_CPPv4N18VmbPixelFormatType26VmbPixelFormatYCbCr8_CbYCrE","VmbPixelFormatType::VmbPixelFormatYCbCr8_CbYCr"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv411E","VmbPixelFormatType::VmbPixelFormatYuv411"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv422E","VmbPixelFormatType::VmbPixelFormatYuv422"],[0,1,1,"_CPPv4N18VmbPixelFormatType22VmbPixelFormatYuv422_8E","VmbPixelFormatType::VmbPixelFormatYuv422_8"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv444E","VmbPixelFormatType::VmbPixelFormatYuv444"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatYCbCr411_8E","VmbPixelFormatYCbCr411_8"],[0,1,1,"_CPPv4N18VmbPixelFormatType33VmbPixelFormatYCbCr411_8_CbYYCrYYE","VmbPixelFormatYCbCr411_8_CbYYCrYY"],[0,1,1,"_CPPv4N18VmbPixelFormatType24VmbPixelFormatYCbCr422_8E","VmbPixelFormatYCbCr422_8"],[0,1,1,"_CPPv4N18VmbPixelFormatType31VmbPixelFormatYCbCr422_8_CbYCrYE","VmbPixelFormatYCbCr422_8_CbYCrY"],[0,1,1,"_CPPv4N18VmbPixelFormatType37VmbPixelFormatYCbCr601_411_8_CbYYCrYYE","VmbPixelFormatYCbCr601_411_8_CbYYCrYY"],[0,1,1,"_CPPv4N18VmbPixelFormatType28VmbPixelFormatYCbCr601_422_8E","VmbPixelFormatYCbCr601_422_8"],[0,1,1,"_CPPv4N18VmbPixelFormatType35VmbPixelFormatYCbCr601_422_8_CbYCrYE","VmbPixelFormatYCbCr601_422_8_CbYCrY"],[0,1,1,"_CPPv4N18VmbPixelFormatType30VmbPixelFormatYCbCr601_8_CbYCrE","VmbPixelFormatYCbCr601_8_CbYCr"],[0,1,1,"_CPPv4N18VmbPixelFormatType37VmbPixelFormatYCbCr709_411_8_CbYYCrYYE","VmbPixelFormatYCbCr709_411_8_CbYYCrYY"],[0,1,1,"_CPPv4N18VmbPixelFormatType28VmbPixelFormatYCbCr709_422_8E","VmbPixelFormatYCbCr709_422_8"],[0,1,1,"_CPPv4N18VmbPixelFormatType35VmbPixelFormatYCbCr709_422_8_CbYCrYE","VmbPixelFormatYCbCr709_422_8_CbYCrY"],[0,1,1,"_CPPv4N18VmbPixelFormatType30VmbPixelFormatYCbCr709_8_CbYCrE","VmbPixelFormatYCbCr709_8_CbYCr"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatYCbCr8E","VmbPixelFormatYCbCr8"],[0,1,1,"_CPPv4N18VmbPixelFormatType26VmbPixelFormatYCbCr8_CbYCrE","VmbPixelFormatYCbCr8_CbYCr"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv411E","VmbPixelFormatYuv411"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv422E","VmbPixelFormatYuv422"],[0,1,1,"_CPPv4N18VmbPixelFormatType22VmbPixelFormatYuv422_8E","VmbPixelFormatYuv422_8"],[0,1,1,"_CPPv4N18VmbPixelFormatType20VmbPixelFormatYuv444E","VmbPixelFormatYuv444"],[0,3,1,"_CPPv416VmbPixelFormat_t","VmbPixelFormat_t"],[0,1,1,"_CPPv4N12VmbPixelType12VmbPixelMonoE","VmbPixelMono"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy10BitE","VmbPixelOccupy10Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy12BitE","VmbPixelOccupy12Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy14BitE","VmbPixelOccupy14Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy16BitE","VmbPixelOccupy16Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy24BitE","VmbPixelOccupy24Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy32BitE","VmbPixelOccupy32Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy48BitE","VmbPixelOccupy48Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy64BitE","VmbPixelOccupy64Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType18VmbPixelOccupy8BitE","VmbPixelOccupy8Bit"],[0,2,1,"_CPPv418VmbPixelOccupyType","VmbPixelOccupyType"],[0,3,1,"_CPPv418VmbPixelOccupyType","VmbPixelOccupyType"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy10BitE","VmbPixelOccupyType::VmbPixelOccupy10Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy12BitE","VmbPixelOccupyType::VmbPixelOccupy12Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy14BitE","VmbPixelOccupyType::VmbPixelOccupy14Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy16BitE","VmbPixelOccupyType::VmbPixelOccupy16Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy24BitE","VmbPixelOccupyType::VmbPixelOccupy24Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy32BitE","VmbPixelOccupyType::VmbPixelOccupy32Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy48BitE","VmbPixelOccupyType::VmbPixelOccupy48Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType19VmbPixelOccupy64BitE","VmbPixelOccupyType::VmbPixelOccupy64Bit"],[0,1,1,"_CPPv4N18VmbPixelOccupyType18VmbPixelOccupy8BitE","VmbPixelOccupyType::VmbPixelOccupy8Bit"],[0,2,1,"_CPPv412VmbPixelType","VmbPixelType"],[0,3,1,"_CPPv412VmbPixelType","VmbPixelType"],[0,1,1,"_CPPv4N12VmbPixelType13VmbPixelColorE","VmbPixelType::VmbPixelColor"],[0,1,1,"_CPPv4N12VmbPixelType12VmbPixelMonoE","VmbPixelType::VmbPixelMono"],[0,4,1,"_CPPv421VmbTransportLayerInfo","VmbTransportLayerInfo"],[0,8,1,"_CPPv4N21VmbTransportLayerInfo20transportLayerHandleE","VmbTransportLayerInfo::transportLayerHandle"],[0,8,1,"_CPPv4N21VmbTransportLayerInfo22transportLayerIdStringE","VmbTransportLayerInfo::transportLayerIdString"],[0,8,1,"_CPPv4N21VmbTransportLayerInfo23transportLayerModelNameE","VmbTransportLayerInfo::transportLayerModelName"],[0,8,1,"_CPPv4N21VmbTransportLayerInfo18transportLayerNameE","VmbTransportLayerInfo::transportLayerName"],[0,8,1,"_CPPv4N21VmbTransportLayerInfo18transportLayerPathE","VmbTransportLayerInfo::transportLayerPath"],[0,8,1,"_CPPv4N21VmbTransportLayerInfo18transportLayerTypeE","VmbTransportLayerInfo::transportLayerType"],[0,8,1,"_CPPv4N21VmbTransportLayerInfo20transportLayerVendorE","VmbTransportLayerInfo::transportLayerVendor"],[0,8,1,"_CPPv4N21VmbTransportLayerInfo21transportLayerVersionE","VmbTransportLayerInfo::transportLayerVersion"],[0,3,1,"_CPPv423VmbTransportLayerInfo_t","VmbTransportLayerInfo_t"],[0,2,1,"_CPPv421VmbTransportLayerType","VmbTransportLayerType"],[0,3,1,"_CPPv421VmbTransportLayerType","VmbTransportLayerType"],[0,1,1,"_CPPv4N21VmbTransportLayerType23VmbTransportLayerTypeCLE","VmbTransportLayerType::VmbTransportLayerTypeCL"],[0,1,1,"_CPPv4N21VmbTransportLayerType25VmbTransportLayerTypeCLHSE","VmbTransportLayerType::VmbTransportLayerTypeCLHS"],[0,1,1,"_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeCXPE","VmbTransportLayerType::VmbTransportLayerTypeCXP"],[0,1,1,"_CPPv4N21VmbTransportLayerType27VmbTransportLayerTypeCustomE","VmbTransportLayerType::VmbTransportLayerTypeCustom"],[0,1,1,"_CPPv4N21VmbTransportLayerType29VmbTransportLayerTypeEthernetE","VmbTransportLayerType::VmbTransportLayerTypeEthernet"],[0,1,1,"_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeGEVE","VmbTransportLayerType::VmbTransportLayerTypeGEV"],[0,1,1,"_CPPv4N21VmbTransportLayerType25VmbTransportLayerTypeIIDCE","VmbTransportLayerType::VmbTransportLayerTypeIIDC"],[0,1,1,"_CPPv4N21VmbTransportLayerType26VmbTransportLayerTypeMixedE","VmbTransportLayerType::VmbTransportLayerTypeMixed"],[0,1,1,"_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypePCIE","VmbTransportLayerType::VmbTransportLayerTypePCI"],[0,1,1,"_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeU3VE","VmbTransportLayerType::VmbTransportLayerTypeU3V"],[0,1,1,"_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeUVCE","VmbTransportLayerType::VmbTransportLayerTypeUVC"],[0,1,1,"_CPPv4N21VmbTransportLayerType28VmbTransportLayerTypeUnknownE","VmbTransportLayerType::VmbTransportLayerTypeUnknown"],[0,1,1,"_CPPv4N21VmbTransportLayerType23VmbTransportLayerTypeCLE","VmbTransportLayerTypeCL"],[0,1,1,"_CPPv4N21VmbTransportLayerType25VmbTransportLayerTypeCLHSE","VmbTransportLayerTypeCLHS"],[0,1,1,"_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeCXPE","VmbTransportLayerTypeCXP"],[0,1,1,"_CPPv4N21VmbTransportLayerType27VmbTransportLayerTypeCustomE","VmbTransportLayerTypeCustom"],[0,1,1,"_CPPv4N21VmbTransportLayerType29VmbTransportLayerTypeEthernetE","VmbTransportLayerTypeEthernet"],[0,1,1,"_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeGEVE","VmbTransportLayerTypeGEV"],[0,1,1,"_CPPv4N21VmbTransportLayerType25VmbTransportLayerTypeIIDCE","VmbTransportLayerTypeIIDC"],[0,1,1,"_CPPv4N21VmbTransportLayerType26VmbTransportLayerTypeMixedE","VmbTransportLayerTypeMixed"],[0,1,1,"_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypePCIE","VmbTransportLayerTypePCI"],[0,1,1,"_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeU3VE","VmbTransportLayerTypeU3V"],[0,1,1,"_CPPv4N21VmbTransportLayerType24VmbTransportLayerTypeUVCE","VmbTransportLayerTypeUVC"],[0,1,1,"_CPPv4N21VmbTransportLayerType28VmbTransportLayerTypeUnknownE","VmbTransportLayerTypeUnknown"],[0,3,1,"_CPPv423VmbTransportLayerType_t","VmbTransportLayerType_t"],[0,3,1,"_CPPv410VmbUchar_t","VmbUchar_t"],[0,3,1,"_CPPv411VmbUint16_t","VmbUint16_t"],[0,3,1,"_CPPv411VmbUint32_t","VmbUint32_t"],[0,3,1,"_CPPv411VmbUint64_t","VmbUint64_t"],[0,3,1,"_CPPv410VmbUint8_t","VmbUint8_t"],[0,4,1,"_CPPv414VmbVersionInfo","VmbVersionInfo"],[0,8,1,"_CPPv4N14VmbVersionInfo5majorE","VmbVersionInfo::major"],[0,8,1,"_CPPv4N14VmbVersionInfo5minorE","VmbVersionInfo::minor"],[0,8,1,"_CPPv4N14VmbVersionInfo5patchE","VmbVersionInfo::patch"],[0,3,1,"_CPPv416VmbVersionInfo_t","VmbVersionInfo_t"]]},objnames:{"0":["c","macro","C macro"],"1":["cpp","enumerator","C++ enumerator"],"2":["cpp","enum","C++ enum"],"3":["cpp","type","C++ type"],"4":["cpp","class","C++ class"],"5":["cpp","function","C++ function"],"6":["cpp","functionParam","C++ function parameter"],"7":["cpp","templateParam","C++ template parameter"],"8":["cpp","member","C++ member"]},objtypes:{"0":"c:macro","1":"cpp:enumerator","2":"cpp:enum","3":"cpp:type","4":"cpp:class","5":"cpp:function","6":"cpp:functionParam","7":"cpp:templateParam","8":"cpp:member"},terms:{"0":0,"000f314c4be5":0,"1":0,"10":0,"12":0,"13":0,"1394":0,"14":0,"16":0,"169":0,"2":0,"2000":0,"24":0,"254":0,"264":0,"2x12":0,"3":0,"32":0,"4":0,"48":0,"64":0,"8":0,"boolean":0,"byte":0,"case":0,"char":0,"class":1,"const":0,"default":0,"do":0,"enum":0,"float":0,"int":0,"long":0,"new":0,"null":0,"public":0,"return":0,"short":0,"static":0,"throw":0,"true":0,"void":0,"while":0,A:0,And:0,As:0,For:0,If:0,In:0,It:0,No:0,On:0,One:0,The:0,There:0,These:0,abl:0,about:0,absenc:0,access:0,accesschunkdata:0,accessmod:0,accomplish:0,accordingli:0,acquir:0,acquiremultipleimag:0,acquiresingleimag:0,acquisit:0,action:0,activ:0,actual:0,adapt:0,add:0,addit:0,address:0,after:0,again:0,alia:0,align:0,all:0,alloc:0,allocationmod:0,allow:0,alreadi:0,also:0,alwai:0,an:0,ani:0,announc:0,announcefram:0,anoth:0,append:0,applic:0,ar:0,argb:0,arrai:0,arriv:0,assign:0,associ:0,assum:0,atom:0,attempt:0,avail:0,avoid:0,bad_alloc:0,base:0,basic:0,basiclock:0,basiclockableptr:0,bayer:0,bayerbg10:0,bayerbg10p:0,bayerbg12:0,bayerbg12p:0,bayerbg12pack:0,bayerbg16:0,bayerbg8:0,bayergb10:0,bayergb10p:0,bayergb12:0,bayergb12p:0,bayergb12pack:0,bayergb16:0,bayergb8:0,bayergr10:0,bayergr10p:0,bayergr12:0,bayergr12p:0,bayergr12pack:0,bayergr16:0,bayergr8:0,bayerrg10:0,bayerrg10p:0,bayerrg12:0,bayerrg12p:0,bayerrg12pack:0,bayerrg16:0,bayerrg8:0,bear:0,been:0,befor:0,beforehand:0,beginn:0,being:0,belong:0,bg:0,bgr8:0,bgr:0,bgra8:0,bgra:0,bit:0,block:0,bool:0,both:0,bound:0,buffer:0,bufferalign:0,buffercount:0,buffers:0,build:0,busi:0,c:1,call:0,callback:0,camera:1,camerahandl:0,cameraid:0,cameraidextend:0,cameraidstr:0,camerainfo:0,cameralistchang:0,cameranam:0,cameraptr:0,cameraptrvector:0,can:0,cannot:0,captur:0,card:0,cast:0,categori:0,cbycr:0,cbycri:0,cbycrt:0,cbyycryi:0,certain:0,chang:0,channel:0,charact:0,check:0,choosen:0,chunk:0,chunkaccessfunct:0,chunkdata:0,chunkdataaccessfunct:0,chunkdatapres:0,chunkfeaturecontainerptr:0,clean:0,clear:0,close:0,coaxpress:0,code:0,color:0,combin:0,command:0,common:1,compar:0,complet:0,completeread:0,compris:0,condit:0,configur:0,conflict:0,connect:0,consequ:0,consid:0,consider:0,constant:1,construct:0,constructor:0,consum:0,contain:0,context:0,continu:0,control:0,conveni:0,convent:0,convert:0,copi:0,copyabl:0,correspond:0,could:0,creat:0,cstringliketrait:0,cti:0,ctor:0,current:0,custom:0,data:0,datatyp:0,dealloc:0,debug:0,defin:0,definit:0,delet:0,deliv:0,depend:0,deriv:0,describ:0,descript:0,design:0,destroi:0,detail:0,determin:0,dev_1234567890:0,deviat:0,devic:0,deviceisopen:0,differ:0,dimens:0,direct:0,directori:0,displai:0,displaynam:0,dma:0,doe:0,done:0,doubl:0,driver:0,due:0,dure:0,e:0,eaccessmod:0,effect:0,either:0,element:0,emploi:0,empti:0,enable_if:0,end:0,endcaptur:0,enough:0,ensur:0,entiti:0,entri:0,enumentri:0,enumentryvector:0,enumer:0,enumtyp:0,environ:0,equal:0,equival:0,error:0,etc:0,ethernet:0,even:0,event:0,except:0,exclud:0,exclus:0,execut:0,exist:0,exit:0,expect:0,expert:0,explicit:0,expos:0,extend:0,extendedid:0,extendedidequ:0,extenden:0,factori:0,fail:0,failur:0,fals:0,far:0,fault:0,featur:1,featureaccesshandl:0,featurechang:0,featurecontain:1,featurecontainerptr:0,featuredatatyp:0,featureflag:0,featureptr:0,featureptrvector:0,fetch:0,few:0,file:0,filepath:0,fill:0,find:0,finish:0,finit:0,first:0,flag:0,flush:0,flushqueu:0,follow:0,format:0,found:0,frame:1,frameallocation_announcefram:0,frameallocationmod:0,framehandl:0,framehandlerptr:0,frameid:0,frameptr:0,frameptrvector:0,framereceiv:0,free:0,from:0,full:0,furthermor:0,g:0,gb:0,gendc:0,gener:0,genicam:0,genicam_gentlxx_path:0,gentl:0,get:0,getbuff:0,getbuffers:0,getcamera:0,getcamerabyid:0,getcameraptrbyhandl:0,getcamerasbyinterfac:0,getcamerasbyinterfacefunct:0,getcamerasbytl:0,getcamerasbytlfunct:0,getcategori:0,getdatatyp:0,getdescript:0,getdisplaynam:0,getentri:0,getextendedid:0,getfeatur:0,getfeaturebynam:0,getflag:0,getframeid:0,gethandl:0,getheight:0,getid:0,getimag:0,getincr:0,getinst:0,getinterfac:0,getinterfacebyid:0,getinterfaceid:0,getinterfacesbytl:0,getinterfacesbytlfunct:0,getinterfacetyp:0,getlocaldevic:0,getlogg:0,getmodel:0,getmodelnam:0,getnam:0,getobserv:0,getoffseti:0,getoffsetx:0,getpath:0,getpayloads:0,getpayloadtyp:0,getpermittedaccess:0,getpixelformat:0,getpollingtim:0,getrang:0,getreceivestatu:0,getrepresent:0,getselectedfeatur:0,getserialnumb:0,getsfncnamespac:0,getstream:0,getstreambufferalign:0,getter:0,gettimestamp:0,gettooltip:0,gettransportlay:0,gettransportlayerbyid:0,gettyp:0,getunit:0,getvalidvalueset:0,getvalu:0,getvendor:0,getvers:0,getvis:0,getwidth:0,gev:0,gige:0,gigevis:0,given:0,global:0,got:0,gr:0,grabber:0,guarante:0,gui:0,guru:0,h:0,ha:0,handl:0,handler:0,hasincr:0,hasn:0,hasselectedfeatur:0,have:0,header:0,height:0,hidden:0,hold:0,horizont:0,how:0,hs:0,human:0,i:0,icamerafactori:0,icamerafactoryptr:0,icameralistobserv:1,icameralistobserverptr:0,icapturingmodul:1,id:0,ident:0,identifi:0,idtyp:0,ifeatureobserv:1,ifeatureobserverptr:0,iframeobserv:1,iframeobserverptr:0,iidc:0,iinterfacelistobserv:1,iinterfacelistobserverptr:0,illeg:0,imag:0,imagedata:0,imexport:0,impl:0,implement:0,implicitli:0,incement:0,includ:0,incom:0,increment:0,incrementsupport:0,index:1,indic:0,info:0,inform:0,initi:0,inlin:0,inout:0,input:0,instanc:0,instead:0,insuffici:0,int64:0,int64vector:0,integ:0,integr:0,integraltyp:0,intend:0,interfac:1,interfacehandl:0,interfaceid:0,interfaceidstr:0,interfaceinfo:0,interfacelistchang:0,interfacenam:0,interfaceptr:0,interfaceptrvector:0,interfacetyp:0,intern:0,interv:0,intvalu:0,invalid:0,io:0,iobserv:0,ip:0,ip_or_mac:0,is_integr:0,is_sam:0,iscommanddon:0,iscstringlik:0,isdon:0,isread:0,isstream:0,issu:0,isvalueavail:0,iswrit:0,iter:0,its:0,itself:0,jpeg:0,just:0,kill:0,know:0,known:0,l:0,languag:0,later:0,layer:0,least:0,leav:0,legaci:0,level:0,lifecycl:0,lifetim:0,like:0,line:0,link:0,list:0,listen:0,liter:0,load:0,loadset:0,local:0,localdevic:1,localdevicehandl:0,localdeviceptr:0,lock:0,log:0,logger:0,logginglevel:0,longer:0,look:0,low:0,lower:0,lsb:0,mac:0,macro:0,mai:0,main:0,major:0,map:0,mark:0,match:0,max:0,maximum:0,maxiter:0,measur:0,memori:0,messag:0,method:0,might:0,millisecond:0,min:0,minimum:0,minor:0,mix:0,mode:0,model:0,modelnam:0,modul:0,modulepersistflag:0,mono10:0,mono10p:0,mono12:0,mono12pack:0,mono14:0,mono16:0,mono8:0,monochrom:0,monopack:0,more:0,most:0,much:0,multipl:0,must:0,mutex:0,mutexptr:0,name:0,namespac:0,nbufferalign:0,necessari:0,need:0,next:0,noexcept:0,non:0,noth:0,notif:0,notifi:0,npayloads:0,nullptr:0,nullptr_t:0,number:0,numer:0,numframescomplet:0,o:0,object:0,observ:0,occupi:0,occur:0,offset:0,offseti:0,offsetx:0,onc:0,one:0,onli:0,open:0,opencamerabyid:0,oper:0,option:0,order:0,other:0,otherwis:0,out:0,output:0,overload:0,overrid:0,pack:0,param:0,paramet:0,pars:0,particular:0,pass:0,patch:0,path:0,pathconfigur:0,payload:0,payloadtyp:0,pbuffer:0,pcam:0,pcamera:0,pcamerafactori:0,pci:0,pcie:0,pentrynam:0,perform:0,permit:0,permittedaccess:0,persist:0,persistablefeaturecontain:1,persisttyp:0,pfeatur:0,pfnc:0,pframe:0,physic:0,pid:0,pin:0,pinterfac:0,pixel:0,pixelformat:0,pleas:0,plocaldevic:0,plug:0,pname:0,pobserv:0,point:0,pointer:0,poll:0,pollingtim:0,pool:0,portabl:0,posit:0,possibl:0,potenti:0,predefin:0,prefix:0,prepar:0,present:0,prevent:0,program:0,properli:0,properti:0,protect:0,provid:0,pset:0,ptransportlay:0,ptransportlayerptr:0,put:0,pvalu:0,queri:0,queryvers:0,queu:0,queue:0,queuefram:0,quickli:0,rang:0,raw:0,read:0,readabl:0,readmemori:0,reason:0,receiv:0,receiveflag:0,receivestatu:0,referenc:0,regardless:0,regist:0,registercamerafactori:0,registercameralistobserv:0,registerinterfacelistobserv:0,registerobserv:0,relat:0,releas:0,remain:0,remot:0,remov:0,replac:0,report:0,repres:0,represent:0,request:0,requir:0,reread:0,resid:0,resourc:0,respons:0,restor:0,restrict:0,result:0,retri:0,retriev:0,revok:0,revokeal:0,revokeallfram:0,revokefram:0,rg:0,rgb12:0,rgb16:0,rgb8:0,rgb:0,rgba8:0,rgba:0,roi:0,routin:0,run:0,runcommand:0,runtim:0,s:0,same:0,satisfi:0,save:0,saveset:0,scope:0,search:0,see:0,select:0,selectedfeatur:0,semicolon:0,separ:0,sequenti:0,serial:0,serialnumb:0,serialstr:0,set:0,setup:0,setvalu:0,sever:0,sfnc:0,sfncnamespac:0,share:0,shared_ptr:0,sharedpoint:0,should:0,shutdown:0,sign:0,sinc:0,singl:0,singleton:0,size:0,sizecomplet:0,sizefil:0,small:0,so:0,some:0,someth:0,soon:0,space:0,span:0,special:0,specif:0,specifi:0,spend:0,standard:0,start:0,startcaptur:0,startcontinuousimageacquisit:0,startup:0,state:0,static_cast:0,statu:0,std:0,still:0,stl:0,stop:0,stopcontinuousimageacquisit:0,storag:0,store:0,stream:1,streamabl:0,streamcount:0,streamhandl:0,streamptr:0,streamptrvector:0,string:0,stringvector:0,struct:0,subclass:0,substr:0,success:0,successfulli:0,support:0,sure:0,synchron:0,system:0,t:0,tabl:0,taken:0,technolog:0,templat:0,than:0,thei:0,therefor:0,thi:0,though:0,thread:0,threw:0,throughout:0,thrown:0,time:0,timeout:0,timestamp:0,tip:0,tl:0,too:0,tool:0,tooltip:0,tostr:0,tr1:0,transfer:0,transport:0,transportlay:1,transportlayerhandl:0,transportlayerid:0,transportlayeridstr:0,transportlayerinfo:0,transportlayermodelnam:0,transportlayernam:0,transportlayerpath:0,transportlayerptr:0,transportlayerptrvector:0,transportlayertyp:0,transportlayervendor:0,transportlayervers:0,treat:0,tree:0,trigger:0,type:1,typedef:0,typenam:0,u3v:0,ucharvector:0,uint64vector:0,underli:0,underlyingtypehelp:0,unexpect:0,uniqu:0,unit:0,unknown:0,unmodifi:0,unregist:0,unregistercamerafactori:0,unregistercameralistobserv:0,unregisterinterfacelistobserv:0,unregisterobserv:0,unsign:0,unspecifi:0,until:0,up:0,updat:0,updatetriggertyp:0,us:0,usag:0,usb3:0,usb:0,user:0,usercontext:0,usersharedpointerdefin:0,usual:0,valid:0,validvalu:0,valu:0,variabl:0,vector:0,vendor:0,veri:0,version:0,vertic:0,via:0,video:0,virtual:0,visibiliri:0,visibl:0,vision:0,vmb:0,vmb_call:0,vmb_file_path_liter:0,vmb_path_separator_char:0,vmb_path_separator_str:0,vmb_sfnc_namespace_custom:0,vmb_sfnc_namespace_standard:0,vmbaccessmode_t:0,vmbaccessmodeexclus:0,vmbaccessmodeful:0,vmbaccessmodenon:0,vmbaccessmoderead:0,vmbaccessmodetyp:0,vmbaccessmodeunknown:0,vmbbool_t:0,vmbboolfals:0,vmbbooltru:0,vmbboolval:0,vmbc:0,vmbcameraclos:0,vmbcamerainfo:0,vmbcamerainfo_t:0,vmbcameraopen:0,vmbcaptureend:0,vmbcaptureframequeu:0,vmbchunkaccesscallback:0,vmbchunkdataaccess:0,vmbcommontyp:0,vmbctypedefinit:0,vmberror_t:0,vmberroralreadi:0,vmberrorambigu:0,vmberrorapinotstart:0,vmberrorbadhandl:0,vmberrorbadparamet:0,vmberrorbusi:0,vmberrorcustom:0,vmberrordevicenotopen:0,vmberrorfeaturesunavail:0,vmberrorgentlunspecifi:0,vmberrorincomplet:0,vmberrorinsufficientbuffercount:0,vmberrorinternalfault:0,vmberrorinus:0,vmberrorinvalidaccess:0,vmberrorinvalidaddress:0,vmberrorinvalidcal:0,vmberrorinvalidvalu:0,vmberrorio:0,vmberrormoredata:0,vmberrornochunkdata:0,vmberrornodata:0,vmberrornotavail:0,vmberrornotfound:0,vmberrornotimpl:0,vmberrornotiniti:0,vmberrornotl:0,vmberrornotsupport:0,vmberroroth:0,vmberrorparsingchunkdata:0,vmberrorresourc:0,vmberrorretriesexceed:0,vmberrorstructs:0,vmberrorsuccess:0,vmberrortimeout:0,vmberrortlnotfound:0,vmberrortyp:0,vmberrorunknown:0,vmberrorunspecifi:0,vmberrorusercallbackexcept:0,vmberrorvalidvaluesetnotpres:0,vmberrorwrongtyp:0,vmberrorxml:0,vmbfeatureaccessqueri:0,vmbfeaturedata_t:0,vmbfeaturedatabool:0,vmbfeaturedatacommand:0,vmbfeaturedataenum:0,vmbfeaturedatafloat:0,vmbfeaturedataint:0,vmbfeaturedatanon:0,vmbfeaturedataraw:0,vmbfeaturedatastr:0,vmbfeaturedatatyp:0,vmbfeaturedataunknown:0,vmbfeatureenumentri:0,vmbfeatureenumentry_t:0,vmbfeatureflags_t:0,vmbfeatureflagsmodifywrit:0,vmbfeatureflagsnon:0,vmbfeatureflagsread:0,vmbfeatureflagstyp:0,vmbfeatureflagsvolatil:0,vmbfeatureflagswrit:0,vmbfeatureinfo:0,vmbfeatureinfo_t:0,vmbfeatureinvalidationregist:0,vmbfeaturepersist_t:0,vmbfeaturepersistal:0,vmbfeaturepersistnolut:0,vmbfeaturepersistset:0,vmbfeaturepersistsettings_t:0,vmbfeaturepersiststream:0,vmbfeaturepersisttyp:0,vmbfeaturevisibility_t:0,vmbfeaturevisibilitybeginn:0,vmbfeaturevisibilityexpert:0,vmbfeaturevisibilityguru:0,vmbfeaturevisibilityinvis:0,vmbfeaturevisibilitytyp:0,vmbfeaturevisibilityunknown:0,vmbfilepathchar_t:0,vmbframe:0,vmbframe_t:0,vmbframecallback:0,vmbframeflags_t:0,vmbframeflagschunkdatapres:0,vmbframeflagsdimens:0,vmbframeflagsframeid:0,vmbframeflagsimagedata:0,vmbframeflagsnon:0,vmbframeflagsoffset:0,vmbframeflagspayloadtyp:0,vmbframeflagstimestamp:0,vmbframeflagstyp:0,vmbframestatus_t:0,vmbframestatuscomplet:0,vmbframestatusincomplet:0,vmbframestatusinvalid:0,vmbframestatustoosmal:0,vmbframestatustyp:0,vmbhandle_t:0,vmbimagedimension_t:0,vmbint16_t:0,vmbint32_t:0,vmbint64_t:0,vmbint8_t:0,vmbinterfaceinfo:0,vmbinterfaceinfo_t:0,vmbinvalidationcallback:0,vmbloglevel:0,vmbloglevel_t:0,vmbloglevelal:0,vmblogleveldebug:0,vmbloglevelerror:0,vmbloglevelnon:0,vmblogleveltrac:0,vmbloglevelwarn:0,vmbmodulepersistflags_t:0,vmbmodulepersistflagsal:0,vmbmodulepersistflagsinterfac:0,vmbmodulepersistflagslocaldevic:0,vmbmodulepersistflagsnon:0,vmbmodulepersistflagsremotedevic:0,vmbmodulepersistflagsstream:0,vmbmodulepersistflagstransportlay:0,vmbmodulepersistflagstyp:0,vmbpayloadtyp:0,vmbpayloadtype_t:0,vmbpayloadtypechunkonli:0,vmbpayloadtypedevicespecif:0,vmbpayloadtypefil:0,vmbpayloadtypegendc:0,vmbpayloadtypeh264:0,vmbpayloadtypeimag:0,vmbpayloadtypejpeg:0,vmbpayloadtyperaw:0,vmbpayloadtypeunknown:0,vmbpayloadtypjpeg2000:0,vmbpixelcolor:0,vmbpixelformat_t:0,vmbpixelformatargb8:0,vmbpixelformatbayerbg10:0,vmbpixelformatbayerbg10p:0,vmbpixelformatbayerbg12:0,vmbpixelformatbayerbg12p:0,vmbpixelformatbayerbg12pack:0,vmbpixelformatbayerbg16:0,vmbpixelformatbayerbg8:0,vmbpixelformatbayergb10:0,vmbpixelformatbayergb10p:0,vmbpixelformatbayergb12:0,vmbpixelformatbayergb12p:0,vmbpixelformatbayergb12pack:0,vmbpixelformatbayergb16:0,vmbpixelformatbayergb8:0,vmbpixelformatbayergr10:0,vmbpixelformatbayergr10p:0,vmbpixelformatbayergr12:0,vmbpixelformatbayergr12p:0,vmbpixelformatbayergr12pack:0,vmbpixelformatbayergr16:0,vmbpixelformatbayergr8:0,vmbpixelformatbayerrg10:0,vmbpixelformatbayerrg10p:0,vmbpixelformatbayerrg12:0,vmbpixelformatbayerrg12p:0,vmbpixelformatbayerrg12pack:0,vmbpixelformatbayerrg16:0,vmbpixelformatbayerrg8:0,vmbpixelformatbgr10:0,vmbpixelformatbgr12:0,vmbpixelformatbgr14:0,vmbpixelformatbgr16:0,vmbpixelformatbgr8:0,vmbpixelformatbgra10:0,vmbpixelformatbgra12:0,vmbpixelformatbgra14:0,vmbpixelformatbgra16:0,vmbpixelformatbgra8:0,vmbpixelformatlast:0,vmbpixelformatmono10:0,vmbpixelformatmono10p:0,vmbpixelformatmono12:0,vmbpixelformatmono12p:0,vmbpixelformatmono12pack:0,vmbpixelformatmono14:0,vmbpixelformatmono16:0,vmbpixelformatmono8:0,vmbpixelformatrgb10:0,vmbpixelformatrgb12:0,vmbpixelformatrgb14:0,vmbpixelformatrgb16:0,vmbpixelformatrgb8:0,vmbpixelformatrgba10:0,vmbpixelformatrgba12:0,vmbpixelformatrgba14:0,vmbpixelformatrgba16:0,vmbpixelformatrgba8:0,vmbpixelformattyp:0,vmbpixelformatycbcr411_8:0,vmbpixelformatycbcr411_8_cbyycryi:0,vmbpixelformatycbcr422_8:0,vmbpixelformatycbcr422_8_cbycri:0,vmbpixelformatycbcr601_411_8_cbyycryi:0,vmbpixelformatycbcr601_422_8:0,vmbpixelformatycbcr601_422_8_cbycri:0,vmbpixelformatycbcr601_8_cbycr:0,vmbpixelformatycbcr709_411_8_cbyycryi:0,vmbpixelformatycbcr709_422_8:0,vmbpixelformatycbcr709_422_8_cbycri:0,vmbpixelformatycbcr709_8_cbycr:0,vmbpixelformatycbcr8:0,vmbpixelformatycbcr8_cbycr:0,vmbpixelformatyuv411:0,vmbpixelformatyuv422:0,vmbpixelformatyuv422_8:0,vmbpixelformatyuv444:0,vmbpixelmono:0,vmbpixeloccupy10bit:0,vmbpixeloccupy12bit:0,vmbpixeloccupy14bit:0,vmbpixeloccupy16bit:0,vmbpixeloccupy24bit:0,vmbpixeloccupy32bit:0,vmbpixeloccupy48bit:0,vmbpixeloccupy64bit:0,vmbpixeloccupy8bit:0,vmbpixeloccupytyp:0,vmbpixeltyp:0,vmbsettingsload:0,vmbsettingssav:0,vmbshutdown:0,vmbstartup:0,vmbsystem:1,vmbtransportlayerinfo:0,vmbtransportlayerinfo_t:0,vmbtransportlayertyp:0,vmbtransportlayertype_t:0,vmbtransportlayertypecl:0,vmbtransportlayertypeclh:0,vmbtransportlayertypecustom:0,vmbtransportlayertypecxp:0,vmbtransportlayertypeethernet:0,vmbtransportlayertypegev:0,vmbtransportlayertypeiidc:0,vmbtransportlayertypemix:0,vmbtransportlayertypepci:0,vmbtransportlayertypeu3v:0,vmbtransportlayertypeunknown:0,vmbtransportlayertypeuvc:0,vmbuchar_t:0,vmbuint16_t:0,vmbuint32_t:0,vmbuint64_t:0,vmbuint8_t:0,vmbversioninfo:0,vmbversioninfo_t:0,volatil:0,wa:0,wait:0,warn:0,were:0,when:0,whenev:0,where:0,whether:0,which:0,whose:0,why:0,width:0,window:0,within:0,without:0,work:0,write:0,writememori:0,written:0,wrong:0,x:0,xml:0,y:0,ycbcr411_8:0,ycbcr411_8_cbyycryi:0,ycbcr422_8:0,ycbcr422_8_cbycri:0,ycbcr601:0,ycbcr601_411_8_cbyycryi:0,ycbcr601_422_8:0,ycbcr601_422_8_cbycri:0,ycbcr601_8_cbycr:0,ycbcr709:0,ycbcr709_411_8_cbyycryi:0,ycbcr709_422_8:0,ycbcr709_422_8_cbycri:0,ycbcr709_8_cbycr:0,ycbcr8:0,ycbcr8_cbycr:0,ycbcr:0,ycbycr:0,you:0,your:0,yuv411_8_uyyvyi:0,yuv411pack:0,yuv422_8:0,yuv422_8_uyvi:0,yuv422pack:0,yuv444pack:0,yuv8_uyv:0,yuv:0,yuyv:0,yycbyycr:0},titles:["VmbCPP C++ API Function Reference","VmbCPP API Function Reference"],titleterms:{"class":0,"function":[0,1],api:[0,1],c:0,camera:0,common:0,constant:0,featur:0,featurecontain:0,frame:0,icameralistobserv:0,icapturingmodul:0,ifeatureobserv:0,iframeobserv:0,iinterfacelistobserv:0,indic:1,interfac:0,localdevic:0,persistablefeaturecontain:0,refer:[0,1],stream:0,tabl:1,transportlay:0,type:0,vmbcpp:[0,1],vmbsystem:0}})
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/.buildinfo b/VimbaX/doc/VmbC_Function_Reference/.buildinfo
new file mode 100644
index 0000000000000000000000000000000000000000..78034fb918d2d18f263c282b8000427b9ce95ffe
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 774bb9740e05c47ccaed7c9ddc2a1b72
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/VimbaX/doc/VmbC_Function_Reference/.doctrees/cAPIReference.doctree b/VimbaX/doc/VmbC_Function_Reference/.doctrees/cAPIReference.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..37bcf9869226dc215f15700cf4a0ebe802fb41cd
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/.doctrees/cAPIReference.doctree differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/.doctrees/environment.pickle b/VimbaX/doc/VmbC_Function_Reference/.doctrees/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..22c527cabbc4f7bf5fbd04f6638fdc6e80dd6166
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/.doctrees/environment.pickle differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/.doctrees/index.doctree b/VimbaX/doc/VmbC_Function_Reference/.doctrees/index.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..ba269df4e00b7b00d570a09ff2db8c0723c55526
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/.doctrees/index.doctree differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/basic.css b/VimbaX/doc/VmbC_Function_Reference/_static/basic.css
new file mode 100644
index 0000000000000000000000000000000000000000..bf18350b65c61f31b2f9f717c03e02f17c0ab4f1
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/basic.css
@@ -0,0 +1,906 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+div.section::after {
+    display: block;
+    content: '';
+    clear: left;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+    overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    float: left;
+    width: 80%;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    float: left;
+    width: 20%;
+    border-left: none;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li p.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable ul {
+    margin-top: 0;
+    margin-bottom: 0;
+    list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+    padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+    padding: 2px;
+    border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+    min-width: 450px;
+    max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
+a.headerlink {
+    visibility: hidden;
+}
+
+a.brackets:before,
+span.brackets > a:before{
+    content: "[";
+}
+
+a.brackets:after,
+span.brackets > a:after {
+    content: "]";
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-default {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar,
+aside.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+    clear: right;
+    overflow-x: auto;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+div.admonition, div.topic, blockquote {
+    clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+aside.sidebar > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+    margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+    display: block;
+    content: '';
+    clear: both;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.align-center {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.align-default {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+th > :first-child,
+td > :first-child {
+    margin-top: 0px;
+}
+
+th > :last-child,
+td > :last-child {
+    margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure, figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption, figcaption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist {
+    margin: 1em 0;
+}
+
+table.hlist td {
+    vertical-align: top;
+}
+
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+	font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+.sig-name {
+	font-size: 1.1em;
+}
+
+code.descname {
+    font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+    background-color: transparent;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.sig-param.n {
+	font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+	font-family: unset;
+}
+
+.sig.c   .k, .sig.c   .kt,
+.sig.cpp .k, .sig.cpp .kt {
+	color: #0033B3;
+}
+
+.sig.c   .m,
+.sig.cpp .m {
+	color: #1750EB;
+}
+
+.sig.c   .s, .sig.c   .sc,
+.sig.cpp .s, .sig.cpp .sc {
+	color: #067D17;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
+    margin-top: 0px;
+}
+
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
+    margin-bottom: 0px;
+}
+
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+    margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+    margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+    margin-bottom: 0;
+}
+
+dl.footnote > dt,
+dl.citation > dt {
+    float: left;
+    margin-right: 0.5em;
+}
+
+dl.footnote > dd,
+dl.citation > dd {
+    margin-bottom: 0em;
+}
+
+dl.footnote > dd:after,
+dl.citation > dd:after {
+    content: "";
+    clear: both;
+}
+
+dl.field-list {
+    display: grid;
+    grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+    font-weight: bold;
+    word-break: break-word;
+    padding-left: 0.5em;
+    padding-right: 5px;
+}
+
+dl.field-list > dt:after {
+    content: ":";
+}
+
+dl.field-list > dd {
+    padding-left: 0.5em;
+    margin-top: 0em;
+    margin-left: 0em;
+    margin-bottom: 0em;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd > :first-child {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+    margin-bottom: 0;
+}
+
+dt:target, span.highlighted {
+    background-color: #fbe54e;
+}
+
+rect.highlighted {
+    fill: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+.classifier:before {
+    font-style: normal;
+    margin: 0 0.5em;
+    content: ":";
+    display: inline-block;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+pre, div[class*="highlight-"] {
+    clear: both;
+}
+
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+    white-space: nowrap;
+}
+
+div[class*="highlight-"] {
+    margin: 1em 0;
+}
+
+td.linenos pre {
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    display: block;
+}
+
+table.highlighttable tbody {
+    display: block;
+}
+
+table.highlighttable tr {
+    display: flex;
+}
+
+table.highlighttable td {
+    margin: 0;
+    padding: 0;
+}
+
+table.highlighttable td.linenos {
+    padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+    flex: 1;
+    overflow: hidden;
+}
+
+.highlight .hll {
+    display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+    margin: 0;
+}
+
+div.code-block-caption + div {
+    margin-top: 0;
+}
+
+div.code-block-caption {
+    margin-top: 1em;
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+table.highlighttable td.linenos,
+span.linenos,
+div.highlight span.gp {  /* gp: Generic.Prompt */
+  user-select: none;
+  -webkit-user-select: text; /* Safari fallback only */
+  -webkit-user-select: none; /* Chrome/Safari */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* IE10+ */
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    margin: 1em 0;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+span.eqno a.headerlink {
+    position: absolute;
+    z-index: 1;
+}
+
+div.math:hover a.headerlink {
+    visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/badge_only.css b/VimbaX/doc/VmbC_Function_Reference/_static/css/badge_only.css
new file mode 100644
index 0000000000000000000000000000000000000000..e380325bc6e273d9142c2369883d2a4b2a069cf1
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/css/badge_only.css
@@ -0,0 +1 @@
+.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..6cb60000181dbd348963953ac8ac54afb46c63d5
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff2 b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..7059e23142aae3d8bad6067fc734a6cffec779c9
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Bold.woff2 differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..f815f63f99da80ad2be69e4021023ec2981eaea0
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff2 b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..f2c76e5bda18a9842e24cd60d8787257da215ca7
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/Roboto-Slab-Regular.woff2 differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.eot b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.eot differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.svg b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000000000000000000000000000000000000..855c845e538b65548118279537a04eab2ec6ef0d
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+<?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>
+<metadata>
+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
+ By ,,,
+Copyright Dave Gandy 2016. All rights reserved.
+</metadata>
+<defs>
+<font id="FontAwesome" horiz-adv-x="1536" >
+  <font-face 
+    font-family="FontAwesome"
+    font-weight="400"
+    font-stretch="normal"
+    units-per-em="1792"
+    panose-1="0 0 0 0 0 0 0 0 0 0"
+    ascent="1536"
+    descent="-256"
+    bbox="-1.02083 -256.962 2304.6 1537.02"
+    underline-thickness="0"
+    underline-position="0"
+    unicode-range="U+0020-F500"
+  />
+<missing-glyph horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".notdef" horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".null" horiz-adv-x="0" 
+ />
+    <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597" 
+ />
+    <glyph glyph-name="space" unicode=" " horiz-adv-x="448" 
+ />
+    <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1792" 
+d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+    <glyph glyph-name="music" unicode="&#xf001;" 
+d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
+t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664" 
+d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
+t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="envelope" unicode="&#xf003;" horiz-adv-x="1792" 
+d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
+t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
+M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792" 
+d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
+q-18 -18 -44 -18z" />
+    <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664" 
+d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
+l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="star_empty" unicode="&#xf006;" horiz-adv-x="1664" 
+d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
+l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280" 
+d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
+t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920" 
+d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
+q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
+t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
+q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
+t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="th_large" unicode="&#xf009;" horiz-adv-x="1664" 
+d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
+h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="th_list" unicode="&#xf00b;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ok" unicode="&#xf00c;" horiz-adv-x="1792" 
+d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+    <glyph glyph-name="remove" unicode="&#xf00d;" horiz-adv-x="1408" 
+d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
+t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+    <glyph glyph-name="zoom_in" unicode="&#xf00e;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
+q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
+t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="zoom_out" unicode="&#xf010;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
+M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
+" />
+    <glyph glyph-name="off" unicode="&#xf011;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
+t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+    <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792" 
+d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="cog" unicode="&#xf013;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
+q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
+l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
+q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+    <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408" 
+d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
+q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664" 
+d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
+l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+    <glyph glyph-name="file_alt" unicode="&#xf016;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+" />
+    <glyph glyph-name="time" unicode="&#xf017;" 
+d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920" 
+d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
+q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+    <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664" 
+d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
+q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+    <glyph glyph-name="download" unicode="&#xf01a;" 
+d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
+t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="upload" unicode="&#xf01b;" 
+d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
+t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="inbox" unicode="&#xf01c;" 
+d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
+q25 -61 25 -123z" />
+    <glyph glyph-name="play_circle" unicode="&#xf01d;" 
+d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="repeat" unicode="&#xf01e;" 
+d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
+l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+    <glyph glyph-name="refresh" unicode="&#xf021;" 
+d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
+q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
+q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792" 
+d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
+M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
+t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152" 
+d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792" 
+d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
+t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664" 
+d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
+t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
+t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+    <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+    <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
+t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
+t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+    <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408" 
+d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
+M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+    <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792" 
+d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
+M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+    <glyph glyph-name="tag" unicode="&#xf02b;" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664" 
+d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
+q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
+q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
+t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+    <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280" 
+d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664" 
+d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
+v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+    <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920" 
+d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
+q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664" 
+d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
+q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
+q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+    <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408" 
+d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
+q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
+t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
+t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+    <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024" 
+d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
+q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+    <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792" 
+d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
+t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
+q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+    <glyph glyph-name="text_width" unicode="&#xf035;" 
+d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
+t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
+t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
+t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+    <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
+h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792" 
+d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
+t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
+q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
+q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792" 
+d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792" 
+d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792" 
+d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
+q39 -17 39 -59z" />
+    <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920" 
+d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
+q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="pencil" unicode="&#xf040;" 
+d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
+q53 0 91 -38l235 -234q37 -39 37 -91z" />
+    <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024" 
+d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+    <glyph glyph-name="adjust" unicode="&#xf042;" 
+d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024" 
+d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
+q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+    <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792" 
+d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
+l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+    <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664" 
+d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
+q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
+t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664" 
+d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
+q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
+q24 -24 24 -57t-24 -57z" />
+    <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
+t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024" 
+d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
+    <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792" 
+d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
+q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664" 
+d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408" 
+d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+    <glyph glyph-name="pause" unicode="&#xf04c;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="stop" unicode="&#xf04d;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
+q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
+    <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538" 
+d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+    <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280" 
+d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280" 
+d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="plus_sign" unicode="&#xf055;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
+t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="minus_sign" unicode="&#xf056;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="remove_sign" unicode="&#xf057;" 
+d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
+q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_sign" unicode="&#xf058;" 
+d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="question_sign" unicode="&#xf059;" 
+d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
+q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="info_sign" unicode="&#xf05a;" 
+d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
+t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="screenshot" unicode="&#xf05b;" 
+d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
+q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
+q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="remove_circle" unicode="&#xf05c;" 
+d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
+t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_circle" unicode="&#xf05d;" 
+d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
+t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ban_circle" unicode="&#xf05e;" 
+d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
+t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+    <glyph glyph-name="arrow_left" unicode="&#xf060;" 
+d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
+t32.5 -90.5z" />
+    <glyph glyph-name="arrow_right" unicode="&#xf061;" 
+d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+    <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664" 
+d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
+q37 -39 37 -91z" />
+    <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664" 
+d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+    <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792" 
+d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
+t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+    <glyph glyph-name="resize_full" unicode="&#xf065;" 
+d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
+q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="resize_small" unicode="&#xf066;" 
+d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
+t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+    <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664" 
+d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
+q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+    <glyph glyph-name="exclamation_sign" unicode="&#xf06a;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
+q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+    <glyph glyph-name="gift" unicode="&#xf06b;" 
+d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
+q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
+t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792" 
+d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
+q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
+t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+    <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408" 
+d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
+q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+    <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792" 
+d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
+t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+    <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792" 
+d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
+q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
+q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
+" />
+    <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792" 
+d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
+q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+    <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408" 
+d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
+q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+    <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664" 
+d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
+M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
+q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
+h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792" 
+d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
+t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
+v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
+t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792" 
+d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
+q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="magnet" unicode="&#xf076;" 
+d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
+q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792" 
+d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792" 
+d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920" 
+d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
+zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
+" />
+    <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664" 
+d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
+t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664" 
+d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920" 
+d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
+t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768" 
+d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048" 
+d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+    <glyph glyph-name="twitter_sign" unicode="&#xf081;" 
+d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
+q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
+t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="facebook_sign" unicode="&#xf082;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792" 
+d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
+t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
+q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792" 
+d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
+l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
+t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+    <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920" 
+d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
+l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
+l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
+q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
+t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
+q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
+q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+    <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792" 
+d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
+q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
+q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+    <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
+t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
+q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
+q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;" 
+d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
+t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
+M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
+h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
+    <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896" 
+d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+    <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792" 
+d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
+q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
+q224 0 351 -124t127 -344z" />
+    <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664" 
+d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
+q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+    <glyph glyph-name="linkedin_sign" unicode="&#xf08c;" 
+d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
+q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152" 
+d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
+t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+    <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792" 
+d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="signin" unicode="&#xf090;" 
+d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
+q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664" 
+d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
+t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
+q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="github_sign" unicode="&#xf092;" 
+d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
+q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
+t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
+q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664" 
+d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
+t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+    <glyph glyph-name="lemon" unicode="&#xf094;" 
+d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
+q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
+q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
+q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
+    <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408" 
+d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
+q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
+t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+    <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408" 
+d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280" 
+d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
+q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="phone_sign" unicode="&#xf098;" 
+d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
+t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
+t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
+" />
+    <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664" 
+d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
+q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+    <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024" 
+d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+    <glyph glyph-name="github" unicode="&#xf09b;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
+q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
+t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
+q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
+M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
+    <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664" 
+d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
+t316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920" 
+d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
+q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+    <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408" 
+d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
+t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
+q187 -186 294 -425.5t120 -501.5z" />
+    <glyph glyph-name="hdd" unicode="&#xf0a0;" 
+d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
+h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
+l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+    <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792" 
+d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
+t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+    <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
+M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
+t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="certificate" unicode="&#xf0a3;" 
+d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
+l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
+l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+    <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
+q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
+q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
+t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792" 
+d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
+t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
+M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
+q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="hand_up" unicode="&#xf0a6;" 
+d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
+q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
+t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
+q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+    <glyph glyph-name="hand_down" unicode="&#xf0a7;" 
+d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
+t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
+q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
+q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+    <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_right" unicode="&#xf0a9;" 
+d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_up" unicode="&#xf0aa;" 
+d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_down" unicode="&#xf0ab;" 
+d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="globe" unicode="&#xf0ac;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
+q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
+q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
+q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
+t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
+q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
+q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
+t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
+t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
+q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
+q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
+q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
+t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
+q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
+q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+    <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1664" 
+d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
+t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+    <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792" 
+d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
+t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408" 
+d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+    <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792" 
+d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
+t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="fullscreen" unicode="&#xf0b2;" 
+d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
+l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
+" />
+    <glyph glyph-name="group" unicode="&#xf0c0;" horiz-adv-x="1920" 
+d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
+t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
+t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+    <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1664" 
+d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
+l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
+t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
+q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+    <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920" 
+d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
+" />
+    <glyph glyph-name="beaker" unicode="&#xf0c3;" horiz-adv-x="1664" 
+d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+    <glyph glyph-name="cut" unicode="&#xf0c4;" horiz-adv-x="1792" 
+d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
+q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
+q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
+q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
+q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+    <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="1792" 
+d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
+h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+    <glyph glyph-name="paper_clip" unicode="&#xf0c6;" horiz-adv-x="1408" 
+d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
+l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
+z" />
+    <glyph glyph-name="save" unicode="&#xf0c7;" 
+d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
+h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="sign_blank" unicode="&#xf0c8;" 
+d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="reorder" unicode="&#xf0c9;" 
+d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
+t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ul" unicode="&#xf0ca;" horiz-adv-x="1792" 
+d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
+M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="ol" unicode="&#xf0cb;" horiz-adv-x="1792" 
+d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
+q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
+t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
+q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792" 
+d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
+l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
+l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+    <glyph glyph-name="underline" unicode="&#xf0cd;" 
+d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
+q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
+q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
+q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+    <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664" 
+d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
+v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
+q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
+q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
+z" />
+    <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1664" 
+d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
+l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+    <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1792" 
+d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
+t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
+t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="pinterest" unicode="&#xf0d2;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
+q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
+q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="pinterest_sign" unicode="&#xf0d3;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
+t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
+t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="google_plus_sign" unicode="&#xf0d4;" 
+d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
+h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="google_plus" unicode="&#xf0d5;" horiz-adv-x="2304" 
+d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
+q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
+    <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920" 
+d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
+v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_down" unicode="&#xf0d7;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_up" unicode="&#xf0d8;" horiz-adv-x="1024" 
+d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="caret_left" unicode="&#xf0d9;" horiz-adv-x="640" 
+d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="caret_right" unicode="&#xf0da;" horiz-adv-x="640" 
+d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664" 
+d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="sort_down" unicode="&#xf0dd;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="sort_up" unicode="&#xf0de;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="envelope_alt" unicode="&#xf0e0;" horiz-adv-x="1792" 
+d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
+q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+    <glyph glyph-name="linkedin" unicode="&#xf0e1;" 
+d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
+q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+    <glyph glyph-name="undo" unicode="&#xf0e2;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+    <glyph glyph-name="legal" unicode="&#xf0e3;" horiz-adv-x="1792" 
+d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
+t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
+q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
+q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+    <glyph glyph-name="dashboard" unicode="&#xf0e4;" horiz-adv-x="1792" 
+d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
+t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
+t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
+q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="comment_alt" unicode="&#xf0e5;" horiz-adv-x="1792" 
+d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
+q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
+t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="comments_alt" unicode="&#xf0e6;" horiz-adv-x="1792" 
+d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
+t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
+t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
+q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+    <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896" 
+d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+    <glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792" 
+d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664" 
+d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
+q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
+q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+    <glyph glyph-name="paste" unicode="&#xf0ea;" horiz-adv-x="1792" 
+d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
+h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="light_bulb" unicode="&#xf0eb;" horiz-adv-x="1024" 
+d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
+q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
+q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
+t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+    <glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792" 
+d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
+q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="cloud_download" unicode="&#xf0ed;" horiz-adv-x="1920" 
+d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="cloud_upload" unicode="&#xf0ee;" horiz-adv-x="1920" 
+d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="user_md" unicode="&#xf0f0;" horiz-adv-x="1408" 
+d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
+t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
+t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
+t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
+t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792" 
+d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
+t66 -158z" />
+    <glyph glyph-name="bell_alt" unicode="&#xf0f3;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
+t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1920" 
+d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
+t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="food" unicode="&#xf0f5;" horiz-adv-x="1408" 
+d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
+t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="file_text_alt" unicode="&#xf0f6;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
+q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+    <glyph glyph-name="building" unicode="&#xf0f7;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5
+t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320
+v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1920" 
+d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152
+q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792" 
+d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32
+q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="fighter_jet" unicode="&#xf0fb;" horiz-adv-x="1920" 
+d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96
+q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" />
+    <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1664" 
+d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+    <glyph glyph-name="h_sign" unicode="&#xf0fd;" 
+d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="f0fe" unicode="&#xf0fe;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="double_angle_left" unicode="&#xf100;" horiz-adv-x="1024" 
+d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_right" unicode="&#xf101;" horiz-adv-x="1024" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23
+l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_up" unicode="&#xf102;" horiz-adv-x="1152" 
+d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393
+q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_down" unicode="&#xf103;" horiz-adv-x="1152" 
+d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_left" unicode="&#xf104;" horiz-adv-x="640" 
+d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_right" unicode="&#xf105;" horiz-adv-x="640" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_up" unicode="&#xf106;" horiz-adv-x="1152" 
+d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_down" unicode="&#xf107;" horiz-adv-x="1152" 
+d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920" 
+d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19
+t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920" 
+d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z
+M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+    <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152" 
+d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832
+q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="mobile_phone" unicode="&#xf10b;" horiz-adv-x="768" 
+d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136
+q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="circle_blank" unicode="&#xf10c;" 
+d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103
+t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="quote_left" unicode="&#xf10d;" horiz-adv-x="1664" 
+d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z
+M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="quote_right" unicode="&#xf10e;" horiz-adv-x="1664" 
+d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216
+v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1792" 
+d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z
+M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5
+q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="circle" unicode="&#xf111;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792" 
+d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19
+l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+    <glyph glyph-name="github_alt" unicode="&#xf113;" horiz-adv-x="1664" 
+d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320
+q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86
+t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218
+q0 -87 -27 -168q136 -160 136 -398z" />
+    <glyph glyph-name="folder_close_alt" unicode="&#xf114;" horiz-adv-x="1664" 
+d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320
+q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open_alt" unicode="&#xf115;" horiz-adv-x="1920" 
+d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68
+v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z
+" />
+    <glyph glyph-name="expand_alt" unicode="&#xf116;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="collapse_alt" unicode="&#xf117;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="smile" unicode="&#xf118;" 
+d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5
+t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="frown" unicode="&#xf119;" 
+d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204
+t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="meh" unicode="&#xf11a;" 
+d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="gamepad" unicode="&#xf11b;" horiz-adv-x="1920" 
+d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150
+t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+    <glyph glyph-name="keyboard" unicode="&#xf11c;" horiz-adv-x="1920" 
+d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16
+h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16
+h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96
+q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896
+h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="flag_alt" unicode="&#xf11d;" horiz-adv-x="1792" 
+d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9
+h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102
+q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="flag_checkered" unicode="&#xf11e;" horiz-adv-x="1792" 
+d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2
+q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266
+q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8
+q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1664" 
+d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1920" 
+d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5
+l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+    <glyph glyph-name="reply_all" unicode="&#xf122;" horiz-adv-x="1792" 
+d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1
+q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+    <glyph glyph-name="star_half_empty" unicode="&#xf123;" horiz-adv-x="1664" 
+d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5
+l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+    <glyph glyph-name="location_arrow" unicode="&#xf124;" horiz-adv-x="1408" 
+d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+    <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664" 
+d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="code_fork" unicode="&#xf126;" horiz-adv-x="1024" 
+d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5
+q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497
+q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="unlink" unicode="&#xf127;" horiz-adv-x="1664" 
+d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320
+q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18
+l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9
+t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="1024" 
+d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5
+t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+    <glyph glyph-name="_279" unicode="&#xf129;" horiz-adv-x="640" 
+d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192
+q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="640" 
+d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+    <glyph glyph-name="superscript" unicode="&#xf12b;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5
+t-65.5 -51.5t-30.5 -63h232v80h126z" />
+    <glyph glyph-name="subscript" unicode="&#xf12c;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73
+h232v80h126z" />
+    <glyph glyph-name="_283" unicode="&#xf12d;" horiz-adv-x="1920" 
+d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+    <glyph glyph-name="puzzle_piece" unicode="&#xf12e;" horiz-adv-x="1664" 
+d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5
+t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89
+q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117
+q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+    <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152" 
+d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5
+t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+    <glyph glyph-name="microphone_off" unicode="&#xf131;" horiz-adv-x="1408" 
+d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128
+q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23
+t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+    <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280" 
+d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150
+t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="calendar_empty" unicode="&#xf133;" horiz-adv-x="1664" 
+d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="fire_extinguisher" unicode="&#xf134;" horiz-adv-x="1408" 
+d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800
+q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113
+q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+    <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1664" 
+d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1
+q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+    <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1792" 
+d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+    <glyph glyph-name="chevron_sign_left" unicode="&#xf137;" 
+d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_right" unicode="&#xf138;" 
+d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_up" unicode="&#xf139;" 
+d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_down" unicode="&#xf13a;" 
+d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408" 
+d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+    <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1792" 
+d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+    <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792" 
+d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352
+q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19
+t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="unlock_alt" unicode="&#xf13e;" horiz-adv-x="1152" 
+d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181
+v-320h736z" />
+    <glyph glyph-name="bullseye" unicode="&#xf140;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150
+t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ellipsis_horizontal" unicode="&#xf141;" horiz-adv-x="1408" 
+d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ellipsis_vertical" unicode="&#xf142;" horiz-adv-x="384" 
+d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="_303" unicode="&#xf143;" 
+d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128
+q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="play_sign" unicode="&#xf144;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56
+q16 -8 32 -8q17 0 32 9z" />
+    <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1792" 
+d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136
+t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+    <glyph glyph-name="minus_sign_alt" unicode="&#xf146;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="check_minus" unicode="&#xf147;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5
+t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="level_up" unicode="&#xf148;" horiz-adv-x="1024" 
+d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+    <glyph glyph-name="level_down" unicode="&#xf149;" horiz-adv-x="1024" 
+d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+    <glyph glyph-name="check_sign" unicode="&#xf14a;" 
+d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5
+t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="edit_sign" unicode="&#xf14b;" 
+d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_312" unicode="&#xf14c;" 
+d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960
+q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="share_sign" unicode="&#xf14d;" 
+d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5
+t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="compass" unicode="&#xf14e;" 
+d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="collapse" unicode="&#xf150;" 
+d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="collapse_top" unicode="&#xf151;" 
+d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_317" unicode="&#xf152;" 
+d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1024" 
+d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9
+t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26
+l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+    <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1024" 
+d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7
+q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+    <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="1024" 
+d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43
+t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5
+t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50
+t53 -63.5t31.5 -76.5t13 -94z" />
+    <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898" 
+d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102
+q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1027" 
+d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61
+l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+    <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280" 
+d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128
+q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+    <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792" 
+d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23
+t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28
+q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1280" 
+d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164
+l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30
+t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+    <glyph glyph-name="file" unicode="&#xf15b;" 
+d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+    <glyph glyph-name="file_text" unicode="&#xf15c;" 
+d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+    <glyph glyph-name="sort_by_alphabet" unicode="&#xf15d;" horiz-adv-x="1664" 
+d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23
+v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162
+l230 -662h70z" />
+    <glyph glyph-name="_329" unicode="&#xf15e;" horiz-adv-x="1664" 
+d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150
+v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248
+v119h121z" />
+    <glyph glyph-name="sort_by_attributes" unicode="&#xf160;" horiz-adv-x="1792" 
+d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832
+q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_attributes_alt" unicode="&#xf161;" horiz-adv-x="1792" 
+d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192
+q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_order" unicode="&#xf162;" 
+d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23
+zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5
+t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+    <glyph glyph-name="sort_by_order_alt" unicode="&#xf163;" 
+d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9
+t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13
+q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+    <glyph glyph-name="_334" unicode="&#xf164;" horiz-adv-x="1664" 
+d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76
+q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5
+t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+    <glyph glyph-name="_335" unicode="&#xf165;" horiz-adv-x="1664" 
+d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135
+t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121
+t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+    <glyph glyph-name="youtube_sign" unicode="&#xf166;" 
+d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15
+q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38
+q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5
+q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38
+q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5
+h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube" unicode="&#xf167;" 
+d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73
+q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51
+q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99
+q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51
+q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+    <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408" 
+d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942
+q25 45 64 45h241q22 0 31 -15z" />
+    <glyph glyph-name="xing_sign" unicode="&#xf169;" 
+d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1
+l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube_play" unicode="&#xf16a;" horiz-adv-x="1792" 
+d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5
+l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136
+q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" />
+    <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1792" 
+d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+    <glyph glyph-name="stackexchange" unicode="&#xf16c;" 
+d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
+    <glyph glyph-name="instagram" unicode="&#xf16d;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270
+q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5
+t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317
+q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
+    <glyph glyph-name="flickr" unicode="&#xf16e;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150
+t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+    <glyph glyph-name="adn" unicode="&#xf170;" 
+d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f171" unicode="&#xf171;" horiz-adv-x="1408" 
+d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22
+t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18
+t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5
+t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+    <glyph glyph-name="bitbucket_sign" unicode="&#xf172;" 
+d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5
+t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z
+M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="1024" 
+d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14
+q78 2 134 29z" />
+    <glyph glyph-name="tumblr_sign" unicode="&#xf174;" 
+d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="long_arrow_down" unicode="&#xf175;" horiz-adv-x="768" 
+d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+    <glyph glyph-name="long_arrow_up" unicode="&#xf176;" horiz-adv-x="768" 
+d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+    <glyph glyph-name="long_arrow_left" unicode="&#xf177;" horiz-adv-x="1792" 
+d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="long_arrow_right" unicode="&#xf178;" horiz-adv-x="1792" 
+d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+    <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1408" 
+d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65
+q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+    <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664" 
+d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+    <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408" 
+d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30
+t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5
+h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+    <glyph glyph-name="linux" unicode="&#xf17c;" 
+d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z
+M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7
+q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15
+q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5
+t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19
+q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63
+q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92
+q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152
+q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4
+t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5
+t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43
+q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49
+t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54
+q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5
+t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5
+t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+    <glyph glyph-name="dribble" unicode="&#xf17d;" 
+d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81
+t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19
+q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6
+t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="skype" unicode="&#xf17e;" 
+d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5
+t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5
+q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80
+q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+    <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1280" 
+d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z
+M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324
+l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+    <glyph glyph-name="trello" unicode="&#xf181;" 
+d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408
+q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280" 
+d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43
+q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024" 
+d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z
+M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="gittip" unicode="&#xf184;" 
+d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="sun" unicode="&#xf185;" horiz-adv-x="1792" 
+d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4
+l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94
+q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+    <glyph glyph-name="_366" unicode="&#xf186;" 
+d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61
+t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+    <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1792" 
+d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536
+q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1664" 
+d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207
+q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19
+t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+    <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1920" 
+d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58
+t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6
+q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24
+q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2
+q39 5 64 -2.5t31 -16.5z" />
+    <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792" 
+d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12
+q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422
+q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178
+q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z
+M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+    <glyph glyph-name="renren" unicode="&#xf18b;" 
+d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495
+q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+    <glyph glyph-name="_372" unicode="&#xf18c;" horiz-adv-x="1408" 
+d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5
+t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56
+t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5
+t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+    <glyph glyph-name="stack_exchange" unicode="&#xf18d;" horiz-adv-x="1280" 
+d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z
+" />
+    <glyph glyph-name="_374" unicode="&#xf18e;" 
+d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="arrow_circle_alt_left" unicode="&#xf190;" 
+d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_376" unicode="&#xf191;" 
+d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="dot_circle_alt" unicode="&#xf192;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5
+t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_378" unicode="&#xf193;" horiz-adv-x="1664" 
+d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128
+q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+    <glyph glyph-name="vimeo_square" unicode="&#xf194;" 
+d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179
+q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_380" unicode="&#xf195;" horiz-adv-x="1152" 
+d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160
+q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="plus_square_o" unicode="&#xf196;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832
+q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_382" unicode="&#xf197;" horiz-adv-x="2176" 
+d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40
+t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29
+q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+    <glyph glyph-name="_383" unicode="&#xf198;" horiz-adv-x="1664" 
+d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9
+q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102
+t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+    <glyph glyph-name="_384" unicode="&#xf199;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69
+q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13
+t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+    <glyph glyph-name="_385" unicode="&#xf19a;" horiz-adv-x="1792" 
+d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5
+t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21
+t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286
+t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273
+t273 -182.5t331.5 -68z" />
+    <glyph glyph-name="_386" unicode="&#xf19b;" horiz-adv-x="1792" 
+d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+    <glyph glyph-name="_387" unicode="&#xf19c;" horiz-adv-x="2048" 
+d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64
+q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+    <glyph glyph-name="_388" unicode="&#xf19d;" horiz-adv-x="2304" 
+d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433
+q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+    <glyph glyph-name="_389" unicode="&#xf19e;" 
+d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0
+q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+    <glyph glyph-name="uniF1A0" unicode="&#xf1a0;" 
+d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5
+t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
+    <glyph glyph-name="f1a1" unicode="&#xf1a1;" horiz-adv-x="1792" 
+d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26
+t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37
+q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191
+t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_392" unicode="&#xf1a2;" 
+d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54
+q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83
+q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_393" unicode="&#xf1a3;" 
+d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150
+v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103
+t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f1a4" unicode="&#xf1a4;" horiz-adv-x="1920" 
+d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328
+v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+    <glyph glyph-name="_395" unicode="&#xf1a5;" 
+d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="_396" unicode="&#xf1a6;" horiz-adv-x="2048" 
+d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
+v-369h123z" />
+    <glyph glyph-name="_397" unicode="&#xf1a7;" 
+d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101
+v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_398" unicode="&#xf1a8;" horiz-adv-x="2038" 
+d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14
+q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24
+q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33
+q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5
+t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43
+q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5
+t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13
+t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+    <glyph glyph-name="_399" unicode="&#xf1a9;" 
+d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10
+q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14
+q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14
+t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44
+q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+    <glyph glyph-name="_400" unicode="&#xf1aa;" 
+d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z
+M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5
+t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5
+q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126
+t135.5 51q85 0 145 -60.5t60 -145.5z" />
+    <glyph glyph-name="f1ab" unicode="&#xf1ab;" 
+d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5
+q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28
+q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z
+M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11
+q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5
+q20 0 20 -21v-418z" />
+    <glyph glyph-name="_402" unicode="&#xf1ac;" horiz-adv-x="1792" 
+d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48
+l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23
+t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128
+q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128
+q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+    <glyph glyph-name="_403" unicode="&#xf1ad;" 
+d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9
+t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9
+t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9
+t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+    <glyph glyph-name="_404" unicode="&#xf1ae;" horiz-adv-x="1280" 
+d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152
+q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="uniF1B1" unicode="&#xf1b0;" horiz-adv-x="1664" 
+d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5
+q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819
+q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5
+t100.5 134t141.5 55.5z" />
+    <glyph glyph-name="_406" unicode="&#xf1b1;" horiz-adv-x="768" 
+d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+    <glyph glyph-name="_407" unicode="&#xf1b2;" horiz-adv-x="1792" 
+d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z
+" />
+    <glyph glyph-name="_408" unicode="&#xf1b3;" horiz-adv-x="2304" 
+d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67
+t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70
+v-400l434 -186q36 -16 57 -48t21 -70z" />
+    <glyph glyph-name="_409" unicode="&#xf1b4;" horiz-adv-x="2048" 
+d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658
+q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204
+q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+    <glyph glyph-name="_410" unicode="&#xf1b5;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5
+t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217
+t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+    <glyph glyph-name="_411" unicode="&#xf1b6;" horiz-adv-x="1792" 
+d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5
+q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89
+q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+    <glyph glyph-name="_412" unicode="&#xf1b7;" 
+d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5
+q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5
+q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z
+" />
+    <glyph glyph-name="_413" unicode="&#xf1b8;" horiz-adv-x="1792" 
+d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188
+l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5
+t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1
+q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+    <glyph glyph-name="_414" unicode="&#xf1b9;" horiz-adv-x="2048" 
+d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384
+q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5
+l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_415" unicode="&#xf1ba;" horiz-adv-x="2048" 
+d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5
+t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z
+M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+    <glyph glyph-name="_416" unicode="&#xf1bb;" 
+d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384
+q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+    <glyph glyph-name="_417" unicode="&#xf1bc;" 
+d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64
+q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37
+q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_418" unicode="&#xf1bd;" horiz-adv-x="1024" 
+d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+    <glyph glyph-name="_419" unicode="&#xf1be;" horiz-adv-x="2304" 
+d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11
+q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245
+q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785
+l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242
+q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236
+q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786
+q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+    <glyph glyph-name="uniF1C0" unicode="&#xf1c0;" 
+d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127
+t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5
+t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+    <glyph glyph-name="uniF1C1" unicode="&#xf1c1;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197
+q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8
+q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+    <glyph glyph-name="_422" unicode="&#xf1c2;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5
+t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" />
+    <glyph glyph-name="_423" unicode="&#xf1c3;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107
+h-290v-107h68l189 -272l-194 -283h-68z" />
+    <glyph glyph-name="_424" unicode="&#xf1c4;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+    <glyph glyph-name="_425" unicode="&#xf1c5;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+    <glyph glyph-name="_426" unicode="&#xf1c6;" 
+d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400
+v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79
+q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+    <glyph glyph-name="_427" unicode="&#xf1c7;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5
+q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+    <glyph glyph-name="_428" unicode="&#xf1c8;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+    <glyph glyph-name="_429" unicode="&#xf1c9;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243
+l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+    <glyph glyph-name="_430" unicode="&#xf1ca;" 
+d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406
+q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+    <glyph glyph-name="_431" unicode="&#xf1cb;" horiz-adv-x="1792" 
+d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
+q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+    <glyph glyph-name="_432" unicode="&#xf1cc;" horiz-adv-x="2048" 
+d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94
+q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55
+t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" />
+    <glyph glyph-name="_433" unicode="&#xf1cd;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194
+q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5
+t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+    <glyph glyph-name="_434" unicode="&#xf1ce;" horiz-adv-x="1792" 
+d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5
+t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
+    <glyph glyph-name="uniF1D0" unicode="&#xf1d0;" horiz-adv-x="1792" 
+d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41
+t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170
+t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136
+q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+    <glyph glyph-name="uniF1D1" unicode="&#xf1d1;" horiz-adv-x="1792" 
+d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251
+l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162
+q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33
+q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5
+t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF1D2" unicode="&#xf1d2;" 
+d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85
+q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392
+q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072
+q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_438" unicode="&#xf1d3;" horiz-adv-x="1792" 
+d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58
+q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47
+q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171
+v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+    <glyph glyph-name="_439" unicode="&#xf1d4;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF1D5" unicode="&#xf1d5;" horiz-adv-x="1280" 
+d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5
+t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153
+t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+    <glyph glyph-name="uniF1D6" unicode="&#xf1d6;" horiz-adv-x="1792" 
+d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5
+q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20
+t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5
+t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+    <glyph glyph-name="uniF1D7" unicode="&#xf1d7;" horiz-adv-x="2048" 
+d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25
+q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5
+q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109
+q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+    <glyph glyph-name="_443" unicode="&#xf1d8;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+    <glyph glyph-name="_444" unicode="&#xf1d9;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137
+l863 639l-478 -797z" />
+    <glyph glyph-name="_445" unicode="&#xf1da;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23
+t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_446" unicode="&#xf1db;" 
+d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_447" unicode="&#xf1dc;" horiz-adv-x="1792" 
+d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15
+t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2
+t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160
+q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5
+q0 -26 -12 -48t-36 -22z" />
+    <glyph glyph-name="_448" unicode="&#xf1dd;" horiz-adv-x="1280" 
+d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179
+q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+    <glyph glyph-name="_449" unicode="&#xf1de;" 
+d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256
+q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+    <glyph glyph-name="uniF1E0" unicode="&#xf1e0;" 
+d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5
+t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+    <glyph glyph-name="_451" unicode="&#xf1e1;" 
+d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5
+t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_452" unicode="&#xf1e2;" horiz-adv-x="1792" 
+d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5
+t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91
+q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9
+t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="_453" unicode="&#xf1e3;" horiz-adv-x="1792" 
+d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323
+l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+    <glyph glyph-name="_454" unicode="&#xf1e4;" horiz-adv-x="1792" 
+d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5
+t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+    <glyph glyph-name="_455" unicode="&#xf1e5;" horiz-adv-x="1792" 
+d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z
+M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_456" unicode="&#xf1e6;" horiz-adv-x="1792" 
+d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234
+l401 400q38 37 91 37t90 -37z" />
+    <glyph glyph-name="_457" unicode="&#xf1e7;" horiz-adv-x="1792" 
+d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5
+t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z
+M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7
+t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+    <glyph glyph-name="_458" unicode="&#xf1e8;" horiz-adv-x="1792" 
+d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+    <glyph glyph-name="_459" unicode="&#xf1e9;" 
+d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36
+q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5
+t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87
+q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+    <glyph glyph-name="_460" unicode="&#xf1ea;" horiz-adv-x="2048" 
+d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19
+t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+    <glyph glyph-name="_461" unicode="&#xf1eb;" horiz-adv-x="2048" 
+d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121
+q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z
+M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+    <glyph glyph-name="_462" unicode="&#xf1ec;" horiz-adv-x="1792" 
+d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5
+t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38
+h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_463" unicode="&#xf1ed;" 
+d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246
+q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598
+q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
+    <glyph glyph-name="_464" unicode="&#xf1ee;" horiz-adv-x="1792" 
+d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640
+q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
+    <glyph glyph-name="uniF1F0" unicode="&#xf1f0;" horiz-adv-x="2304" 
+d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27
+q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128
+q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_466" unicode="&#xf1f1;" horiz-adv-x="2304" 
+d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249
+q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z
+M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32
+h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4
+q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75
+q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14
+q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22
+q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12
+q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122
+h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5
+t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_467" unicode="&#xf1f2;" horiz-adv-x="2304" 
+d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42
+q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604
+v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569
+q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73
+t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+    <glyph glyph-name="f1f3" unicode="&#xf1f3;" horiz-adv-x="2304" 
+d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z
+M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260
+l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279
+v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040
+q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168
+q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5
+t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21
+h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5
+t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+    <glyph glyph-name="_469" unicode="&#xf1f4;" horiz-adv-x="2304" 
+d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16
+t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76
+q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59
+t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489
+l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66
+q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_470" unicode="&#xf1f5;" horiz-adv-x="2304" 
+d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109
+q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118
+q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151
+q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31
+q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_471" unicode="&#xf1f6;" horiz-adv-x="2048" 
+d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5
+l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5
+l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_472" unicode="&#xf1f7;" horiz-adv-x="2048" 
+d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128
+q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161
+q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_473" unicode="&#xf1f8;" horiz-adv-x="1408" 
+d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167
+q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_474" unicode="&#xf1f9;" 
+d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5
+t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5
+t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_475" unicode="&#xf1fa;" 
+d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53
+q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24
+t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61
+t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+    <glyph glyph-name="_476" unicode="&#xf1fb;" horiz-adv-x="1792" 
+d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10
+t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+    <glyph glyph-name="f1fc" unicode="&#xf1fc;" horiz-adv-x="1792" 
+d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5
+t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+    <glyph glyph-name="_478" unicode="&#xf1fd;" horiz-adv-x="1792" 
+d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5
+t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38
+t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448
+h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5
+q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+    <glyph glyph-name="_479" unicode="&#xf1fe;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+    <glyph glyph-name="_480" unicode="&#xf200;" horiz-adv-x="1792" 
+d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_481" unicode="&#xf201;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="_482" unicode="&#xf202;" horiz-adv-x="1792" 
+d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20
+q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50
+t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1
+q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+    <glyph glyph-name="_483" unicode="&#xf203;" 
+d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73
+q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110
+q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_484" unicode="&#xf204;" horiz-adv-x="2048" 
+d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5
+t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5
+t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+    <glyph glyph-name="_485" unicode="&#xf205;" horiz-adv-x="2048" 
+d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5
+t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+    <glyph glyph-name="_486" unicode="&#xf206;" horiz-adv-x="2304" 
+d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94
+q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469
+q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400
+q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="_487" unicode="&#xf207;" 
+d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5
+h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+    <glyph glyph-name="_488" unicode="&#xf208;" horiz-adv-x="2048" 
+d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327
+q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5
+q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+    <glyph glyph-name="_489" unicode="&#xf209;" horiz-adv-x="1280" 
+d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119
+t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5
+t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14
+q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88
+q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5
+t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+    <glyph glyph-name="_490" unicode="&#xf20a;" horiz-adv-x="2048" 
+d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206
+q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307
+t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14
+t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+    <glyph glyph-name="_491" unicode="&#xf20b;" 
+d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5
+t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_492" unicode="&#xf20c;" 
+d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55
+q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410
+q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+    <glyph glyph-name="_493" unicode="&#xf20d;" 
+d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+    <glyph glyph-name="_494" unicode="&#xf20e;" horiz-adv-x="2048" 
+d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335
+q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5
+q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438
+h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66
+l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946
+l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82
+zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+    <glyph glyph-name="f210" unicode="&#xf210;" 
+d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+    <glyph glyph-name="_496" unicode="&#xf211;" 
+d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384
+q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+    <glyph glyph-name="f212" unicode="&#xf212;" horiz-adv-x="2048" 
+d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021
+q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25
+q209 0 374 -102q172 107 374 102z" />
+    <glyph glyph-name="_498" unicode="&#xf213;" horiz-adv-x="2048" 
+d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101
+q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284
+q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+    <glyph glyph-name="_499" unicode="&#xf214;" 
+d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
+l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
+v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
+M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
+v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51
+h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5
+t-43 -34t-16.5 -53.5z" />
+    <glyph glyph-name="_500" unicode="&#xf215;" horiz-adv-x="2048" 
+d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832
+q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+    <glyph glyph-name="_501" unicode="&#xf216;" horiz-adv-x="2048" 
+d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5
+t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113
+t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5
+q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+    <glyph glyph-name="_502" unicode="&#xf217;" horiz-adv-x="1664" 
+d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_503" unicode="&#xf218;" horiz-adv-x="1664" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_504" unicode="&#xf219;" horiz-adv-x="2048" 
+d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20
+l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+    <glyph glyph-name="_505" unicode="&#xf21a;" horiz-adv-x="2048" 
+d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83
+q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314
+v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+    <glyph glyph-name="_506" unicode="&#xf21b;" 
+d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14
+t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5
+q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31
+t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+    <glyph glyph-name="_507" unicode="&#xf21c;" horiz-adv-x="2304" 
+d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5
+t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105
+l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226
+t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+    <glyph glyph-name="_508" unicode="&#xf21d;" 
+d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12
+q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384
+q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5
+t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_509" unicode="&#xf21e;" horiz-adv-x="1792" 
+d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221
+q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124
+t127 -344z" />
+    <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292
+q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+    <glyph glyph-name="_511" unicode="&#xf222;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5
+q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_512" unicode="&#xf223;" horiz-adv-x="1280" 
+d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5
+t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_513" unicode="&#xf224;" 
+d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_514" unicode="&#xf225;" horiz-adv-x="1792" 
+d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9
+t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_515" unicode="&#xf226;" horiz-adv-x="1792" 
+d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23
+t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391
+q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391
+q0 -226 -154 -391q103 -57 218 -57z" />
+    <glyph glyph-name="_516" unicode="&#xf227;" horiz-adv-x="1920" 
+d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230
+q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9
+t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128
+q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+    <glyph glyph-name="_517" unicode="&#xf228;" horiz-adv-x="2048" 
+d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23
+t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9
+t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5
+t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+    <glyph glyph-name="_518" unicode="&#xf229;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5
+t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_519" unicode="&#xf22a;" horiz-adv-x="1280" 
+d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22
+t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5
+t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_520" unicode="&#xf22b;" horiz-adv-x="2048" 
+d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5
+t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5
+t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_521" unicode="&#xf22c;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_522" unicode="&#xf22d;" horiz-adv-x="1280" 
+d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123
+t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
+    <glyph glyph-name="_523" unicode="&#xf22e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_524" unicode="&#xf22f;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_525" unicode="&#xf230;" 
+d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+    <glyph glyph-name="_526" unicode="&#xf231;" horiz-adv-x="1280" 
+d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5
+l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5
+q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+    <glyph glyph-name="_527" unicode="&#xf232;" 
+d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5
+t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233
+l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+    <glyph glyph-name="_528" unicode="&#xf233;" horiz-adv-x="1792" 
+d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216
+q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+    <glyph glyph-name="_529" unicode="&#xf234;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5
+t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+    <glyph glyph-name="_530" unicode="&#xf235;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136
+q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69
+t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+    <glyph glyph-name="_531" unicode="&#xf236;" horiz-adv-x="2048" 
+d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704
+q-26 0 -45 -19t-19 -45v-384h1152z" />
+    <glyph glyph-name="_532" unicode="&#xf237;" 
+d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+    <glyph glyph-name="_533" unicode="&#xf238;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56
+t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+    <glyph glyph-name="_534" unicode="&#xf239;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47
+t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+    <glyph glyph-name="_535" unicode="&#xf23a;" horiz-adv-x="1792" 
+d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116
+q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
+    <glyph glyph-name="_536" unicode="&#xf23b;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
+    <glyph glyph-name="_537" unicode="&#xf23c;" horiz-adv-x="2296" 
+d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5
+q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5
+q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42
+q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37
+q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5
+q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139
+q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8
+t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132
+q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132
+q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z
+M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86
+t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103
+q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4
+l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130
+t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150
+q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12
+q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
+    <glyph glyph-name="_538" unicode="&#xf23d;" horiz-adv-x="2304" 
+d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5
+t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5
+t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
+    <glyph glyph-name="_539" unicode="&#xf23e;" horiz-adv-x="1792" 
+d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348
+t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23
+t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512
+q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
+    <glyph glyph-name="_540" unicode="&#xf240;" horiz-adv-x="2304" 
+d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113
+v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="_541" unicode="&#xf241;" horiz-adv-x="2304" 
+d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_542" unicode="&#xf242;" horiz-adv-x="2304" 
+d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_543" unicode="&#xf243;" horiz-adv-x="2304" 
+d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_544" unicode="&#xf244;" horiz-adv-x="2304" 
+d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23
+v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_545" unicode="&#xf245;" horiz-adv-x="1280" 
+d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
+    <glyph glyph-name="_546" unicode="&#xf246;" horiz-adv-x="1024" 
+d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
+    <glyph glyph-name="_547" unicode="&#xf247;" horiz-adv-x="2048" 
+d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
+h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
+    <glyph glyph-name="_548" unicode="&#xf248;" horiz-adv-x="2304" 
+d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
+v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
+    <glyph glyph-name="_549" unicode="&#xf249;" 
+d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
+    <glyph glyph-name="_550" unicode="&#xf24a;" 
+d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="_551" unicode="&#xf24b;" horiz-adv-x="2304" 
+d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5
+t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88
+t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90
+t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_552" unicode="&#xf24c;" horiz-adv-x="2304" 
+d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294
+t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z
+M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_553" unicode="&#xf24d;" horiz-adv-x="1792" 
+d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113
+zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_554" unicode="&#xf24e;" horiz-adv-x="2304" 
+d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91
+t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5
+t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
+    <glyph glyph-name="_555" unicode="&#xf250;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5
+t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_556" unicode="&#xf251;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
+    <glyph glyph-name="_557" unicode="&#xf252;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
+    <glyph glyph-name="_558" unicode="&#xf253;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196
+h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_559" unicode="&#xf254;" 
+d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87
+t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9
+h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
+    <glyph glyph-name="_560" unicode="&#xf255;" 
+d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25
+q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27
+t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21
+q72 69 174 69z" />
+    <glyph glyph-name="_561" unicode="&#xf256;" horiz-adv-x="1792" 
+d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33
+t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52
+h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
+    <glyph glyph-name="_562" unicode="&#xf257;" horiz-adv-x="1792" 
+d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668
+q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17
+t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5
+t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5
+q0 -42 -23 -78t-61 -53l-310 -141h91z" />
+    <glyph glyph-name="_563" unicode="&#xf258;" horiz-adv-x="2048" 
+d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32
+q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68
+q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
+    <glyph glyph-name="_564" unicode="&#xf259;" horiz-adv-x="2048" 
+d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79
+t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24
+q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26
+l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" />
+    <glyph glyph-name="_565" unicode="&#xf25a;" horiz-adv-x="1792" 
+d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5
+q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5
+v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32
+v-384h32z" />
+    <glyph glyph-name="_566" unicode="&#xf25b;" 
+d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181
+v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46
+q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5
+q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308
+q0 -53 37.5 -90.5t90.5 -37.5h668z" />
+    <glyph glyph-name="_567" unicode="&#xf25c;" horiz-adv-x="1973" 
+d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5
+t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141
+q13 0 22 -8.5t10 -20.5z" />
+    <glyph glyph-name="_568" unicode="&#xf25d;" horiz-adv-x="1792" 
+d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109
+t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640
+q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_569" unicode="&#xf25e;" horiz-adv-x="1792" 
+d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78
+q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5
+t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376
+q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
+    <glyph glyph-name="f260" unicode="&#xf260;" horiz-adv-x="2048" 
+d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
+    <glyph glyph-name="f261" unicode="&#xf261;" horiz-adv-x="1792" 
+d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_572" unicode="&#xf262;" horiz-adv-x="2304" 
+d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57
+t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197
+t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5
+t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5
+t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5
+q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
+    <glyph glyph-name="f263" unicode="&#xf263;" horiz-adv-x="1280" 
+d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5
+t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94
+q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
+    <glyph glyph-name="_574" unicode="&#xf264;" 
+d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32
+q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5
+zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_575" unicode="&#xf265;" horiz-adv-x="1720" 
+d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33
+l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
+    <glyph glyph-name="_576" unicode="&#xf266;" horiz-adv-x="2304" 
+d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540
+q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81
+l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
+    <glyph glyph-name="_577" unicode="&#xf267;" horiz-adv-x="1792" 
+d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640
+q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5
+t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5
+t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5
+t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191
+t191 -286t71 -348z" />
+    <glyph glyph-name="_578" unicode="&#xf268;" horiz-adv-x="1792" 
+d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962
+q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
+    <glyph glyph-name="_579" unicode="&#xf269;" horiz-adv-x="1792" 
+d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5
+q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5
+q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
+    <glyph glyph-name="_580" unicode="&#xf26a;" horiz-adv-x="1792" 
+d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339
+q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z
+" />
+    <glyph glyph-name="_581" unicode="&#xf26b;" horiz-adv-x="1792" 
+d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606
+q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z
+M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
+    <glyph glyph-name="_582" unicode="&#xf26c;" horiz-adv-x="2048" 
+d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23
+v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_583" unicode="&#xf26d;" horiz-adv-x="1792" 
+d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34
+h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100
+q-68 175 -180 287z" />
+    <glyph glyph-name="_584" unicode="&#xf26e;" 
+d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6
+q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13
+q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249
+q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183
+q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46
+t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
+    <glyph glyph-name="_585" unicode="&#xf270;" horiz-adv-x="1792" 
+d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z
+M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30
+q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57
+t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133
+q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
+    <glyph glyph-name="_586" unicode="&#xf271;" horiz-adv-x="1792" 
+d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9
+h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224
+v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
+    <glyph glyph-name="_587" unicode="&#xf272;" horiz-adv-x="1792" 
+d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23
+t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_588" unicode="&#xf273;" horiz-adv-x="1792" 
+d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z
+M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_589" unicode="&#xf274;" horiz-adv-x="1792" 
+d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23
+t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_590" unicode="&#xf275;" horiz-adv-x="1792" 
+d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
+    <glyph glyph-name="_591" unicode="&#xf276;" horiz-adv-x="1024" 
+d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249
+q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
+    <glyph glyph-name="_592" unicode="&#xf277;" horiz-adv-x="1792" 
+d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768
+q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
+    <glyph glyph-name="_593" unicode="&#xf278;" horiz-adv-x="2048" 
+d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
+v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
+    <glyph glyph-name="_594" unicode="&#xf279;" horiz-adv-x="1792" 
+d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
+q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
+    <glyph glyph-name="_595" unicode="&#xf27a;" horiz-adv-x="1792" 
+d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37
+t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="_596" unicode="&#xf27b;" horiz-adv-x="1792" 
+d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5
+t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51
+t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
+    <glyph glyph-name="_597" unicode="&#xf27c;" horiz-adv-x="1024" 
+d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
+    <glyph glyph-name="_598" unicode="&#xf27d;" horiz-adv-x="1792" 
+d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246
+q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
+    <glyph glyph-name="f27e" unicode="&#xf27e;" 
+d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
+    <glyph glyph-name="uniF280" unicode="&#xf280;" 
+d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72
+h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275
+l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
+    <glyph glyph-name="uniF281" unicode="&#xf281;" horiz-adv-x="1792" 
+d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5
+l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44
+t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106
+q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
+    <glyph glyph-name="_602" unicode="&#xf282;" horiz-adv-x="1792" 
+d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53
+q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
+    <glyph glyph-name="_603" unicode="&#xf283;" horiz-adv-x="2304" 
+d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
+    <glyph glyph-name="_604" unicode="&#xf284;" horiz-adv-x="1792" 
+d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308
+t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20
+t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" />
+    <glyph glyph-name="uniF285" unicode="&#xf285;" horiz-adv-x="1792" 
+d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
+    <glyph glyph-name="uniF286" unicode="&#xf286;" horiz-adv-x="1792" 
+d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96
+q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5
+q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96
+q16 0 16 -16z" />
+    <glyph glyph-name="_607" unicode="&#xf287;" horiz-adv-x="2304" 
+d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96
+q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5
+t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
+    <glyph glyph-name="_608" unicode="&#xf288;" horiz-adv-x="1792" 
+d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348
+t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_609" unicode="&#xf289;" horiz-adv-x="2304" 
+d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22
+q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5
+q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13
+q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
+    <glyph glyph-name="_610" unicode="&#xf28a;" 
+d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83
+t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20
+q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5
+t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
+    <glyph glyph-name="_611" unicode="&#xf28b;" 
+d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103
+t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_612" unicode="&#xf28c;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
+    <glyph glyph-name="_613" unicode="&#xf28d;" 
+d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="_614" unicode="&#xf28e;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
+    <glyph glyph-name="_615" unicode="&#xf290;" horiz-adv-x="1792" 
+d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_616" unicode="&#xf291;" horiz-adv-x="2048" 
+d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5
+t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416
+q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441
+h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
+    <glyph glyph-name="_617" unicode="&#xf292;" horiz-adv-x="1792" 
+d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12
+q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311
+q15 0 25 -12q9 -12 6 -28z" />
+    <glyph glyph-name="_618" unicode="&#xf293;" 
+d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5
+t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
+    <glyph glyph-name="_619" unicode="&#xf294;" horiz-adv-x="1024" 
+d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
+    <glyph glyph-name="_620" unicode="&#xf295;" 
+d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5
+t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_621" unicode="&#xf296;" horiz-adv-x="1792" 
+d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
+    <glyph glyph-name="_622" unicode="&#xf297;" horiz-adv-x="1792" 
+d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111
+q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
+    <glyph glyph-name="_623" unicode="&#xf298;" 
+d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14
+t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
+    <glyph glyph-name="_624" unicode="&#xf299;" horiz-adv-x="1792" 
+d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57
+q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285
+q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
+    <glyph glyph-name="_625" unicode="&#xf29a;" horiz-adv-x="1792" 
+d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42
+q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298
+t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_626" unicode="&#xf29b;" 
+d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300
+l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z
+M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
+    <glyph glyph-name="_627" unicode="&#xf29c;" 
+d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5
+t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5
+t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5
+t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_628" unicode="&#xf29d;" horiz-adv-x="1408" 
+d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457
+q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521
+q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661
+q3 -1 7 1t7 4l3 2q11 9 11 17z" />
+    <glyph glyph-name="_629" unicode="&#xf29e;" horiz-adv-x="2304" 
+d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10
+t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5
+t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5
+h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96
+t9.5 -70.5z" />
+    <glyph glyph-name="uniF2A0" unicode="&#xf2a0;" horiz-adv-x="1408" 
+d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5
+q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127
+l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272
+t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249
+q-18 -19 -45 -19z" />
+    <glyph glyph-name="uniF2A1" unicode="&#xf2a1;" horiz-adv-x="2176" 
+d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136
+t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56
+t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56
+t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136
+t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="uniF2A2" unicode="&#xf2a2;" horiz-adv-x="1792" 
+d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z
+M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72
+t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45
+t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4
+q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
+    <glyph glyph-name="uniF2A3" unicode="&#xf2a3;" horiz-adv-x="2304" 
+d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55
+q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5
+q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101
+q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35
+q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5
+q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
+    <glyph glyph-name="uniF2A4" unicode="&#xf2a4;" horiz-adv-x="1792" 
+d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19
+t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74
+t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233
+l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
+    <glyph glyph-name="uniF2A5" unicode="&#xf2a5;" 
+d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2
+q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10
+q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2A6" unicode="&#xf2a6;" horiz-adv-x="1535" 
+d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5
+l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5
+q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9
+q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
+    <glyph glyph-name="uniF2A7" unicode="&#xf2a7;" horiz-adv-x="1664" 
+d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37
+t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
+l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148
+q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26
+l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
+    <glyph glyph-name="uniF2A8" unicode="&#xf2a8;" horiz-adv-x="1792" 
+d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5
+q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841
+q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5
+q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
+    <glyph glyph-name="uniF2A9" unicode="&#xf2a9;" horiz-adv-x="1280" 
+d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5
+q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z
+M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
+    <glyph glyph-name="uniF2AA" unicode="&#xf2aa;" 
+d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z
+M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5
+q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AB" unicode="&#xf2ab;" 
+d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114
+q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5
+t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="uniF2AC" unicode="&#xf2ac;" horiz-adv-x="1664" 
+d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35
+q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5
+t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
+    <glyph glyph-name="uniF2AD" unicode="&#xf2ad;" 
+d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115
+q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15
+t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AE" unicode="&#xf2ae;" horiz-adv-x="2304" 
+d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7
+q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158
+q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
+    <glyph glyph-name="uniF2B0" unicode="&#xf2b0;" 
+d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104
+q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108
+l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z
+M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
+    <glyph glyph-name="uniF2B1" unicode="&#xf2b1;" horiz-adv-x="1664" 
+d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5
+t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
+    <glyph glyph-name="uniF2B2" unicode="&#xf2b2;" horiz-adv-x="1792" 
+d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5
+t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114
+q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50
+q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5
+t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46
+q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5
+q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177
+t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
+    <glyph glyph-name="uniF2B3" unicode="&#xf2b3;" 
+d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110
+h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="uniF2B4" unicode="&#xf2b4;" 
+d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5
+q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B5" unicode="&#xf2b5;" horiz-adv-x="2304" 
+d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66
+l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180
+q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z
+M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421
+q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B6" unicode="&#xf2b6;" horiz-adv-x="1792" 
+d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107
+t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39
+q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" />
+    <glyph glyph-name="uniF2B7" unicode="&#xf2b7;" horiz-adv-x="1792" 
+d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5
+l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5
+h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94
+q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" />
+    <glyph glyph-name="uniF2B8" unicode="&#xf2b8;" 
+d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465
+l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161
+q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74
+q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" />
+    <glyph glyph-name="uniF2B9" unicode="&#xf2b9;" horiz-adv-x="1664" 
+d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576
+q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216
+q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="uniF2BA" unicode="&#xf2ba;" horiz-adv-x="1664" 
+d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5
+t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96
+q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216
+q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" />
+    <glyph glyph-name="uniF2BB" unicode="&#xf2bb;" horiz-adv-x="2048" 
+d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z
+M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568
+q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9
+h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BC" unicode="&#xf2bc;" horiz-adv-x="2048" 
+d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925
+q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568
+q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5
+t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113
+t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BD" unicode="&#xf2bd;" horiz-adv-x="1792" 
+d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5
+t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2BE" unicode="&#xf2be;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61
+t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z" />
+    <glyph glyph-name="uniF2C0" unicode="&#xf2c0;" 
+d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5
+t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145
+q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" />
+    <glyph glyph-name="uniF2C1" unicode="&#xf2c1;" horiz-adv-x="1280" 
+d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5
+t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352
+q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C2" unicode="&#xf2c2;" horiz-adv-x="2048" 
+d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56
+t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23
+v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728
+q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C3" unicode="&#xf2c3;" horiz-adv-x="2048" 
+d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z
+M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47
+h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C4" unicode="&#xf2c4;" horiz-adv-x="1792" 
+d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117
+q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5
+t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" />
+    <glyph glyph-name="uniF2C5" unicode="&#xf2c5;" horiz-adv-x="2304" 
+d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21
+t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46
+t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54
+t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29
+q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5
+t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314
+q2 -42 2 -64z" />
+    <glyph glyph-name="uniF2C6" unicode="&#xf2c6;" horiz-adv-x="1792" 
+d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2C7" unicode="&#xf2c7;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C8" unicode="&#xf2c8;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C9" unicode="&#xf2c9;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CA" unicode="&#xf2ca;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CB" unicode="&#xf2cb;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z
+M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
+    <glyph glyph-name="uniF2CC" unicode="&#xf2cc;" horiz-adv-x="1920" 
+d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41
+t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19
+t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19
+t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" />
+    <glyph glyph-name="uniF2CD" unicode="&#xf2cd;" horiz-adv-x="1792" 
+d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42
+q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9
+t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23
+t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" />
+    <glyph glyph-name="uniF2CE" unicode="&#xf2ce;" 
+d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5
+t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70
+q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20
+q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5
+t72.5 -263.5z" />
+    <glyph glyph-name="uniF2D0" unicode="&#xf2d0;" horiz-adv-x="1792" 
+d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D1" unicode="&#xf2d1;" horiz-adv-x="1792" 
+d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D2" unicode="&#xf2d2;" horiz-adv-x="2048" 
+d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="uniF2D3" unicode="&#xf2d3;" horiz-adv-x="1792" 
+d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10
+l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D4" unicode="&#xf2d4;" horiz-adv-x="1792" 
+d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D5" unicode="&#xf2d5;" horiz-adv-x="1792" 
+d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D6" unicode="&#xf2d6;" horiz-adv-x="1794" 
+d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12
+t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5
+t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5
+q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5
+q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34
+q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5
+t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D7" unicode="&#xf2d7;" 
+d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89
+q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5
+t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" />
+    <glyph glyph-name="uniF2D8" unicode="&#xf2d8;" 
+d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7
+t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5
+h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113
+v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D9" unicode="&#xf2d9;" horiz-adv-x="2176" 
+d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584
+q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5
+q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15
+q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82
+q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104
+t302 11t306.5 -97q220 -115 333 -336t87 -474z" />
+    <glyph glyph-name="uniF2DA" unicode="&#xf2da;" horiz-adv-x="1792" 
+d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178
+q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199
+t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297
+t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208
+t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" />
+    <glyph glyph-name="uniF2DB" unicode="&#xf2db;" 
+d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16
+q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28
+t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32
+q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16
+h48q16 0 16 -16z" />
+    <glyph glyph-name="uniF2DC" unicode="&#xf2dc;" horiz-adv-x="1664" 
+d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45
+t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33
+q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313
+l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106
+q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" />
+    <glyph glyph-name="uniF2DD" unicode="&#xf2dd;" horiz-adv-x="1792" 
+d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321
+q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" />
+    <glyph glyph-name="uniF2DE" unicode="&#xf2de;" horiz-adv-x="1792" 
+d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62
+t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71
+t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2E0" unicode="&#xf2e0;" horiz-adv-x="1920" 
+d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3
+t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53
+q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5
+q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5
+t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5
+q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z
+M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21
+q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16
+q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" />
+    <glyph glyph-name="uniF2E1" unicode="&#xf2e1;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E2" unicode="&#xf2e2;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E3" unicode="&#xf2e3;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E4" unicode="&#xf2e4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E5" unicode="&#xf2e5;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E6" unicode="&#xf2e6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E7" unicode="&#xf2e7;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_698" unicode="&#xf2e8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E9" unicode="&#xf2e9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EA" unicode="&#xf2ea;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EB" unicode="&#xf2eb;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EC" unicode="&#xf2ec;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2ED" unicode="&#xf2ed;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EE" unicode="&#xf2ee;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="lessequal" unicode="&#xf500;" horiz-adv-x="1792" 
+ />
+  </font>
+</defs></svg>
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.ttf b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.ttf differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.woff b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..400014a4b06eee3d0c0d54402a47ab2601b2862b
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.woff differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.woff2 b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/fontawesome-webfont.woff2 differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold-italic.woff b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold-italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..88ad05b9ff413055b4d4e89dd3eec1c193fa20c6
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold-italic.woff differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold-italic.woff2 b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..c4e3d804b57b625b16a36d767bfca6bbf63d414e
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold-italic.woff2 differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold.woff b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..c6dff51f063cc732fdb5fe786a8966de85f4ebec
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold.woff differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold.woff2 b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..bb195043cfc07fa52741c6144d7378b5ba8be4c5
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-bold.woff2 differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal-italic.woff b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal-italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..76114bc03362242c3325ecda6ce6d02bb737880f
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal-italic.woff differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal-italic.woff2 b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..3404f37e2e312757841abe20343588a7740768ca
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal-italic.woff2 differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal.woff b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal.woff
new file mode 100644
index 0000000000000000000000000000000000000000..ae1307ff5f4c48678621c240f8972d5a6e20b22c
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal.woff differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal.woff2 b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..3bf9843328a6359b6bd06e50010319c63da0d717
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/css/fonts/lato-normal.woff2 differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/css/theme.css b/VimbaX/doc/VmbC_Function_Reference/_static/css/theme.css
new file mode 100644
index 0000000000000000000000000000000000000000..0d9ae7e1a45b82198c53548383a570d924993371
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/css/theme.css
@@ -0,0 +1,4 @@
+html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/custom.css b/VimbaX/doc/VmbC_Function_Reference/_static/custom.css
new file mode 100644
index 0000000000000000000000000000000000000000..253f08d4161357c64af867f6f9e091a12b22e1e8
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/custom.css
@@ -0,0 +1,6247 @@
+html {
+  box-sizing: border-box;
+}
+*,
+:after,
+:before {
+  box-sizing: inherit;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+  display: block;
+}
+audio,
+canvas,
+video {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+}
+[hidden],
+audio:not([controls]) {
+  display: none;
+}
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+html {
+  font-size: 100%;
+  -webkit-text-size-adjust: 100%;
+  -ms-text-size-adjust: 100%;
+}
+body {
+  margin: 0;
+}
+a:active,
+a:hover {
+  outline: 0;
+}
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+b,
+strong {
+  font-weight: 700;
+}
+blockquote {
+  margin: 0;
+}
+dfn {
+  font-style: italic;
+}
+ins {
+  background: #ff9;
+  text-decoration: none;
+}
+ins,
+mark {
+  color: #000;
+}
+mark {
+  background: #ff0;
+  font-style: italic;
+  font-weight: 700;
+}
+.rst-content code,
+.rst-content tt,
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, serif;
+  _font-family: courier new, monospace;
+  font-size: 1em;
+}
+pre {
+  white-space: pre;
+}
+q {
+  quotes: none;
+}
+q:after,
+q:before {
+  content: "";
+  content: none;
+}
+small {
+  font-size: 85%;
+}
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+sup {
+  top: -0.5em;
+}
+sub {
+  bottom: -0.25em;
+}
+dl,
+ol,
+ul {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  list-style-image: none;
+}
+li {
+  list-style: none;
+}
+dd {
+  margin: 0;
+}
+img {
+  border: 0;
+  -ms-interpolation-mode: bicubic;
+  vertical-align: middle;
+  max-width: 100%;
+}
+svg:not(:root) {
+  overflow: hidden;
+}
+figure,
+form {
+  margin: 0;
+}
+label {
+  cursor: pointer;
+}
+button,
+input,
+select,
+textarea {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+}
+button,
+input {
+  line-height: normal;
+}
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  cursor: pointer;
+  -webkit-appearance: button;
+  *overflow: visible;
+}
+button[disabled],
+input[disabled] {
+  cursor: default;
+}
+input[type="search"] {
+  -webkit-appearance: textfield;
+  -moz-box-sizing: content-box;
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+}
+textarea {
+  resize: vertical;
+}
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+td {
+  vertical-align: top;
+}
+.chromeframe {
+  margin: 0.2em 0;
+  background: #ccc;
+  color: #000;
+  padding: 0.2em 0;
+}
+.ir {
+  display: block;
+  border: 0;
+  text-indent: -999em;
+  overflow: hidden;
+  background-color: transparent;
+  background-repeat: no-repeat;
+  text-align: left;
+  direction: ltr;
+  *line-height: 0;
+}
+.ir br {
+  display: none;
+}
+.hidden {
+  display: none !important;
+  visibility: hidden;
+}
+.visuallyhidden {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+}
+.visuallyhidden.focusable:active,
+.visuallyhidden.focusable:focus {
+  clip: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  position: static;
+  width: auto;
+}
+.invisible {
+  visibility: hidden;
+}
+.relative {
+  position: relative;
+}
+big,
+small {
+  font-size: 100%;
+}
+@media print {
+  body,
+  html,
+  section {
+    background: none !important;
+  }
+  * {
+    box-shadow: none !important;
+    text-shadow: none !important;
+    filter: none !important;
+    -ms-filter: none !important;
+  }
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+  .ir a:after,
+  a[href^="#"]:after,
+  a[href^="javascript:"]:after {
+    content: "";
+  }
+  blockquote,
+  pre {
+    page-break-inside: avoid;
+  }
+  thead {
+    display: table-header-group;
+  }
+  img,
+  tr {
+    page-break-inside: avoid;
+  }
+  img {
+    max-width: 100% !important;
+  }
+  @page {
+    margin: 0.5cm;
+  }
+  .rst-content .toctree-wrapper > p.caption,
+  h2,
+  h3,
+  p {
+    orphans: 3;
+    widows: 3;
+  }
+  .rst-content .toctree-wrapper > p.caption,
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+}
+.btn,
+.fa:before,
+.icon:before,
+.rst-content .admonition,
+.rst-content .admonition-title:before,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .code-block-caption .headerlink:before,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning,
+.rst-content code.download span:first-child:before,
+.rst-content dl dt .headerlink:before,
+.rst-content h1 .headerlink:before,
+.rst-content h2 .headerlink:before,
+.rst-content h3 .headerlink:before,
+.rst-content h4 .headerlink:before,
+.rst-content h5 .headerlink:before,
+.rst-content h6 .headerlink:before,
+.rst-content p.caption .headerlink:before,
+.rst-content table > caption .headerlink:before,
+.rst-content tt.download span:first-child:before,
+.wy-alert,
+.wy-dropdown .caret:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,
+.wy-menu-vertical li.current > a,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a,
+.wy-menu-vertical li.on a span.toctree-expand:before,
+.wy-menu-vertical li span.toctree-expand:before,
+.wy-nav-top a,
+.wy-side-nav-search .wy-dropdown > a,
+.wy-side-nav-search > a,
+input[type="color"],
+input[type="date"],
+input[type="datetime-local"],
+input[type="datetime"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"],
+select,
+textarea {
+  -webkit-font-smoothing: antialiased;
+}
+.clearfix {
+  *zoom: 1;
+}
+.clearfix:after,
+.clearfix:before {
+  display: table;
+  content: "";
+}
+.clearfix:after {
+  clear: both;
+} /*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+@font-face {
+  font-family: FontAwesome;
+  src: url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);
+  src: url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0)
+      format("embedded-opentype"),
+    url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e)
+      format("woff2"),
+    url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad)
+      format("woff"),
+    url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9)
+      format("truetype"),
+    url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular)
+      format("svg");
+  font-weight: 400;
+  font-style: normal;
+}
+.fa,
+.icon,
+.rst-content .admonition-title,
+.rst-content .code-block-caption .headerlink,
+.rst-content code.download span:first-child,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink,
+.rst-content tt.download span:first-child,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li span.toctree-expand {
+  display: inline-block;
+  font: normal normal normal 14px/1 FontAwesome;
+  font-size: inherit;
+  text-rendering: auto;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.fa-lg {
+  font-size: 1.33333em;
+  line-height: 0.75em;
+  vertical-align: -15%;
+}
+.fa-2x {
+  font-size: 2em;
+}
+.fa-3x {
+  font-size: 3em;
+}
+.fa-4x {
+  font-size: 4em;
+}
+.fa-5x {
+  font-size: 5em;
+}
+.fa-fw {
+  width: 1.28571em;
+  text-align: center;
+}
+.fa-ul {
+  padding-left: 0;
+  margin-left: 2.14286em;
+  list-style-type: none;
+}
+.fa-ul > li {
+  position: relative;
+}
+.fa-li {
+  position: absolute;
+  left: -2.14286em;
+  width: 2.14286em;
+  top: 0.14286em;
+  text-align: center;
+}
+.fa-li.fa-lg {
+  left: -1.85714em;
+}
+.fa-border {
+  padding: 0.2em 0.25em 0.15em;
+  border: 0.08em solid #eee;
+  border-radius: 0.1em;
+}
+.fa-pull-left {
+  float: left;
+}
+.fa-pull-right {
+  float: right;
+}
+.fa-pull-left.icon,
+.fa.fa-pull-left,
+.rst-content .code-block-caption .fa-pull-left.headerlink,
+.rst-content .fa-pull-left.admonition-title,
+.rst-content code.download span.fa-pull-left:first-child,
+.rst-content dl dt .fa-pull-left.headerlink,
+.rst-content h1 .fa-pull-left.headerlink,
+.rst-content h2 .fa-pull-left.headerlink,
+.rst-content h3 .fa-pull-left.headerlink,
+.rst-content h4 .fa-pull-left.headerlink,
+.rst-content h5 .fa-pull-left.headerlink,
+.rst-content h6 .fa-pull-left.headerlink,
+.rst-content p.caption .fa-pull-left.headerlink,
+.rst-content table > caption .fa-pull-left.headerlink,
+.rst-content tt.download span.fa-pull-left:first-child,
+.wy-menu-vertical li.current > a span.fa-pull-left.toctree-expand,
+.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,
+.wy-menu-vertical li span.fa-pull-left.toctree-expand {
+  margin-right: 0.3em;
+}
+.fa-pull-right.icon,
+.fa.fa-pull-right,
+.rst-content .code-block-caption .fa-pull-right.headerlink,
+.rst-content .fa-pull-right.admonition-title,
+.rst-content code.download span.fa-pull-right:first-child,
+.rst-content dl dt .fa-pull-right.headerlink,
+.rst-content h1 .fa-pull-right.headerlink,
+.rst-content h2 .fa-pull-right.headerlink,
+.rst-content h3 .fa-pull-right.headerlink,
+.rst-content h4 .fa-pull-right.headerlink,
+.rst-content h5 .fa-pull-right.headerlink,
+.rst-content h6 .fa-pull-right.headerlink,
+.rst-content p.caption .fa-pull-right.headerlink,
+.rst-content table > caption .fa-pull-right.headerlink,
+.rst-content tt.download span.fa-pull-right:first-child,
+.wy-menu-vertical li.current > a span.fa-pull-right.toctree-expand,
+.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,
+.wy-menu-vertical li span.fa-pull-right.toctree-expand {
+  margin-left: 0.3em;
+}
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+.fa.pull-left,
+.pull-left.icon,
+.rst-content .code-block-caption .pull-left.headerlink,
+.rst-content .pull-left.admonition-title,
+.rst-content code.download span.pull-left:first-child,
+.rst-content dl dt .pull-left.headerlink,
+.rst-content h1 .pull-left.headerlink,
+.rst-content h2 .pull-left.headerlink,
+.rst-content h3 .pull-left.headerlink,
+.rst-content h4 .pull-left.headerlink,
+.rst-content h5 .pull-left.headerlink,
+.rst-content h6 .pull-left.headerlink,
+.rst-content p.caption .pull-left.headerlink,
+.rst-content table > caption .pull-left.headerlink,
+.rst-content tt.download span.pull-left:first-child,
+.wy-menu-vertical li.current > a span.pull-left.toctree-expand,
+.wy-menu-vertical li.on a span.pull-left.toctree-expand,
+.wy-menu-vertical li span.pull-left.toctree-expand {
+  margin-right: 0.3em;
+}
+.fa.pull-right,
+.pull-right.icon,
+.rst-content .code-block-caption .pull-right.headerlink,
+.rst-content .pull-right.admonition-title,
+.rst-content code.download span.pull-right:first-child,
+.rst-content dl dt .pull-right.headerlink,
+.rst-content h1 .pull-right.headerlink,
+.rst-content h2 .pull-right.headerlink,
+.rst-content h3 .pull-right.headerlink,
+.rst-content h4 .pull-right.headerlink,
+.rst-content h5 .pull-right.headerlink,
+.rst-content h6 .pull-right.headerlink,
+.rst-content p.caption .pull-right.headerlink,
+.rst-content table > caption .pull-right.headerlink,
+.rst-content tt.download span.pull-right:first-child,
+.wy-menu-vertical li.current > a span.pull-right.toctree-expand,
+.wy-menu-vertical li.on a span.pull-right.toctree-expand,
+.wy-menu-vertical li span.pull-right.toctree-expand {
+  margin-left: 0.3em;
+}
+.fa-spin {
+  -webkit-animation: fa-spin 2s linear infinite;
+  animation: fa-spin 2s linear infinite;
+}
+.fa-pulse {
+  -webkit-animation: fa-spin 1s steps(8) infinite;
+  animation: fa-spin 1s steps(8) infinite;
+}
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+.fa-rotate-90 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+  -webkit-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.fa-rotate-180 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+  -webkit-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.fa-rotate-270 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+  -webkit-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+  -webkit-transform: scaleX(-1);
+  -ms-transform: scaleX(-1);
+  transform: scaleX(-1);
+}
+.fa-flip-vertical {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+  -webkit-transform: scaleY(-1);
+  -ms-transform: scaleY(-1);
+  transform: scaleY(-1);
+}
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical,
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270 {
+  filter: none;
+}
+.fa-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.fa-stack-1x {
+  line-height: inherit;
+}
+.fa-stack-2x {
+  font-size: 2em;
+}
+.fa-inverse {
+  color: #fff;
+}
+.fa-glass:before {
+  content: "";
+}
+.fa-music:before {
+  content: "";
+}
+.fa-search:before,
+.icon-search:before {
+  content: "";
+}
+.fa-envelope-o:before {
+  content: "";
+}
+.fa-heart:before {
+  content: "";
+}
+.fa-star:before {
+  content: "";
+}
+.fa-star-o:before {
+  content: "";
+}
+.fa-user:before {
+  content: "";
+}
+.fa-film:before {
+  content: "";
+}
+.fa-th-large:before {
+  content: "";
+}
+.fa-th:before {
+  content: "";
+}
+.fa-th-list:before {
+  content: "";
+}
+.fa-check:before {
+  content: "";
+}
+.fa-close:before,
+.fa-remove:before,
+.fa-times:before {
+  content: "";
+}
+.fa-search-plus:before {
+  content: "";
+}
+.fa-search-minus:before {
+  content: "";
+}
+.fa-power-off:before {
+  content: "";
+}
+.fa-signal:before {
+  content: "";
+}
+.fa-cog:before,
+.fa-gear:before {
+  content: "";
+}
+.fa-trash-o:before {
+  content: "";
+}
+.fa-home:before,
+.icon-home:before {
+  content: "";
+}
+.fa-file-o:before {
+  content: "";
+}
+.fa-clock-o:before {
+  content: "";
+}
+.fa-road:before {
+  content: "";
+}
+.fa-download:before,
+.rst-content code.download span:first-child:before,
+.rst-content tt.download span:first-child:before {
+  content: "";
+}
+.fa-arrow-circle-o-down:before {
+  content: "";
+}
+.fa-arrow-circle-o-up:before {
+  content: "";
+}
+.fa-inbox:before {
+  content: "";
+}
+.fa-play-circle-o:before {
+  content: "";
+}
+.fa-repeat:before,
+.fa-rotate-right:before {
+  content: "";
+}
+.fa-refresh:before {
+  content: "";
+}
+.fa-list-alt:before {
+  content: "";
+}
+.fa-lock:before {
+  content: "";
+}
+.fa-flag:before {
+  content: "";
+}
+.fa-headphones:before {
+  content: "";
+}
+.fa-volume-off:before {
+  content: "";
+}
+.fa-volume-down:before {
+  content: "";
+}
+.fa-volume-up:before {
+  content: "";
+}
+.fa-qrcode:before {
+  content: "";
+}
+.fa-barcode:before {
+  content: "";
+}
+.fa-tag:before {
+  content: "";
+}
+.fa-tags:before {
+  content: "";
+}
+.fa-book:before,
+.icon-book:before {
+  content: "";
+}
+.fa-bookmark:before {
+  content: "";
+}
+.fa-print:before {
+  content: "";
+}
+.fa-camera:before {
+  content: "";
+}
+.fa-font:before {
+  content: "";
+}
+.fa-bold:before {
+  content: "";
+}
+.fa-italic:before {
+  content: "";
+}
+.fa-text-height:before {
+  content: "";
+}
+.fa-text-width:before {
+  content: "";
+}
+.fa-align-left:before {
+  content: "";
+}
+.fa-align-center:before {
+  content: "";
+}
+.fa-align-right:before {
+  content: "";
+}
+.fa-align-justify:before {
+  content: "";
+}
+.fa-list:before {
+  content: "";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+  content: "";
+}
+.fa-indent:before {
+  content: "";
+}
+.fa-video-camera:before {
+  content: "";
+}
+.fa-image:before,
+.fa-photo:before,
+.fa-picture-o:before {
+  content: "";
+}
+.fa-pencil:before {
+  content: "";
+}
+.fa-map-marker:before {
+  content: "";
+}
+.fa-adjust:before {
+  content: "";
+}
+.fa-tint:before {
+  content: "";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+  content: "";
+}
+.fa-share-square-o:before {
+  content: "";
+}
+.fa-check-square-o:before {
+  content: "";
+}
+.fa-arrows:before {
+  content: "";
+}
+.fa-step-backward:before {
+  content: "";
+}
+.fa-fast-backward:before {
+  content: "";
+}
+.fa-backward:before {
+  content: "";
+}
+.fa-play:before {
+  content: "";
+}
+.fa-pause:before {
+  content: "";
+}
+.fa-stop:before {
+  content: "";
+}
+.fa-forward:before {
+  content: "";
+}
+.fa-fast-forward:before {
+  content: "";
+}
+.fa-step-forward:before {
+  content: "";
+}
+.fa-eject:before {
+  content: "";
+}
+.fa-chevron-left:before {
+  content: "";
+}
+.fa-chevron-right:before {
+  content: "";
+}
+.fa-plus-circle:before {
+  content: "";
+}
+.fa-minus-circle:before {
+  content: "";
+}
+.fa-times-circle:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before {
+  content: "";
+}
+.fa-check-circle:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before {
+  content: "";
+}
+.fa-question-circle:before {
+  content: "";
+}
+.fa-info-circle:before {
+  content: "";
+}
+.fa-crosshairs:before {
+  content: "";
+}
+.fa-times-circle-o:before {
+  content: "";
+}
+.fa-check-circle-o:before {
+  content: "";
+}
+.fa-ban:before {
+  content: "";
+}
+.fa-arrow-left:before {
+  content: "";
+}
+.fa-arrow-right:before {
+  content: "";
+}
+.fa-arrow-up:before {
+  content: "";
+}
+.fa-arrow-down:before {
+  content: "";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+  content: "";
+}
+.fa-expand:before {
+  content: "";
+}
+.fa-compress:before {
+  content: "";
+}
+.fa-plus:before {
+  content: "";
+}
+.fa-minus:before {
+  content: "";
+}
+.fa-asterisk:before {
+  content: "";
+}
+.fa-exclamation-circle:before,
+.rst-content .admonition-title:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before {
+  content: "";
+}
+.fa-gift:before {
+  content: "";
+}
+.fa-leaf:before {
+  content: "";
+}
+.fa-fire:before,
+.icon-fire:before {
+  content: "";
+}
+.fa-eye:before {
+  content: "";
+}
+.fa-eye-slash:before {
+  content: "";
+}
+.fa-exclamation-triangle:before,
+.fa-warning:before {
+  content: "";
+}
+.fa-plane:before {
+  content: "";
+}
+.fa-calendar:before {
+  content: "";
+}
+.fa-random:before {
+  content: "";
+}
+.fa-comment:before {
+  content: "";
+}
+.fa-magnet:before {
+  content: "";
+}
+.fa-chevron-up:before {
+  content: "";
+}
+.fa-chevron-down:before {
+  content: "";
+}
+.fa-retweet:before {
+  content: "";
+}
+.fa-shopping-cart:before {
+  content: "";
+}
+.fa-folder:before {
+  content: "";
+}
+.fa-folder-open:before {
+  content: "";
+}
+.fa-arrows-v:before {
+  content: "";
+}
+.fa-arrows-h:before {
+  content: "";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+  content: "";
+}
+.fa-twitter-square:before {
+  content: "";
+}
+.fa-facebook-square:before {
+  content: "";
+}
+.fa-camera-retro:before {
+  content: "";
+}
+.fa-key:before {
+  content: "";
+}
+.fa-cogs:before,
+.fa-gears:before {
+  content: "";
+}
+.fa-comments:before {
+  content: "";
+}
+.fa-thumbs-o-up:before {
+  content: "";
+}
+.fa-thumbs-o-down:before {
+  content: "";
+}
+.fa-star-half:before {
+  content: "";
+}
+.fa-heart-o:before {
+  content: "";
+}
+.fa-sign-out:before {
+  content: "";
+}
+.fa-linkedin-square:before {
+  content: "";
+}
+.fa-thumb-tack:before {
+  content: "";
+}
+.fa-external-link:before {
+  content: "";
+}
+.fa-sign-in:before {
+  content: "";
+}
+.fa-trophy:before {
+  content: "";
+}
+.fa-github-square:before {
+  content: "";
+}
+.fa-upload:before {
+  content: "";
+}
+.fa-lemon-o:before {
+  content: "";
+}
+.fa-phone:before {
+  content: "";
+}
+.fa-square-o:before {
+  content: "";
+}
+.fa-bookmark-o:before {
+  content: "";
+}
+.fa-phone-square:before {
+  content: "";
+}
+.fa-twitter:before {
+  content: "";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+  content: "";
+}
+.fa-github:before,
+.icon-github:before {
+  content: "";
+}
+.fa-unlock:before {
+  content: "";
+}
+.fa-credit-card:before {
+  content: "";
+}
+.fa-feed:before,
+.fa-rss:before {
+  content: "";
+}
+.fa-hdd-o:before {
+  content: "";
+}
+.fa-bullhorn:before {
+  content: "";
+}
+.fa-bell:before {
+  content: "";
+}
+.fa-certificate:before {
+  content: "";
+}
+.fa-hand-o-right:before {
+  content: "";
+}
+.fa-hand-o-left:before {
+  content: "";
+}
+.fa-hand-o-up:before {
+  content: "";
+}
+.fa-hand-o-down:before {
+  content: "";
+}
+.fa-arrow-circle-left:before,
+.icon-circle-arrow-left:before {
+  content: "";
+}
+.fa-arrow-circle-right:before,
+.icon-circle-arrow-right:before {
+  content: "";
+}
+.fa-arrow-circle-up:before {
+  content: "";
+}
+.fa-arrow-circle-down:before {
+  content: "";
+}
+.fa-globe:before {
+  content: "";
+}
+.fa-wrench:before {
+  content: "";
+}
+.fa-tasks:before {
+  content: "";
+}
+.fa-filter:before {
+  content: "";
+}
+.fa-briefcase:before {
+  content: "";
+}
+.fa-arrows-alt:before {
+  content: "";
+}
+.fa-group:before,
+.fa-users:before {
+  content: "";
+}
+.fa-chain:before,
+.fa-link:before,
+.icon-link:before {
+  content: "";
+}
+.fa-cloud:before {
+  content: "";
+}
+.fa-flask:before {
+  content: "";
+}
+.fa-cut:before,
+.fa-scissors:before {
+  content: "";
+}
+.fa-copy:before,
+.fa-files-o:before {
+  content: "";
+}
+.fa-paperclip:before {
+  content: "";
+}
+.fa-floppy-o:before,
+.fa-save:before {
+  content: "";
+}
+.fa-square:before {
+  content: "";
+}
+.fa-bars:before,
+.fa-navicon:before,
+.fa-reorder:before {
+  content: "";
+}
+.fa-list-ul:before {
+  content: "";
+}
+.fa-list-ol:before {
+  content: "";
+}
+.fa-strikethrough:before {
+  content: "";
+}
+.fa-underline:before {
+  content: "";
+}
+.fa-table:before {
+  content: "";
+}
+.fa-magic:before {
+  content: "";
+}
+.fa-truck:before {
+  content: "";
+}
+.fa-pinterest:before {
+  content: "";
+}
+.fa-pinterest-square:before {
+  content: "";
+}
+.fa-google-plus-square:before {
+  content: "";
+}
+.fa-google-plus:before {
+  content: "";
+}
+.fa-money:before {
+  content: "";
+}
+.fa-caret-down:before,
+.icon-caret-down:before,
+.wy-dropdown .caret:before {
+  content: "";
+}
+.fa-caret-up:before {
+  content: "";
+}
+.fa-caret-left:before {
+  content: "";
+}
+.fa-caret-right:before {
+  content: "";
+}
+.fa-columns:before {
+  content: "";
+}
+.fa-sort:before,
+.fa-unsorted:before {
+  content: "";
+}
+.fa-sort-desc:before,
+.fa-sort-down:before {
+  content: "";
+}
+.fa-sort-asc:before,
+.fa-sort-up:before {
+  content: "";
+}
+.fa-envelope:before {
+  content: "";
+}
+.fa-linkedin:before {
+  content: "";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+  content: "";
+}
+.fa-gavel:before,
+.fa-legal:before {
+  content: "";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+  content: "";
+}
+.fa-comment-o:before {
+  content: "";
+}
+.fa-comments-o:before {
+  content: "";
+}
+.fa-bolt:before,
+.fa-flash:before {
+  content: "";
+}
+.fa-sitemap:before {
+  content: "";
+}
+.fa-umbrella:before {
+  content: "";
+}
+.fa-clipboard:before,
+.fa-paste:before {
+  content: "";
+}
+.fa-lightbulb-o:before {
+  content: "";
+}
+.fa-exchange:before {
+  content: "";
+}
+.fa-cloud-download:before {
+  content: "";
+}
+.fa-cloud-upload:before {
+  content: "";
+}
+.fa-user-md:before {
+  content: "";
+}
+.fa-stethoscope:before {
+  content: "";
+}
+.fa-suitcase:before {
+  content: "";
+}
+.fa-bell-o:before {
+  content: "";
+}
+.fa-coffee:before {
+  content: "";
+}
+.fa-cutlery:before {
+  content: "";
+}
+.fa-file-text-o:before {
+  content: "";
+}
+.fa-building-o:before {
+  content: "";
+}
+.fa-hospital-o:before {
+  content: "";
+}
+.fa-ambulance:before {
+  content: "";
+}
+.fa-medkit:before {
+  content: "";
+}
+.fa-fighter-jet:before {
+  content: "";
+}
+.fa-beer:before {
+  content: "";
+}
+.fa-h-square:before {
+  content: "";
+}
+.fa-plus-square:before {
+  content: "";
+}
+.fa-angle-double-left:before {
+  content: "";
+}
+.fa-angle-double-right:before {
+  content: "";
+}
+.fa-angle-double-up:before {
+  content: "";
+}
+.fa-angle-double-down:before {
+  content: "";
+}
+.fa-angle-left:before {
+  content: "";
+}
+.fa-angle-right:before {
+  content: "";
+}
+.fa-angle-up:before {
+  content: "";
+}
+.fa-angle-down:before {
+  content: "";
+}
+.fa-desktop:before {
+  content: "";
+}
+.fa-laptop:before {
+  content: "";
+}
+.fa-tablet:before {
+  content: "";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+  content: "";
+}
+.fa-circle-o:before {
+  content: "";
+}
+.fa-quote-left:before {
+  content: "";
+}
+.fa-quote-right:before {
+  content: "";
+}
+.fa-spinner:before {
+  content: "";
+}
+.fa-circle:before {
+  content: "";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+  content: "";
+}
+.fa-github-alt:before {
+  content: "";
+}
+.fa-folder-o:before {
+  content: "";
+}
+.fa-folder-open-o:before {
+  content: "";
+}
+.fa-smile-o:before {
+  content: "";
+}
+.fa-frown-o:before {
+  content: "";
+}
+.fa-meh-o:before {
+  content: "";
+}
+.fa-gamepad:before {
+  content: "";
+}
+.fa-keyboard-o:before {
+  content: "";
+}
+.fa-flag-o:before {
+  content: "";
+}
+.fa-flag-checkered:before {
+  content: "";
+}
+.fa-terminal:before {
+  content: "";
+}
+.fa-code:before {
+  content: "";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+  content: "";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+  content: "";
+}
+.fa-location-arrow:before {
+  content: "";
+}
+.fa-crop:before {
+  content: "";
+}
+.fa-code-fork:before {
+  content: "";
+}
+.fa-chain-broken:before,
+.fa-unlink:before {
+  content: "";
+}
+.fa-question:before {
+  content: "";
+}
+.fa-info:before {
+  content: "";
+}
+.fa-exclamation:before {
+  content: "";
+}
+.fa-superscript:before {
+  content: "";
+}
+.fa-subscript:before {
+  content: "";
+}
+.fa-eraser:before {
+  content: "";
+}
+.fa-puzzle-piece:before {
+  content: "";
+}
+.fa-microphone:before {
+  content: "";
+}
+.fa-microphone-slash:before {
+  content: "";
+}
+.fa-shield:before {
+  content: "";
+}
+.fa-calendar-o:before {
+  content: "";
+}
+.fa-fire-extinguisher:before {
+  content: "";
+}
+.fa-rocket:before {
+  content: "";
+}
+.fa-maxcdn:before {
+  content: "";
+}
+.fa-chevron-circle-left:before {
+  content: "";
+}
+.fa-chevron-circle-right:before {
+  content: "";
+}
+.fa-chevron-circle-up:before {
+  content: "";
+}
+.fa-chevron-circle-down:before {
+  content: "";
+}
+.fa-html5:before {
+  content: "";
+}
+.fa-css3:before {
+  content: "";
+}
+.fa-anchor:before {
+  content: "";
+}
+.fa-unlock-alt:before {
+  content: "";
+}
+.fa-bullseye:before {
+  content: "";
+}
+.fa-ellipsis-h:before {
+  content: "";
+}
+.fa-ellipsis-v:before {
+  content: "";
+}
+.fa-rss-square:before {
+  content: "";
+}
+.fa-play-circle:before {
+  content: "";
+}
+.fa-ticket:before {
+  content: "";
+}
+.fa-minus-square:before {
+  content: "";
+}
+.fa-minus-square-o:before,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a span.toctree-expand:before {
+  content: "";
+}
+.fa-level-up:before {
+  content: "";
+}
+.fa-level-down:before {
+  content: "";
+}
+.fa-check-square:before {
+  content: "";
+}
+.fa-pencil-square:before {
+  content: "";
+}
+.fa-external-link-square:before {
+  content: "";
+}
+.fa-share-square:before {
+  content: "";
+}
+.fa-compass:before {
+  content: "";
+}
+.fa-caret-square-o-down:before,
+.fa-toggle-down:before {
+  content: "";
+}
+.fa-caret-square-o-up:before,
+.fa-toggle-up:before {
+  content: "";
+}
+.fa-caret-square-o-right:before,
+.fa-toggle-right:before {
+  content: "";
+}
+.fa-eur:before,
+.fa-euro:before {
+  content: "";
+}
+.fa-gbp:before {
+  content: "";
+}
+.fa-dollar:before,
+.fa-usd:before {
+  content: "";
+}
+.fa-inr:before,
+.fa-rupee:before {
+  content: "";
+}
+.fa-cny:before,
+.fa-jpy:before,
+.fa-rmb:before,
+.fa-yen:before {
+  content: "";
+}
+.fa-rouble:before,
+.fa-rub:before,
+.fa-ruble:before {
+  content: "";
+}
+.fa-krw:before,
+.fa-won:before {
+  content: "";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+  content: "";
+}
+.fa-file:before {
+  content: "";
+}
+.fa-file-text:before {
+  content: "";
+}
+.fa-sort-alpha-asc:before {
+  content: "";
+}
+.fa-sort-alpha-desc:before {
+  content: "";
+}
+.fa-sort-amount-asc:before {
+  content: "";
+}
+.fa-sort-amount-desc:before {
+  content: "";
+}
+.fa-sort-numeric-asc:before {
+  content: "";
+}
+.fa-sort-numeric-desc:before {
+  content: "";
+}
+.fa-thumbs-up:before {
+  content: "";
+}
+.fa-thumbs-down:before {
+  content: "";
+}
+.fa-youtube-square:before {
+  content: "";
+}
+.fa-youtube:before {
+  content: "";
+}
+.fa-xing:before {
+  content: "";
+}
+.fa-xing-square:before {
+  content: "";
+}
+.fa-youtube-play:before {
+  content: "";
+}
+.fa-dropbox:before {
+  content: "";
+}
+.fa-stack-overflow:before {
+  content: "";
+}
+.fa-instagram:before {
+  content: "";
+}
+.fa-flickr:before {
+  content: "";
+}
+.fa-adn:before {
+  content: "";
+}
+.fa-bitbucket:before,
+.icon-bitbucket:before {
+  content: "";
+}
+.fa-bitbucket-square:before {
+  content: "";
+}
+.fa-tumblr:before {
+  content: "";
+}
+.fa-tumblr-square:before {
+  content: "";
+}
+.fa-long-arrow-down:before {
+  content: "";
+}
+.fa-long-arrow-up:before {
+  content: "";
+}
+.fa-long-arrow-left:before {
+  content: "";
+}
+.fa-long-arrow-right:before {
+  content: "";
+}
+.fa-apple:before {
+  content: "";
+}
+.fa-windows:before {
+  content: "";
+}
+.fa-android:before {
+  content: "";
+}
+.fa-linux:before {
+  content: "";
+}
+.fa-dribbble:before {
+  content: "";
+}
+.fa-skype:before {
+  content: "";
+}
+.fa-foursquare:before {
+  content: "";
+}
+.fa-trello:before {
+  content: "";
+}
+.fa-female:before {
+  content: "";
+}
+.fa-male:before {
+  content: "";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+  content: "";
+}
+.fa-sun-o:before {
+  content: "";
+}
+.fa-moon-o:before {
+  content: "";
+}
+.fa-archive:before {
+  content: "";
+}
+.fa-bug:before {
+  content: "";
+}
+.fa-vk:before {
+  content: "";
+}
+.fa-weibo:before {
+  content: "";
+}
+.fa-renren:before {
+  content: "";
+}
+.fa-pagelines:before {
+  content: "";
+}
+.fa-stack-exchange:before {
+  content: "";
+}
+.fa-arrow-circle-o-right:before {
+  content: "";
+}
+.fa-arrow-circle-o-left:before {
+  content: "";
+}
+.fa-caret-square-o-left:before,
+.fa-toggle-left:before {
+  content: "";
+}
+.fa-dot-circle-o:before {
+  content: "";
+}
+.fa-wheelchair:before {
+  content: "";
+}
+.fa-vimeo-square:before {
+  content: "";
+}
+.fa-try:before,
+.fa-turkish-lira:before {
+  content: "";
+}
+.fa-plus-square-o:before,
+.wy-menu-vertical li span.toctree-expand:before {
+  content: "";
+}
+.fa-space-shuttle:before {
+  content: "";
+}
+.fa-slack:before {
+  content: "";
+}
+.fa-envelope-square:before {
+  content: "";
+}
+.fa-wordpress:before {
+  content: "";
+}
+.fa-openid:before {
+  content: "";
+}
+.fa-bank:before,
+.fa-institution:before,
+.fa-university:before {
+  content: "";
+}
+.fa-graduation-cap:before,
+.fa-mortar-board:before {
+  content: "";
+}
+.fa-yahoo:before {
+  content: "";
+}
+.fa-google:before {
+  content: "";
+}
+.fa-reddit:before {
+  content: "";
+}
+.fa-reddit-square:before {
+  content: "";
+}
+.fa-stumbleupon-circle:before {
+  content: "";
+}
+.fa-stumbleupon:before {
+  content: "";
+}
+.fa-delicious:before {
+  content: "";
+}
+.fa-digg:before {
+  content: "";
+}
+.fa-pied-piper-pp:before {
+  content: "";
+}
+.fa-pied-piper-alt:before {
+  content: "";
+}
+.fa-drupal:before {
+  content: "";
+}
+.fa-joomla:before {
+  content: "";
+}
+.fa-language:before {
+  content: "";
+}
+.fa-fax:before {
+  content: "";
+}
+.fa-building:before {
+  content: "";
+}
+.fa-child:before {
+  content: "";
+}
+.fa-paw:before {
+  content: "";
+}
+.fa-spoon:before {
+  content: "";
+}
+.fa-cube:before {
+  content: "";
+}
+.fa-cubes:before {
+  content: "";
+}
+.fa-behance:before {
+  content: "";
+}
+.fa-behance-square:before {
+  content: "";
+}
+.fa-steam:before {
+  content: "";
+}
+.fa-steam-square:before {
+  content: "";
+}
+.fa-recycle:before {
+  content: "";
+}
+.fa-automobile:before,
+.fa-car:before {
+  content: "";
+}
+.fa-cab:before,
+.fa-taxi:before {
+  content: "";
+}
+.fa-tree:before {
+  content: "";
+}
+.fa-spotify:before {
+  content: "";
+}
+.fa-deviantart:before {
+  content: "";
+}
+.fa-soundcloud:before {
+  content: "";
+}
+.fa-database:before {
+  content: "";
+}
+.fa-file-pdf-o:before {
+  content: "";
+}
+.fa-file-word-o:before {
+  content: "";
+}
+.fa-file-excel-o:before {
+  content: "";
+}
+.fa-file-powerpoint-o:before {
+  content: "";
+}
+.fa-file-image-o:before,
+.fa-file-photo-o:before,
+.fa-file-picture-o:before {
+  content: "";
+}
+.fa-file-archive-o:before,
+.fa-file-zip-o:before {
+  content: "";
+}
+.fa-file-audio-o:before,
+.fa-file-sound-o:before {
+  content: "";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+  content: "";
+}
+.fa-file-code-o:before {
+  content: "";
+}
+.fa-vine:before {
+  content: "";
+}
+.fa-codepen:before {
+  content: "";
+}
+.fa-jsfiddle:before {
+  content: "";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-ring:before,
+.fa-life-saver:before,
+.fa-support:before {
+  content: "";
+}
+.fa-circle-o-notch:before {
+  content: "";
+}
+.fa-ra:before,
+.fa-rebel:before,
+.fa-resistance:before {
+  content: "";
+}
+.fa-empire:before,
+.fa-ge:before {
+  content: "";
+}
+.fa-git-square:before {
+  content: "";
+}
+.fa-git:before {
+  content: "";
+}
+.fa-hacker-news:before,
+.fa-y-combinator-square:before,
+.fa-yc-square:before {
+  content: "";
+}
+.fa-tencent-weibo:before {
+  content: "";
+}
+.fa-qq:before {
+  content: "";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+  content: "";
+}
+.fa-paper-plane:before,
+.fa-send:before {
+  content: "";
+}
+.fa-paper-plane-o:before,
+.fa-send-o:before {
+  content: "";
+}
+.fa-history:before {
+  content: "";
+}
+.fa-circle-thin:before {
+  content: "";
+}
+.fa-header:before {
+  content: "";
+}
+.fa-paragraph:before {
+  content: "";
+}
+.fa-sliders:before {
+  content: "";
+}
+.fa-share-alt:before {
+  content: "";
+}
+.fa-share-alt-square:before {
+  content: "";
+}
+.fa-bomb:before {
+  content: "";
+}
+.fa-futbol-o:before,
+.fa-soccer-ball-o:before {
+  content: "";
+}
+.fa-tty:before {
+  content: "";
+}
+.fa-binoculars:before {
+  content: "";
+}
+.fa-plug:before {
+  content: "";
+}
+.fa-slideshare:before {
+  content: "";
+}
+.fa-twitch:before {
+  content: "";
+}
+.fa-yelp:before {
+  content: "";
+}
+.fa-newspaper-o:before {
+  content: "";
+}
+.fa-wifi:before {
+  content: "";
+}
+.fa-calculator:before {
+  content: "";
+}
+.fa-paypal:before {
+  content: "";
+}
+.fa-google-wallet:before {
+  content: "";
+}
+.fa-cc-visa:before {
+  content: "";
+}
+.fa-cc-mastercard:before {
+  content: "";
+}
+.fa-cc-discover:before {
+  content: "";
+}
+.fa-cc-amex:before {
+  content: "";
+}
+.fa-cc-paypal:before {
+  content: "";
+}
+.fa-cc-stripe:before {
+  content: "";
+}
+.fa-bell-slash:before {
+  content: "";
+}
+.fa-bell-slash-o:before {
+  content: "";
+}
+.fa-trash:before {
+  content: "";
+}
+.fa-copyright:before {
+  content: "";
+}
+.fa-at:before {
+  content: "";
+}
+.fa-eyedropper:before {
+  content: "";
+}
+.fa-paint-brush:before {
+  content: "";
+}
+.fa-birthday-cake:before {
+  content: "";
+}
+.fa-area-chart:before {
+  content: "";
+}
+.fa-pie-chart:before {
+  content: "";
+}
+.fa-line-chart:before {
+  content: "";
+}
+.fa-lastfm:before {
+  content: "";
+}
+.fa-lastfm-square:before {
+  content: "";
+}
+.fa-toggle-off:before {
+  content: "";
+}
+.fa-toggle-on:before {
+  content: "";
+}
+.fa-bicycle:before {
+  content: "";
+}
+.fa-bus:before {
+  content: "";
+}
+.fa-ioxhost:before {
+  content: "";
+}
+.fa-angellist:before {
+  content: "";
+}
+.fa-cc:before {
+  content: "";
+}
+.fa-ils:before,
+.fa-shekel:before,
+.fa-sheqel:before {
+  content: "";
+}
+.fa-meanpath:before {
+  content: "";
+}
+.fa-buysellads:before {
+  content: "";
+}
+.fa-connectdevelop:before {
+  content: "";
+}
+.fa-dashcube:before {
+  content: "";
+}
+.fa-forumbee:before {
+  content: "";
+}
+.fa-leanpub:before {
+  content: "";
+}
+.fa-sellsy:before {
+  content: "";
+}
+.fa-shirtsinbulk:before {
+  content: "";
+}
+.fa-simplybuilt:before {
+  content: "";
+}
+.fa-skyatlas:before {
+  content: "";
+}
+.fa-cart-plus:before {
+  content: "";
+}
+.fa-cart-arrow-down:before {
+  content: "";
+}
+.fa-diamond:before {
+  content: "";
+}
+.fa-ship:before {
+  content: "";
+}
+.fa-user-secret:before {
+  content: "";
+}
+.fa-motorcycle:before {
+  content: "";
+}
+.fa-street-view:before {
+  content: "";
+}
+.fa-heartbeat:before {
+  content: "";
+}
+.fa-venus:before {
+  content: "";
+}
+.fa-mars:before {
+  content: "";
+}
+.fa-mercury:before {
+  content: "";
+}
+.fa-intersex:before,
+.fa-transgender:before {
+  content: "";
+}
+.fa-transgender-alt:before {
+  content: "";
+}
+.fa-venus-double:before {
+  content: "";
+}
+.fa-mars-double:before {
+  content: "";
+}
+.fa-venus-mars:before {
+  content: "";
+}
+.fa-mars-stroke:before {
+  content: "";
+}
+.fa-mars-stroke-v:before {
+  content: "";
+}
+.fa-mars-stroke-h:before {
+  content: "";
+}
+.fa-neuter:before {
+  content: "";
+}
+.fa-genderless:before {
+  content: "";
+}
+.fa-facebook-official:before {
+  content: "";
+}
+.fa-pinterest-p:before {
+  content: "";
+}
+.fa-whatsapp:before {
+  content: "";
+}
+.fa-server:before {
+  content: "";
+}
+.fa-user-plus:before {
+  content: "";
+}
+.fa-user-times:before {
+  content: "";
+}
+.fa-bed:before,
+.fa-hotel:before {
+  content: "";
+}
+.fa-viacoin:before {
+  content: "";
+}
+.fa-train:before {
+  content: "";
+}
+.fa-subway:before {
+  content: "";
+}
+.fa-medium:before {
+  content: "";
+}
+.fa-y-combinator:before,
+.fa-yc:before {
+  content: "";
+}
+.fa-optin-monster:before {
+  content: "";
+}
+.fa-opencart:before {
+  content: "";
+}
+.fa-expeditedssl:before {
+  content: "";
+}
+.fa-battery-4:before,
+.fa-battery-full:before,
+.fa-battery:before {
+  content: "";
+}
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+  content: "";
+}
+.fa-battery-2:before,
+.fa-battery-half:before {
+  content: "";
+}
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+  content: "";
+}
+.fa-battery-0:before,
+.fa-battery-empty:before {
+  content: "";
+}
+.fa-mouse-pointer:before {
+  content: "";
+}
+.fa-i-cursor:before {
+  content: "";
+}
+.fa-object-group:before {
+  content: "";
+}
+.fa-object-ungroup:before {
+  content: "";
+}
+.fa-sticky-note:before {
+  content: "";
+}
+.fa-sticky-note-o:before {
+  content: "";
+}
+.fa-cc-jcb:before {
+  content: "";
+}
+.fa-cc-diners-club:before {
+  content: "";
+}
+.fa-clone:before {
+  content: "";
+}
+.fa-balance-scale:before {
+  content: "";
+}
+.fa-hourglass-o:before {
+  content: "";
+}
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+  content: "";
+}
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+  content: "";
+}
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+  content: "";
+}
+.fa-hourglass:before {
+  content: "";
+}
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+  content: "";
+}
+.fa-hand-paper-o:before,
+.fa-hand-stop-o:before {
+  content: "";
+}
+.fa-hand-scissors-o:before {
+  content: "";
+}
+.fa-hand-lizard-o:before {
+  content: "";
+}
+.fa-hand-spock-o:before {
+  content: "";
+}
+.fa-hand-pointer-o:before {
+  content: "";
+}
+.fa-hand-peace-o:before {
+  content: "";
+}
+.fa-trademark:before {
+  content: "";
+}
+.fa-registered:before {
+  content: "";
+}
+.fa-creative-commons:before {
+  content: "";
+}
+.fa-gg:before {
+  content: "";
+}
+.fa-gg-circle:before {
+  content: "";
+}
+.fa-tripadvisor:before {
+  content: "";
+}
+.fa-odnoklassniki:before {
+  content: "";
+}
+.fa-odnoklassniki-square:before {
+  content: "";
+}
+.fa-get-pocket:before {
+  content: "";
+}
+.fa-wikipedia-w:before {
+  content: "";
+}
+.fa-safari:before {
+  content: "";
+}
+.fa-chrome:before {
+  content: "";
+}
+.fa-firefox:before {
+  content: "";
+}
+.fa-opera:before {
+  content: "";
+}
+.fa-internet-explorer:before {
+  content: "";
+}
+.fa-television:before,
+.fa-tv:before {
+  content: "";
+}
+.fa-contao:before {
+  content: "";
+}
+.fa-500px:before {
+  content: "";
+}
+.fa-amazon:before {
+  content: "";
+}
+.fa-calendar-plus-o:before {
+  content: "";
+}
+.fa-calendar-minus-o:before {
+  content: "";
+}
+.fa-calendar-times-o:before {
+  content: "";
+}
+.fa-calendar-check-o:before {
+  content: "";
+}
+.fa-industry:before {
+  content: "";
+}
+.fa-map-pin:before {
+  content: "";
+}
+.fa-map-signs:before {
+  content: "";
+}
+.fa-map-o:before {
+  content: "";
+}
+.fa-map:before {
+  content: "";
+}
+.fa-commenting:before {
+  content: "";
+}
+.fa-commenting-o:before {
+  content: "";
+}
+.fa-houzz:before {
+  content: "";
+}
+.fa-vimeo:before {
+  content: "";
+}
+.fa-black-tie:before {
+  content: "";
+}
+.fa-fonticons:before {
+  content: "";
+}
+.fa-reddit-alien:before {
+  content: "";
+}
+.fa-edge:before {
+  content: "";
+}
+.fa-credit-card-alt:before {
+  content: "";
+}
+.fa-codiepie:before {
+  content: "";
+}
+.fa-modx:before {
+  content: "";
+}
+.fa-fort-awesome:before {
+  content: "";
+}
+.fa-usb:before {
+  content: "";
+}
+.fa-product-hunt:before {
+  content: "";
+}
+.fa-mixcloud:before {
+  content: "";
+}
+.fa-scribd:before {
+  content: "";
+}
+.fa-pause-circle:before {
+  content: "";
+}
+.fa-pause-circle-o:before {
+  content: "";
+}
+.fa-stop-circle:before {
+  content: "";
+}
+.fa-stop-circle-o:before {
+  content: "";
+}
+.fa-shopping-bag:before {
+  content: "";
+}
+.fa-shopping-basket:before {
+  content: "";
+}
+.fa-hashtag:before {
+  content: "";
+}
+.fa-bluetooth:before {
+  content: "";
+}
+.fa-bluetooth-b:before {
+  content: "";
+}
+.fa-percent:before {
+  content: "";
+}
+.fa-gitlab:before,
+.icon-gitlab:before {
+  content: "";
+}
+.fa-wpbeginner:before {
+  content: "";
+}
+.fa-wpforms:before {
+  content: "";
+}
+.fa-envira:before {
+  content: "";
+}
+.fa-universal-access:before {
+  content: "";
+}
+.fa-wheelchair-alt:before {
+  content: "";
+}
+.fa-question-circle-o:before {
+  content: "";
+}
+.fa-blind:before {
+  content: "";
+}
+.fa-audio-description:before {
+  content: "";
+}
+.fa-volume-control-phone:before {
+  content: "";
+}
+.fa-braille:before {
+  content: "";
+}
+.fa-assistive-listening-systems:before {
+  content: "";
+}
+.fa-american-sign-language-interpreting:before,
+.fa-asl-interpreting:before {
+  content: "";
+}
+.fa-deaf:before,
+.fa-deafness:before,
+.fa-hard-of-hearing:before {
+  content: "";
+}
+.fa-glide:before {
+  content: "";
+}
+.fa-glide-g:before {
+  content: "";
+}
+.fa-sign-language:before,
+.fa-signing:before {
+  content: "";
+}
+.fa-low-vision:before {
+  content: "";
+}
+.fa-viadeo:before {
+  content: "";
+}
+.fa-viadeo-square:before {
+  content: "";
+}
+.fa-snapchat:before {
+  content: "";
+}
+.fa-snapchat-ghost:before {
+  content: "";
+}
+.fa-snapchat-square:before {
+  content: "";
+}
+.fa-pied-piper:before {
+  content: "";
+}
+.fa-first-order:before {
+  content: "";
+}
+.fa-yoast:before {
+  content: "";
+}
+.fa-themeisle:before {
+  content: "";
+}
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+  content: "";
+}
+.fa-fa:before,
+.fa-font-awesome:before {
+  content: "";
+}
+.fa-handshake-o:before {
+  content: "";
+}
+.fa-envelope-open:before {
+  content: "";
+}
+.fa-envelope-open-o:before {
+  content: "";
+}
+.fa-linode:before {
+  content: "";
+}
+.fa-address-book:before {
+  content: "";
+}
+.fa-address-book-o:before {
+  content: "";
+}
+.fa-address-card:before,
+.fa-vcard:before {
+  content: "";
+}
+.fa-address-card-o:before,
+.fa-vcard-o:before {
+  content: "";
+}
+.fa-user-circle:before {
+  content: "";
+}
+.fa-user-circle-o:before {
+  content: "";
+}
+.fa-user-o:before {
+  content: "";
+}
+.fa-id-badge:before {
+  content: "";
+}
+.fa-drivers-license:before,
+.fa-id-card:before {
+  content: "";
+}
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+  content: "";
+}
+.fa-quora:before {
+  content: "";
+}
+.fa-free-code-camp:before {
+  content: "";
+}
+.fa-telegram:before {
+  content: "";
+}
+.fa-thermometer-4:before,
+.fa-thermometer-full:before,
+.fa-thermometer:before {
+  content: "";
+}
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+  content: "";
+}
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+  content: "";
+}
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+  content: "";
+}
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+  content: "";
+}
+.fa-shower:before {
+  content: "";
+}
+.fa-bath:before,
+.fa-bathtub:before,
+.fa-s15:before {
+  content: "";
+}
+.fa-podcast:before {
+  content: "";
+}
+.fa-window-maximize:before {
+  content: "";
+}
+.fa-window-minimize:before {
+  content: "";
+}
+.fa-window-restore:before {
+  content: "";
+}
+.fa-times-rectangle:before,
+.fa-window-close:before {
+  content: "";
+}
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+  content: "";
+}
+.fa-bandcamp:before {
+  content: "";
+}
+.fa-grav:before {
+  content: "";
+}
+.fa-etsy:before {
+  content: "";
+}
+.fa-imdb:before {
+  content: "";
+}
+.fa-ravelry:before {
+  content: "";
+}
+.fa-eercast:before {
+  content: "";
+}
+.fa-microchip:before {
+  content: "";
+}
+.fa-snowflake-o:before {
+  content: "";
+}
+.fa-superpowers:before {
+  content: "";
+}
+.fa-wpexplorer:before {
+  content: "";
+}
+.fa-meetup:before {
+  content: "";
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
+.fa,
+.icon,
+.rst-content .admonition-title,
+.rst-content .code-block-caption .headerlink,
+.rst-content code.download span:first-child,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink,
+.rst-content tt.download span:first-child,
+.wy-dropdown .caret,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li span.toctree-expand {
+  font-family: inherit;
+}
+.fa:before,
+.icon:before,
+.rst-content .admonition-title:before,
+.rst-content .code-block-caption .headerlink:before,
+.rst-content code.download span:first-child:before,
+.rst-content dl dt .headerlink:before,
+.rst-content h1 .headerlink:before,
+.rst-content h2 .headerlink:before,
+.rst-content h3 .headerlink:before,
+.rst-content h4 .headerlink:before,
+.rst-content h5 .headerlink:before,
+.rst-content h6 .headerlink:before,
+.rst-content p.caption .headerlink:before,
+.rst-content table > caption .headerlink:before,
+.rst-content tt.download span:first-child:before,
+.wy-dropdown .caret:before,
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,
+.wy-menu-vertical li.current > a span.toctree-expand:before,
+.wy-menu-vertical li.on a span.toctree-expand:before,
+.wy-menu-vertical li span.toctree-expand:before {
+  font-family: FontAwesome;
+  display: inline-block;
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1;
+  text-decoration: inherit;
+}
+.rst-content .code-block-caption a .headerlink,
+.rst-content a .admonition-title,
+.rst-content code.download a span:first-child,
+.rst-content dl dt a .headerlink,
+.rst-content h1 a .headerlink,
+.rst-content h2 a .headerlink,
+.rst-content h3 a .headerlink,
+.rst-content h4 a .headerlink,
+.rst-content h5 a .headerlink,
+.rst-content h6 a .headerlink,
+.rst-content p.caption a .headerlink,
+.rst-content table > caption a .headerlink,
+.rst-content tt.download a span:first-child,
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand,
+.wy-menu-vertical li a span.toctree-expand,
+a .fa,
+a .icon,
+a .rst-content .admonition-title,
+a .rst-content .code-block-caption .headerlink,
+a .rst-content code.download span:first-child,
+a .rst-content dl dt .headerlink,
+a .rst-content h1 .headerlink,
+a .rst-content h2 .headerlink,
+a .rst-content h3 .headerlink,
+a .rst-content h4 .headerlink,
+a .rst-content h5 .headerlink,
+a .rst-content h6 .headerlink,
+a .rst-content p.caption .headerlink,
+a .rst-content table > caption .headerlink,
+a .rst-content tt.download span:first-child,
+a .wy-menu-vertical li span.toctree-expand {
+  display: inline-block;
+  text-decoration: inherit;
+}
+.btn .fa,
+.btn .icon,
+.btn .rst-content .admonition-title,
+.btn .rst-content .code-block-caption .headerlink,
+.btn .rst-content code.download span:first-child,
+.btn .rst-content dl dt .headerlink,
+.btn .rst-content h1 .headerlink,
+.btn .rst-content h2 .headerlink,
+.btn .rst-content h3 .headerlink,
+.btn .rst-content h4 .headerlink,
+.btn .rst-content h5 .headerlink,
+.btn .rst-content h6 .headerlink,
+.btn .rst-content p.caption .headerlink,
+.btn .rst-content table > caption .headerlink,
+.btn .rst-content tt.download span:first-child,
+.btn .wy-menu-vertical li.current > a span.toctree-expand,
+.btn .wy-menu-vertical li.on a span.toctree-expand,
+.btn .wy-menu-vertical li span.toctree-expand,
+.nav .fa,
+.nav .icon,
+.nav .rst-content .admonition-title,
+.nav .rst-content .code-block-caption .headerlink,
+.nav .rst-content code.download span:first-child,
+.nav .rst-content dl dt .headerlink,
+.nav .rst-content h1 .headerlink,
+.nav .rst-content h2 .headerlink,
+.nav .rst-content h3 .headerlink,
+.nav .rst-content h4 .headerlink,
+.nav .rst-content h5 .headerlink,
+.nav .rst-content h6 .headerlink,
+.nav .rst-content p.caption .headerlink,
+.nav .rst-content table > caption .headerlink,
+.nav .rst-content tt.download span:first-child,
+.nav .wy-menu-vertical li.current > a span.toctree-expand,
+.nav .wy-menu-vertical li.on a span.toctree-expand,
+.nav .wy-menu-vertical li span.toctree-expand,
+.rst-content .btn .admonition-title,
+.rst-content .code-block-caption .btn .headerlink,
+.rst-content .code-block-caption .nav .headerlink,
+.rst-content .nav .admonition-title,
+.rst-content code.download .btn span:first-child,
+.rst-content code.download .nav span:first-child,
+.rst-content dl dt .btn .headerlink,
+.rst-content dl dt .nav .headerlink,
+.rst-content h1 .btn .headerlink,
+.rst-content h1 .nav .headerlink,
+.rst-content h2 .btn .headerlink,
+.rst-content h2 .nav .headerlink,
+.rst-content h3 .btn .headerlink,
+.rst-content h3 .nav .headerlink,
+.rst-content h4 .btn .headerlink,
+.rst-content h4 .nav .headerlink,
+.rst-content h5 .btn .headerlink,
+.rst-content h5 .nav .headerlink,
+.rst-content h6 .btn .headerlink,
+.rst-content h6 .nav .headerlink,
+.rst-content p.caption .btn .headerlink,
+.rst-content p.caption .nav .headerlink,
+.rst-content table > caption .btn .headerlink,
+.rst-content table > caption .nav .headerlink,
+.rst-content tt.download .btn span:first-child,
+.rst-content tt.download .nav span:first-child,
+.wy-menu-vertical li .btn span.toctree-expand,
+.wy-menu-vertical li.current > a .btn span.toctree-expand,
+.wy-menu-vertical li.current > a .nav span.toctree-expand,
+.wy-menu-vertical li .nav span.toctree-expand,
+.wy-menu-vertical li.on a .btn span.toctree-expand,
+.wy-menu-vertical li.on a .nav span.toctree-expand {
+  display: inline;
+}
+.btn .fa-large.icon,
+.btn .fa.fa-large,
+.btn .rst-content .code-block-caption .fa-large.headerlink,
+.btn .rst-content .fa-large.admonition-title,
+.btn .rst-content code.download span.fa-large:first-child,
+.btn .rst-content dl dt .fa-large.headerlink,
+.btn .rst-content h1 .fa-large.headerlink,
+.btn .rst-content h2 .fa-large.headerlink,
+.btn .rst-content h3 .fa-large.headerlink,
+.btn .rst-content h4 .fa-large.headerlink,
+.btn .rst-content h5 .fa-large.headerlink,
+.btn .rst-content h6 .fa-large.headerlink,
+.btn .rst-content p.caption .fa-large.headerlink,
+.btn .rst-content table > caption .fa-large.headerlink,
+.btn .rst-content tt.download span.fa-large:first-child,
+.btn .wy-menu-vertical li span.fa-large.toctree-expand,
+.nav .fa-large.icon,
+.nav .fa.fa-large,
+.nav .rst-content .code-block-caption .fa-large.headerlink,
+.nav .rst-content .fa-large.admonition-title,
+.nav .rst-content code.download span.fa-large:first-child,
+.nav .rst-content dl dt .fa-large.headerlink,
+.nav .rst-content h1 .fa-large.headerlink,
+.nav .rst-content h2 .fa-large.headerlink,
+.nav .rst-content h3 .fa-large.headerlink,
+.nav .rst-content h4 .fa-large.headerlink,
+.nav .rst-content h5 .fa-large.headerlink,
+.nav .rst-content h6 .fa-large.headerlink,
+.nav .rst-content p.caption .fa-large.headerlink,
+.nav .rst-content table > caption .fa-large.headerlink,
+.nav .rst-content tt.download span.fa-large:first-child,
+.nav .wy-menu-vertical li span.fa-large.toctree-expand,
+.rst-content .btn .fa-large.admonition-title,
+.rst-content .code-block-caption .btn .fa-large.headerlink,
+.rst-content .code-block-caption .nav .fa-large.headerlink,
+.rst-content .nav .fa-large.admonition-title,
+.rst-content code.download .btn span.fa-large:first-child,
+.rst-content code.download .nav span.fa-large:first-child,
+.rst-content dl dt .btn .fa-large.headerlink,
+.rst-content dl dt .nav .fa-large.headerlink,
+.rst-content h1 .btn .fa-large.headerlink,
+.rst-content h1 .nav .fa-large.headerlink,
+.rst-content h2 .btn .fa-large.headerlink,
+.rst-content h2 .nav .fa-large.headerlink,
+.rst-content h3 .btn .fa-large.headerlink,
+.rst-content h3 .nav .fa-large.headerlink,
+.rst-content h4 .btn .fa-large.headerlink,
+.rst-content h4 .nav .fa-large.headerlink,
+.rst-content h5 .btn .fa-large.headerlink,
+.rst-content h5 .nav .fa-large.headerlink,
+.rst-content h6 .btn .fa-large.headerlink,
+.rst-content h6 .nav .fa-large.headerlink,
+.rst-content p.caption .btn .fa-large.headerlink,
+.rst-content p.caption .nav .fa-large.headerlink,
+.rst-content table > caption .btn .fa-large.headerlink,
+.rst-content table > caption .nav .fa-large.headerlink,
+.rst-content tt.download .btn span.fa-large:first-child,
+.rst-content tt.download .nav span.fa-large:first-child,
+.wy-menu-vertical li .btn span.fa-large.toctree-expand,
+.wy-menu-vertical li .nav span.fa-large.toctree-expand {
+  line-height: 0.9em;
+}
+.btn .fa-spin.icon,
+.btn .fa.fa-spin,
+.btn .rst-content .code-block-caption .fa-spin.headerlink,
+.btn .rst-content .fa-spin.admonition-title,
+.btn .rst-content code.download span.fa-spin:first-child,
+.btn .rst-content dl dt .fa-spin.headerlink,
+.btn .rst-content h1 .fa-spin.headerlink,
+.btn .rst-content h2 .fa-spin.headerlink,
+.btn .rst-content h3 .fa-spin.headerlink,
+.btn .rst-content h4 .fa-spin.headerlink,
+.btn .rst-content h5 .fa-spin.headerlink,
+.btn .rst-content h6 .fa-spin.headerlink,
+.btn .rst-content p.caption .fa-spin.headerlink,
+.btn .rst-content table > caption .fa-spin.headerlink,
+.btn .rst-content tt.download span.fa-spin:first-child,
+.btn .wy-menu-vertical li span.fa-spin.toctree-expand,
+.nav .fa-spin.icon,
+.nav .fa.fa-spin,
+.nav .rst-content .code-block-caption .fa-spin.headerlink,
+.nav .rst-content .fa-spin.admonition-title,
+.nav .rst-content code.download span.fa-spin:first-child,
+.nav .rst-content dl dt .fa-spin.headerlink,
+.nav .rst-content h1 .fa-spin.headerlink,
+.nav .rst-content h2 .fa-spin.headerlink,
+.nav .rst-content h3 .fa-spin.headerlink,
+.nav .rst-content h4 .fa-spin.headerlink,
+.nav .rst-content h5 .fa-spin.headerlink,
+.nav .rst-content h6 .fa-spin.headerlink,
+.nav .rst-content p.caption .fa-spin.headerlink,
+.nav .rst-content table > caption .fa-spin.headerlink,
+.nav .rst-content tt.download span.fa-spin:first-child,
+.nav .wy-menu-vertical li span.fa-spin.toctree-expand,
+.rst-content .btn .fa-spin.admonition-title,
+.rst-content .code-block-caption .btn .fa-spin.headerlink,
+.rst-content .code-block-caption .nav .fa-spin.headerlink,
+.rst-content .nav .fa-spin.admonition-title,
+.rst-content code.download .btn span.fa-spin:first-child,
+.rst-content code.download .nav span.fa-spin:first-child,
+.rst-content dl dt .btn .fa-spin.headerlink,
+.rst-content dl dt .nav .fa-spin.headerlink,
+.rst-content h1 .btn .fa-spin.headerlink,
+.rst-content h1 .nav .fa-spin.headerlink,
+.rst-content h2 .btn .fa-spin.headerlink,
+.rst-content h2 .nav .fa-spin.headerlink,
+.rst-content h3 .btn .fa-spin.headerlink,
+.rst-content h3 .nav .fa-spin.headerlink,
+.rst-content h4 .btn .fa-spin.headerlink,
+.rst-content h4 .nav .fa-spin.headerlink,
+.rst-content h5 .btn .fa-spin.headerlink,
+.rst-content h5 .nav .fa-spin.headerlink,
+.rst-content h6 .btn .fa-spin.headerlink,
+.rst-content h6 .nav .fa-spin.headerlink,
+.rst-content p.caption .btn .fa-spin.headerlink,
+.rst-content p.caption .nav .fa-spin.headerlink,
+.rst-content table > caption .btn .fa-spin.headerlink,
+.rst-content table > caption .nav .fa-spin.headerlink,
+.rst-content tt.download .btn span.fa-spin:first-child,
+.rst-content tt.download .nav span.fa-spin:first-child,
+.wy-menu-vertical li .btn span.fa-spin.toctree-expand,
+.wy-menu-vertical li .nav span.fa-spin.toctree-expand {
+  display: inline-block;
+}
+.btn.fa:before,
+.btn.icon:before,
+.rst-content .btn.admonition-title:before,
+.rst-content .code-block-caption .btn.headerlink:before,
+.rst-content code.download span.btn:first-child:before,
+.rst-content dl dt .btn.headerlink:before,
+.rst-content h1 .btn.headerlink:before,
+.rst-content h2 .btn.headerlink:before,
+.rst-content h3 .btn.headerlink:before,
+.rst-content h4 .btn.headerlink:before,
+.rst-content h5 .btn.headerlink:before,
+.rst-content h6 .btn.headerlink:before,
+.rst-content p.caption .btn.headerlink:before,
+.rst-content table > caption .btn.headerlink:before,
+.rst-content tt.download span.btn:first-child:before,
+.wy-menu-vertical li span.btn.toctree-expand:before {
+  opacity: 0.5;
+  -webkit-transition: opacity 0.05s ease-in;
+  -moz-transition: opacity 0.05s ease-in;
+  transition: opacity 0.05s ease-in;
+}
+.btn.fa:hover:before,
+.btn.icon:hover:before,
+.rst-content .btn.admonition-title:hover:before,
+.rst-content .code-block-caption .btn.headerlink:hover:before,
+.rst-content code.download span.btn:first-child:hover:before,
+.rst-content dl dt .btn.headerlink:hover:before,
+.rst-content h1 .btn.headerlink:hover:before,
+.rst-content h2 .btn.headerlink:hover:before,
+.rst-content h3 .btn.headerlink:hover:before,
+.rst-content h4 .btn.headerlink:hover:before,
+.rst-content h5 .btn.headerlink:hover:before,
+.rst-content h6 .btn.headerlink:hover:before,
+.rst-content p.caption .btn.headerlink:hover:before,
+.rst-content table > caption .btn.headerlink:hover:before,
+.rst-content tt.download span.btn:first-child:hover:before,
+.wy-menu-vertical li span.btn.toctree-expand:hover:before {
+  opacity: 1;
+}
+.btn-mini .fa:before,
+.btn-mini .icon:before,
+.btn-mini .rst-content .admonition-title:before,
+.btn-mini .rst-content .code-block-caption .headerlink:before,
+.btn-mini .rst-content code.download span:first-child:before,
+.btn-mini .rst-content dl dt .headerlink:before,
+.btn-mini .rst-content h1 .headerlink:before,
+.btn-mini .rst-content h2 .headerlink:before,
+.btn-mini .rst-content h3 .headerlink:before,
+.btn-mini .rst-content h4 .headerlink:before,
+.btn-mini .rst-content h5 .headerlink:before,
+.btn-mini .rst-content h6 .headerlink:before,
+.btn-mini .rst-content p.caption .headerlink:before,
+.btn-mini .rst-content table > caption .headerlink:before,
+.btn-mini .rst-content tt.download span:first-child:before,
+.btn-mini .wy-menu-vertical li span.toctree-expand:before,
+.rst-content .btn-mini .admonition-title:before,
+.rst-content .code-block-caption .btn-mini .headerlink:before,
+.rst-content code.download .btn-mini span:first-child:before,
+.rst-content dl dt .btn-mini .headerlink:before,
+.rst-content h1 .btn-mini .headerlink:before,
+.rst-content h2 .btn-mini .headerlink:before,
+.rst-content h3 .btn-mini .headerlink:before,
+.rst-content h4 .btn-mini .headerlink:before,
+.rst-content h5 .btn-mini .headerlink:before,
+.rst-content h6 .btn-mini .headerlink:before,
+.rst-content p.caption .btn-mini .headerlink:before,
+.rst-content table > caption .btn-mini .headerlink:before,
+.rst-content tt.download .btn-mini span:first-child:before,
+.wy-menu-vertical li .btn-mini span.toctree-expand:before {
+  font-size: 14px;
+  vertical-align: -15%;
+}
+.rst-content .admonition,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning,
+.wy-alert {
+  padding: 12px;
+  line-height: 24px;
+  margin-bottom: 24px;
+  background: #F2F2F2;
+}
+.rst-content .admonition-title,
+.wy-alert-title {
+  font-weight: 700;
+  display: block;
+  color: #fff;
+  background: #1D4F9C;
+  padding: 6px 12px;
+  margin: -12px -12px 12px;
+}
+.rst-content .danger,
+.rst-content .error,
+.rst-content .wy-alert-danger.admonition,
+.rst-content .wy-alert-danger.admonition-todo,
+.rst-content .wy-alert-danger.attention,
+.rst-content .wy-alert-danger.caution,
+.rst-content .wy-alert-danger.hint,
+.rst-content .wy-alert-danger.important,
+.rst-content .wy-alert-danger.note,
+.rst-content .wy-alert-danger.seealso,
+.rst-content .wy-alert-danger.tip,
+.rst-content .wy-alert-danger.warning,
+.wy-alert.wy-alert-danger {
+  background: #fdf3f2;
+}
+.rst-content .danger .admonition-title,
+.rst-content .danger .wy-alert-title,
+.rst-content .error .admonition-title,
+.rst-content .error .wy-alert-title,
+.rst-content .wy-alert-danger.admonition-todo .admonition-title,
+.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-danger.admonition .admonition-title,
+.rst-content .wy-alert-danger.admonition .wy-alert-title,
+.rst-content .wy-alert-danger.attention .admonition-title,
+.rst-content .wy-alert-danger.attention .wy-alert-title,
+.rst-content .wy-alert-danger.caution .admonition-title,
+.rst-content .wy-alert-danger.caution .wy-alert-title,
+.rst-content .wy-alert-danger.hint .admonition-title,
+.rst-content .wy-alert-danger.hint .wy-alert-title,
+.rst-content .wy-alert-danger.important .admonition-title,
+.rst-content .wy-alert-danger.important .wy-alert-title,
+.rst-content .wy-alert-danger.note .admonition-title,
+.rst-content .wy-alert-danger.note .wy-alert-title,
+.rst-content .wy-alert-danger.seealso .admonition-title,
+.rst-content .wy-alert-danger.seealso .wy-alert-title,
+.rst-content .wy-alert-danger.tip .admonition-title,
+.rst-content .wy-alert-danger.tip .wy-alert-title,
+.rst-content .wy-alert-danger.warning .admonition-title,
+.rst-content .wy-alert-danger.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-danger .admonition-title,
+.wy-alert.wy-alert-danger .rst-content .admonition-title,
+.wy-alert.wy-alert-danger .wy-alert-title {
+  background: #f29f97;
+}
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .warning,
+.rst-content .wy-alert-warning.admonition,
+.rst-content .wy-alert-warning.danger,
+.rst-content .wy-alert-warning.error,
+.rst-content .wy-alert-warning.hint,
+.rst-content .wy-alert-warning.important,
+.rst-content .wy-alert-warning.note,
+.rst-content .wy-alert-warning.seealso,
+.rst-content .wy-alert-warning.tip,
+.wy-alert.wy-alert-warning {
+  background: #ffedcc;
+}
+.rst-content .admonition-todo .admonition-title,
+.rst-content .admonition-todo .wy-alert-title,
+.rst-content .attention .admonition-title,
+.rst-content .attention .wy-alert-title,
+.rst-content .caution .admonition-title,
+.rst-content .caution .wy-alert-title,
+.rst-content .warning .admonition-title,
+.rst-content .warning .wy-alert-title,
+.rst-content .wy-alert-warning.admonition .admonition-title,
+.rst-content .wy-alert-warning.admonition .wy-alert-title,
+.rst-content .wy-alert-warning.danger .admonition-title,
+.rst-content .wy-alert-warning.danger .wy-alert-title,
+.rst-content .wy-alert-warning.error .admonition-title,
+.rst-content .wy-alert-warning.error .wy-alert-title,
+.rst-content .wy-alert-warning.hint .admonition-title,
+.rst-content .wy-alert-warning.hint .wy-alert-title,
+.rst-content .wy-alert-waseealsorning.important .admonition-title,
+.rst-content .wy-alert-warning.important .wy-alert-title,
+.rst-content .wy-alert-warning.note .admonition-title,
+.rst-content .wy-alert-warning.note .wy-alert-title,
+.rst-content .wy-alert-warning.seealso .admonition-title,
+.rst-content .wy-alert-warning.seealso .wy-alert-title,
+.rst-content .wy-alert-warning.tip .admonition-title,
+.rst-content .wy-alert-warning.tip .wy-alert-title,
+.rst-content .wy-alert.wy-alert-warning .admonition-title,
+.wy-alert.wy-alert-warning .rst-content .admonition-title,
+.wy-alert.wy-alert-warning .wy-alert-title {
+  background: #f0b37e;
+}
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .wy-alert-info.admonition,
+.rst-content .wy-alert-info.admonition-todo,
+.rst-content .wy-alert-info.attention,
+.rst-content .wy-alert-info.caution,
+.rst-content .wy-alert-info.danger,
+.rst-content .wy-alert-info.error,
+.rst-content .wy-alert-info.hint,
+.rst-content .wy-alert-info.important,
+.rst-content .wy-alert-info.tip,
+.rst-content .wy-alert-info.warning,
+.wy-alert.wy-alert-info {
+  background: #F2F2F2;
+}
+.rst-content .note .wy-alert-title,
+.rst-content .note .admonition-title {
+  background: #1D4F9C;
+}
+.rst-content .seealso .admonition-title,
+.rst-content .seealso .wy-alert-title,
+.rst-content .wy-alert-info.admonition-todo .admonition-title,
+.rst-content .wy-alert-info.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-info.admonition .admonition-title,
+.rst-content .wy-alert-info.admonition .wy-alert-title,
+.rst-content .wy-alert-info.attention .admonition-title,
+.rst-content .wy-alert-info.attention .wy-alert-title,
+.rst-content .wy-alert-info.caution .admonition-title,
+.rst-content .wy-alert-info.caution .wy-alert-title,
+.rst-content .wy-alert-info.danger .admonition-title,
+.rst-content .wy-alert-info.danger .wy-alert-title,
+.rst-content .wy-alert-info.error .admonition-title,
+.rst-content .wy-alert-info.error .wy-alert-title,
+.rst-content .wy-alert-info.hint .admonition-title,
+.rst-content .wy-alert-info.hint .wy-alert-title,
+.rst-content .wy-alert-info.important .admonition-title,
+.rst-content .wy-alert-info.important .wy-alert-title,
+.rst-content .wy-alert-info.tip .admonition-title,
+.rst-content .wy-alert-info.tip .wy-alert-title,
+.rst-content .wy-alert-info.warning .admonition-title,
+.rst-content .wy-alert-info.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-info .admonition-title,
+.wy-alert.wy-alert-info .rst-content .admonition-title,
+.wy-alert.wy-alert-info .wy-alert-title {
+  background: #999999;
+}
+.rst-content .hint,
+.rst-content .important,
+.rst-content .tip,
+.rst-content .wy-alert-success.admonition,
+.rst-content .wy-alert-success.admonition-todo,
+.rst-content .wy-alert-success.attention,
+.rst-content .wy-alert-success.caution,
+.rst-content .wy-alert-success.danger,
+.rst-content .wy-alert-success.error,
+.rst-content .wy-alert-success.note,
+.rst-content .wy-alert-success.seealso,
+.rst-content .wy-alert-success.warning,
+.wy-alert.wy-alert-success {
+  background: #F2F2F2;
+}
+.rst-content .hint .admonition-title,
+.rst-content .hint .wy-alert-title,
+.rst-content .important .admonition-title,
+.rst-content .important .wy-alert-title,
+.rst-content .tip .admonition-title,
+.rst-content .tip .wy-alert-title,
+.rst-content .wy-alert-success.admonition-todo .admonition-title,
+.rst-content .wy-alert-success.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-success.admonition .admonition-title,
+.rst-content .wy-alert-success.admonition .wy-alert-title,
+.rst-content .wy-alert-success.attention .admonition-title,
+.rst-content .wy-alert-success.attention .wy-alert-title,
+.rst-content .wy-alert-success.caution .admonition-title,
+.rst-content .wy-alert-success.caution .wy-alert-title,
+.rst-content .wy-alert-success.danger .admonition-title,
+.rst-content .wy-alert-success.danger .wy-alert-title,
+.rst-content .wy-alert-success.error .admonition-title,
+.rst-content .wy-alert-success.error .wy-alert-title,
+.rst-content .wy-alert-success.note .admonition-title,
+.rst-content .wy-alert-success.note .wy-alert-title,
+.rst-content .wy-alert-success.seealso .admonition-title,
+.rst-content .wy-alert-success.seealso .wy-alert-title,
+.rst-content .wy-alert-success.warning .admonition-title,
+.rst-content .wy-alert-success.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-success .admonition-title,
+.wy-alert.wy-alert-success .rst-content .admonition-title,
+.wy-alert.wy-alert-success .wy-alert-title {
+  background: #7F8DC4;
+}
+.rst-content .wy-alert-neutral.admonition,
+.rst-content .wy-alert-neutral.admonition-todo,
+.rst-content .wy-alert-neutral.attention,
+.rst-content .wy-alert-neutral.caution,
+.rst-content .wy-alert-neutral.danger,
+.rst-content .wy-alert-neutral.error,
+.rst-content .wy-alert-neutral.hint,
+.rst-content .wy-alert-neutral.important,
+.rst-content .wy-alert-neutral.note,
+.rst-content .wy-alert-neutral.seealso,
+.rst-content .wy-alert-neutral.tip,
+.rst-content .wy-alert-neutral.warning,
+.wy-alert.wy-alert-neutral {
+  background: #f3f6f6;
+}
+.rst-content .wy-alert-neutral.admonition-todo .admonition-title,
+.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,
+.rst-content .wy-alert-neutral.admonition .admonition-title,
+.rst-content .wy-alert-neutral.admonition .wy-alert-title,
+.rst-content .wy-alert-neutral.attention .admonition-title,
+.rst-content .wy-alert-neutral.attention .wy-alert-title,
+.rst-content .wy-alert-neutral.caution .admonition-title,
+.rst-content .wy-alert-neutral.caution .wy-alert-title,
+.rst-content .wy-alert-neutral.danger .admonition-title,
+.rst-content .wy-alert-neutral.danger .wy-alert-title,
+.rst-content .wy-alert-neutral.error .admonition-title,
+.rst-content .wy-alert-neutral.error .wy-alert-title,
+.rst-content .wy-alert-neutral.hint .admonition-title,
+.rst-content .wy-alert-neutral.hint .wy-alert-title,
+.rst-content .wy-alert-neutral.important .admonition-title,
+.rst-content .wy-alert-neutral.important .wy-alert-title,
+.rst-content .wy-alert-neutral.note .admonition-title,
+.rst-content .wy-alert-neutral.note .wy-alert-title,
+.rst-content .wy-alert-neutral.seealso .admonition-title,
+.rst-content .wy-alert-neutral.seealso .wy-alert-title,
+.rst-content .wy-alert-neutral.tip .admonition-title,
+.rst-content .wy-alert-neutral.tip .wy-alert-title,
+.rst-content .wy-alert-neutral.warning .admonition-title,
+.rst-content .wy-alert-neutral.warning .wy-alert-title,
+.rst-content .wy-alert.wy-alert-neutral .admonition-title,
+.wy-alert.wy-alert-neutral .rst-content .admonition-title,
+.wy-alert.wy-alert-neutral .wy-alert-title {
+  color: #404040;
+  background: #e1e4e5;
+}
+.rst-content .wy-alert-neutral.admonition-todo a,
+.rst-content .wy-alert-neutral.admonition a,
+.rst-content .wy-alert-neutral.attention a,
+.rst-content .wy-alert-neutral.caution a,
+.rst-content .wy-alert-neutral.danger a,
+.rst-content .wy-alert-neutral.error a,
+.rst-content .wy-alert-neutral.hint a,
+.rst-content .wy-alert-neutral.important a,
+.rst-content .wy-alert-neutral.note a,
+.rst-content .wy-alert-neutral.seealso a,
+.rst-content .wy-alert-neutral.tip a,
+.rst-content .wy-alert-neutral.warning a,
+.wy-alert.wy-alert-neutral a {
+  color: #2980b9;
+}
+.rst-content .admonition-todo p:last-child,
+.rst-content .admonition p:last-child,
+.rst-content .attention p:last-child,
+.rst-content .caution p:last-child,
+.rst-content .danger p:last-child,
+.rst-content .error p:last-child,
+.rst-content .hint p:last-child,
+.rst-content .important p:last-child,
+.rst-content .note p:last-child,
+.rst-content .seealso p:last-child,
+.rst-content .tip p:last-child,
+.rst-content .warning p:last-child,
+.wy-alert p:last-child {
+  margin-bottom: 0;
+}
+.wy-tray-container {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 600;
+}
+.wy-tray-container li {
+  display: block;
+  width: 300px;
+  background: transparent;
+  color: #fff;
+  text-align: center;
+  box-shadow: 0 5px 5px 0 rgba(0, 0, 0, 0.1);
+  padding: 0 24px;
+  min-width: 20%;
+  opacity: 0;
+  height: 0;
+  line-height: 56px;
+  overflow: hidden;
+  -webkit-transition: all 0.3s ease-in;
+  -moz-transition: all 0.3s ease-in;
+  transition: all 0.3s ease-in;
+}
+.wy-tray-container li.wy-tray-item-success {
+  background: #27ae60;
+}
+.wy-tray-container li.wy-tray-item-info {
+  background: #2980b9;
+}
+.wy-tray-container li.wy-tray-item-warning {
+  background: #e67e22;
+}
+.wy-tray-container li.wy-tray-item-danger {
+  background: #e74c3c;
+}
+.wy-tray-container li.on {
+  opacity: 1;
+  height: 56px;
+}
+@media screen and (max-width: 768px) {
+  .wy-tray-container {
+    bottom: auto;
+    top: 0;
+    width: 100%;
+  }
+  .wy-tray-container li {
+    width: 100%;
+  }
+}
+button {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+  cursor: pointer;
+  line-height: normal;
+  -webkit-appearance: button;
+  *overflow: visible;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+button[disabled] {
+  cursor: default;
+}
+.btn {
+  display: inline-block;
+  border-radius: 2px;
+  line-height: normal;
+  white-space: nowrap;
+  text-align: center;
+  cursor: pointer;
+  font-size: 100%;
+  padding: 6px 12px 8px;
+  color: #fff;
+  border: 1px solid rgba(0, 0, 0, 0.1);
+  background-color: #27ae60;
+  text-decoration: none;
+  font-weight: 400;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  box-shadow: inset 0 1px 2px -1px hsla(0, 0%, 100%, 0.5),
+    inset 0 -2px 0 0 rgba(0, 0, 0, 0.1);
+  outline-none: false;
+  vertical-align: middle;
+  *display: inline;
+  zoom: 1;
+  -webkit-user-drag: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  -webkit-transition: all 0.1s linear;
+  -moz-transition: all 0.1s linear;
+  transition: all 0.1s linear;
+}
+.btn-hover {
+  background: #2e8ece;
+  color: #fff;
+}
+.btn:hover {
+  background: #2cc36b;
+  color: #fff;
+}
+.btn:focus {
+  background: #2cc36b;
+  outline: 0;
+}
+.btn:active {
+  box-shadow: inset 0 -1px 0 0 rgba(0, 0, 0, 0.05),
+    inset 0 2px 0 0 rgba(0, 0, 0, 0.1);
+  padding: 8px 12px 6px;
+}
+.btn:visited {
+  color: #fff;
+}
+.btn-disabled,
+.btn-disabled:active,
+.btn-disabled:focus,
+.btn-disabled:hover,
+.btn:disabled {
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  filter: alpha(opacity=40);
+  opacity: 0.4;
+  cursor: not-allowed;
+  box-shadow: none;
+}
+.btn::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+.btn-small {
+  font-size: 80%;
+}
+.btn-info {
+  background-color: #2980b9 !important;
+}
+.btn-info:hover {
+  background-color: #2e8ece !important;
+}
+.btn-neutral {
+  background-color: #f3f6f6 !important;
+  color: #404040 !important;
+}
+.btn-neutral:hover {
+  background-color: #e5ebeb !important;
+  color: #404040;
+}
+.btn-neutral:visited {
+  color: #404040 !important;
+}
+.btn-success {
+  background-color: #27ae60 !important;
+}
+.btn-success:hover {
+  background-color: #295 !important;
+}
+.btn-danger {
+  background-color: #e74c3c !important;
+}
+.btn-danger:hover {
+  background-color: #ea6153 !important;
+}
+.btn-warning {
+  background-color: #e67e22 !important;
+}
+.btn-warning:hover {
+  background-color: #e98b39 !important;
+}
+.btn-invert {
+  background-color: #222;
+}
+.btn-invert:hover {
+  background-color: #2f2f2f !important;
+}
+.btn-link {
+  background-color: transparent !important;
+  color: #2980b9;
+  box-shadow: none;
+  border-color: transparent !important;
+}
+.btn-link:active,
+.btn-link:hover {
+  background-color: transparent !important;
+  color: #409ad5 !important;
+  box-shadow: none;
+}
+.btn-link:visited {
+  color: #2980b9;
+}
+.wy-btn-group .btn,
+.wy-control .btn {
+  vertical-align: middle;
+}
+.wy-btn-group {
+  margin-bottom: 24px;
+  *zoom: 1;
+}
+.wy-btn-group:after,
+.wy-btn-group:before {
+  display: table;
+  content: "";
+}
+.wy-btn-group:after {
+  clear: both;
+}
+.wy-dropdown {
+  position: relative;
+  display: inline-block;
+}
+.wy-dropdown-active .wy-dropdown-menu {
+  display: block;
+}
+.wy-dropdown-menu {
+  position: absolute;
+  left: 0;
+  display: none;
+  float: left;
+  top: 100%;
+  min-width: 100%;
+  background: #fcfcfc;
+  z-index: 100;
+  border: 1px solid #cfd7dd;
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
+  padding: 12px;
+}
+.wy-dropdown-menu > dd > a {
+  display: block;
+  clear: both;
+  color: #404040;
+  white-space: nowrap;
+  font-size: 90%;
+  padding: 0 12px;
+  cursor: pointer;
+}
+.wy-dropdown-menu > dd > a:hover {
+  background: #000000;
+  color: #fff;
+}
+.wy-dropdown-menu > dd.divider {
+  border-top: 1px solid #cfd7dd;
+  margin: 6px 0;
+}
+.wy-dropdown-menu > dd.search {
+  padding-bottom: 12px;
+}
+.wy-dropdown-menu > dd.search input[type="search"] {
+  width: 100%;
+}
+.wy-dropdown-menu > dd.call-to-action {
+  background: #e3e3e3;
+  text-transform: uppercase;
+  font-weight: 500;
+  font-size: 80%;
+}
+.wy-dropdown-menu > dd.call-to-action:hover {
+  background: #e3e3e3;
+}
+.wy-dropdown-menu > dd.call-to-action .btn {
+  color: #fff;
+}
+.wy-dropdown.wy-dropdown-up .wy-dropdown-menu {
+  bottom: 100%;
+  top: auto;
+  left: auto;
+  right: 0;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu {
+  background: #fcfcfc;
+  margin-top: 2px;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a {
+  padding: 6px 12px;
+}
+.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover {
+  background: #000000;
+  color: #fff;
+}
+.wy-dropdown.wy-dropdown-left .wy-dropdown-menu {
+  right: 0;
+  left: auto;
+  text-align: right;
+}
+.wy-dropdown-arrow:before {
+  content: " ";
+  border-bottom: 5px solid #f5f5f5;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
+  position: absolute;
+  display: block;
+  top: -4px;
+  left: 50%;
+  margin-left: -3px;
+}
+.wy-dropdown-arrow.wy-dropdown-arrow-left:before {
+  left: 11px;
+}
+.wy-form-stacked select {
+  display: block;
+}
+.wy-form-aligned .wy-help-inline,
+.wy-form-aligned input,
+.wy-form-aligned label,
+.wy-form-aligned select,
+.wy-form-aligned textarea {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+  vertical-align: middle;
+}
+.wy-form-aligned .wy-control-group > label {
+  display: inline-block;
+  vertical-align: middle;
+  width: 10em;
+  margin: 6px 12px 0 0;
+  float: left;
+}
+.wy-form-aligned .wy-control {
+  float: left;
+}
+.wy-form-aligned .wy-control label {
+  display: block;
+}
+.wy-form-aligned .wy-control select {
+  margin-top: 6px;
+}
+fieldset {
+  margin: 0;
+}
+fieldset,
+legend {
+  border: 0;
+  padding: 0;
+}
+legend {
+  width: 100%;
+  white-space: normal;
+  margin-bottom: 24px;
+  font-size: 150%;
+  *margin-left: -7px;
+}
+label,
+legend {
+  display: block;
+}
+label {
+  margin: 0 0 0.3125em;
+  color: #333;
+  font-size: 90%;
+}
+input,
+select,
+textarea {
+  font-size: 100%;
+  margin: 0;
+  vertical-align: baseline;
+  *vertical-align: middle;
+}
+.wy-control-group {
+  margin-bottom: 24px;
+  max-width: 1200px;
+  margin-left: auto;
+  margin-right: auto;
+  *zoom: 1;
+}
+.wy-control-group:after,
+.wy-control-group:before {
+  display: table;
+  content: "";
+}
+.wy-control-group:after {
+  clear: both;
+}
+.wy-control-group.wy-control-group-required > label:after {
+  content: " *";
+  color: #e74c3c;
+}
+.wy-control-group .wy-form-full,
+.wy-control-group .wy-form-halves,
+.wy-control-group .wy-form-thirds {
+  padding-bottom: 12px;
+}
+.wy-control-group .wy-form-full input[type="color"],
+.wy-control-group .wy-form-full input[type="date"],
+.wy-control-group .wy-form-full input[type="datetime-local"],
+.wy-control-group .wy-form-full input[type="datetime"],
+.wy-control-group .wy-form-full input[type="email"],
+.wy-control-group .wy-form-full input[type="month"],
+.wy-control-group .wy-form-full input[type="number"],
+.wy-control-group .wy-form-full input[type="password"],
+.wy-control-group .wy-form-full input[type="search"],
+.wy-control-group .wy-form-full input[type="tel"],
+.wy-control-group .wy-form-full input[type="text"],
+.wy-control-group .wy-form-full input[type="time"],
+.wy-control-group .wy-form-full input[type="url"],
+.wy-control-group .wy-form-full input[type="week"],
+.wy-control-group .wy-form-full select,
+.wy-control-group .wy-form-halves input[type="color"],
+.wy-control-group .wy-form-halves input[type="date"],
+.wy-control-group .wy-form-halves input[type="datetime-local"],
+.wy-control-group .wy-form-halves input[type="datetime"],
+.wy-control-group .wy-form-halves input[type="email"],
+.wy-control-group .wy-form-halves input[type="month"],
+.wy-control-group .wy-form-halves input[type="number"],
+.wy-control-group .wy-form-halves input[type="password"],
+.wy-control-group .wy-form-halves input[type="search"],
+.wy-control-group .wy-form-halves input[type="tel"],
+.wy-control-group .wy-form-halves input[type="text"],
+.wy-control-group .wy-form-halves input[type="time"],
+.wy-control-group .wy-form-halves input[type="url"],
+.wy-control-group .wy-form-halves input[type="week"],
+.wy-control-group .wy-form-halves select,
+.wy-control-group .wy-form-thirds input[type="color"],
+.wy-control-group .wy-form-thirds input[type="date"],
+.wy-control-group .wy-form-thirds input[type="datetime-local"],
+.wy-control-group .wy-form-thirds input[type="datetime"],
+.wy-control-group .wy-form-thirds input[type="email"],
+.wy-control-group .wy-form-thirds input[type="month"],
+.wy-control-group .wy-form-thirds input[type="number"],
+.wy-control-group .wy-form-thirds input[type="password"],
+.wy-control-group .wy-form-thirds input[type="search"],
+.wy-control-group .wy-form-thirds input[type="tel"],
+.wy-control-group .wy-form-thirds input[type="text"],
+.wy-control-group .wy-form-thirds input[type="time"],
+.wy-control-group .wy-form-thirds input[type="url"],
+.wy-control-group .wy-form-thirds input[type="week"],
+.wy-control-group .wy-form-thirds select {
+  width: 100%;
+}
+.wy-control-group .wy-form-full {
+  float: left;
+  display: block;
+  width: 100%;
+  margin-right: 0;
+}
+.wy-control-group .wy-form-full:last-child {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-halves {
+  float: left;
+  display: block;
+  margin-right: 2.35765%;
+  width: 48.82117%;
+}
+.wy-control-group .wy-form-halves:last-child,
+.wy-control-group .wy-form-halves:nth-of-type(2n) {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-halves:nth-of-type(odd) {
+  clear: left;
+}
+.wy-control-group .wy-form-thirds {
+  float: left;
+  display: block;
+  margin-right: 2.35765%;
+  width: 31.76157%;
+}
+.wy-control-group .wy-form-thirds:last-child,
+.wy-control-group .wy-form-thirds:nth-of-type(3n) {
+  margin-right: 0;
+}
+.wy-control-group .wy-form-thirds:nth-of-type(3n + 1) {
+  clear: left;
+}
+.wy-control-group.wy-control-group-no-input .wy-control,
+.wy-control-no-input {
+  margin: 6px 0 0;
+  font-size: 90%;
+}
+.wy-control-no-input {
+  display: inline-block;
+}
+.wy-control-group.fluid-input input[type="color"],
+.wy-control-group.fluid-input input[type="date"],
+.wy-control-group.fluid-input input[type="datetime-local"],
+.wy-control-group.fluid-input input[type="datetime"],
+.wy-control-group.fluid-input input[type="email"],
+.wy-control-group.fluid-input input[type="month"],
+.wy-control-group.fluid-input input[type="number"],
+.wy-control-group.fluid-input input[type="password"],
+.wy-control-group.fluid-input input[type="search"],
+.wy-control-group.fluid-input input[type="tel"],
+.wy-control-group.fluid-input input[type="text"],
+.wy-control-group.fluid-input input[type="time"],
+.wy-control-group.fluid-input input[type="url"],
+.wy-control-group.fluid-input input[type="week"] {
+  width: 100%;
+}
+.wy-form-message-inline {
+  padding-left: 0.3em;
+  color: #666;
+  font-size: 90%;
+}
+.wy-form-message {
+  display: block;
+  color: #999;
+  font-size: 70%;
+  margin-top: 0.3125em;
+  font-style: italic;
+}
+.wy-form-message p {
+  font-size: inherit;
+  font-style: italic;
+  margin-bottom: 6px;
+}
+.wy-form-message p:last-child {
+  margin-bottom: 0;
+}
+input {
+  line-height: normal;
+}
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button;
+  cursor: pointer;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  *overflow: visible;
+}
+input[type="color"],
+input[type="date"],
+input[type="datetime-local"],
+input[type="datetime"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"] {
+  -webkit-appearance: none;
+  padding: 6px;
+  display: inline-block;
+  border: 1px solid #ccc;
+  font-size: 80%;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  box-shadow: inset 0 1px 3px #ddd;
+  border-radius: 0;
+  -webkit-transition: border 0.3s linear;
+  -moz-transition: border 0.3s linear;
+  transition: border 0.3s linear;
+}
+input[type="datetime-local"] {
+  padding: 0.34375em 0.625em;
+}
+input[disabled] {
+  cursor: default;
+}
+input[type="checkbox"],
+input[type="radio"] {
+  padding: 0;
+  margin-right: 0.3125em;
+  *height: 13px;
+  *width: 13px;
+}
+input[type="checkbox"],
+input[type="radio"],
+input[type="search"] {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+input[type="color"]:focus,
+input[type="date"]:focus,
+input[type="datetime-local"]:focus,
+input[type="datetime"]:focus,
+input[type="email"]:focus,
+input[type="month"]:focus,
+input[type="number"]:focus,
+input[type="password"]:focus,
+input[type="search"]:focus,
+input[type="tel"]:focus,
+input[type="text"]:focus,
+input[type="time"]:focus,
+input[type="url"]:focus,
+input[type="week"]:focus {
+  outline: 0;
+  outline: thin dotted\9;
+  border-color: #333;
+}
+input.no-focus:focus {
+  border-color: #ccc !important;
+}
+input[type="checkbox"]:focus,
+input[type="file"]:focus,
+input[type="radio"]:focus {
+  outline: thin dotted #333;
+  outline: 1px auto #129fea;
+}
+input[type="color"][disabled],
+input[type="date"][disabled],
+input[type="datetime-local"][disabled],
+input[type="datetime"][disabled],
+input[type="email"][disabled],
+input[type="month"][disabled],
+input[type="number"][disabled],
+input[type="password"][disabled],
+input[type="search"][disabled],
+input[type="tel"][disabled],
+input[type="text"][disabled],
+input[type="time"][disabled],
+input[type="url"][disabled],
+input[type="week"][disabled] {
+  cursor: not-allowed;
+  background-color: #fafafa;
+}
+input:focus:invalid,
+select:focus:invalid,
+textarea:focus:invalid {
+  color: #e74c3c;
+  border: 1px solid #e74c3c;
+}
+input:focus:invalid:focus,
+select:focus:invalid:focus,
+textarea:focus:invalid:focus {
+  border-color: #e74c3c;
+}
+input[type="checkbox"]:focus:invalid:focus,
+input[type="file"]:focus:invalid:focus,
+input[type="radio"]:focus:invalid:focus {
+  outline-color: #e74c3c;
+}
+input.wy-input-large {
+  padding: 12px;
+  font-size: 100%;
+}
+textarea {
+  overflow: auto;
+  vertical-align: top;
+  width: 100%;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+}
+select,
+textarea {
+  padding: 0.5em 0.625em;
+  display: inline-block;
+  border: 1px solid #ccc;
+  font-size: 80%;
+  box-shadow: inset 0 1px 3px #ddd;
+  -webkit-transition: border 0.3s linear;
+  -moz-transition: border 0.3s linear;
+  transition: border 0.3s linear;
+}
+select {
+  border: 1px solid #ccc;
+  background-color: #fff;
+}
+select[multiple] {
+  height: auto;
+}
+select:focus,
+textarea:focus {
+  outline: 0;
+}
+input[readonly],
+select[disabled],
+select[readonly],
+textarea[disabled],
+textarea[readonly] {
+  cursor: not-allowed;
+  background-color: #fafafa;
+}
+input[type="checkbox"][disabled],
+input[type="radio"][disabled] {
+  cursor: not-allowed;
+}
+.wy-checkbox,
+.wy-radio {
+  margin: 6px 0;
+  color: #404040;
+  display: block;
+}
+.wy-checkbox input,
+.wy-radio input {
+  vertical-align: baseline;
+}
+.wy-form-message-inline {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+  vertical-align: middle;
+}
+.wy-input-prefix,
+.wy-input-suffix {
+  white-space: nowrap;
+  padding: 6px;
+}
+.wy-input-prefix .wy-input-context,
+.wy-input-suffix .wy-input-context {
+  line-height: 27px;
+  padding: 0 8px;
+  display: inline-block;
+  font-size: 80%;
+  background-color: #f3f6f6;
+  border: 1px solid #ccc;
+  color: #999;
+}
+.wy-input-suffix .wy-input-context {
+  border-left: 0;
+}
+.wy-input-prefix .wy-input-context {
+  border-right: 0;
+}
+.wy-switch {
+  position: relative;
+  display: block;
+  height: 24px;
+  margin-top: 12px;
+  cursor: pointer;
+}
+.wy-switch:before {
+  left: 0;
+  top: 0;
+  width: 36px;
+  height: 12px;
+  background: #ccc;
+}
+.wy-switch:after,
+.wy-switch:before {
+  position: absolute;
+  content: "";
+  display: block;
+  border-radius: 4px;
+  -webkit-transition: all 0.2s ease-in-out;
+  -moz-transition: all 0.2s ease-in-out;
+  transition: all 0.2s ease-in-out;
+}
+.wy-switch:after {
+  width: 18px;
+  height: 18px;
+  background: #999;
+  left: -3px;
+  top: -3px;
+}
+.wy-switch span {
+  position: absolute;
+  left: 48px;
+  display: block;
+  font-size: 12px;
+  color: #ccc;
+  line-height: 1;
+}
+.wy-switch.active:before {
+  background: #1e8449;
+}
+.wy-switch.active:after {
+  left: 24px;
+  background: #27ae60;
+}
+.wy-switch.disabled {
+  cursor: not-allowed;
+  opacity: 0.8;
+}
+.wy-control-group.wy-control-group-error .wy-form-message,
+.wy-control-group.wy-control-group-error > label {
+  color: #e74c3c;
+}
+.wy-control-group.wy-control-group-error input[type="color"],
+.wy-control-group.wy-control-group-error input[type="date"],
+.wy-control-group.wy-control-group-error input[type="datetime-local"],
+.wy-control-group.wy-control-group-error input[type="datetime"],
+.wy-control-group.wy-control-group-error input[type="email"],
+.wy-control-group.wy-control-group-error input[type="month"],
+.wy-control-group.wy-control-group-error input[type="number"],
+.wy-control-group.wy-control-group-error input[type="password"],
+.wy-control-group.wy-control-group-error input[type="search"],
+.wy-control-group.wy-control-group-error input[type="tel"],
+.wy-control-group.wy-control-group-error input[type="text"],
+.wy-control-group.wy-control-group-error input[type="time"],
+.wy-control-group.wy-control-group-error input[type="url"],
+.wy-control-group.wy-control-group-error input[type="week"],
+.wy-control-group.wy-control-group-error textarea {
+  border: 1px solid #e74c3c;
+}
+.wy-inline-validate {
+  white-space: nowrap;
+}
+.wy-inline-validate .wy-input-context {
+  padding: 0.5em 0.625em;
+  display: inline-block;
+  font-size: 80%;
+}
+.wy-inline-validate.wy-inline-validate-success .wy-input-context {
+  color: #27ae60;
+}
+.wy-inline-validate.wy-inline-validate-danger .wy-input-context {
+  color: #e74c3c;
+}
+.wy-inline-validate.wy-inline-validate-warning .wy-input-context {
+  color: #e67e22;
+}
+.wy-inline-validate.wy-inline-validate-info .wy-input-context {
+  color: #2980b9;
+}
+.rotate-90 {
+  -webkit-transform: rotate(90deg);
+  -moz-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  -o-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.rotate-180 {
+  -webkit-transform: rotate(180deg);
+  -moz-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  -o-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.rotate-270 {
+  -webkit-transform: rotate(270deg);
+  -moz-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  -o-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.mirror {
+  -webkit-transform: scaleX(-1);
+  -moz-transform: scaleX(-1);
+  -ms-transform: scaleX(-1);
+  -o-transform: scaleX(-1);
+  transform: scaleX(-1);
+}
+.mirror.rotate-90 {
+  -webkit-transform: scaleX(-1) rotate(90deg);
+  -moz-transform: scaleX(-1) rotate(90deg);
+  -ms-transform: scaleX(-1) rotate(90deg);
+  -o-transform: scaleX(-1) rotate(90deg);
+  transform: scaleX(-1) rotate(90deg);
+}
+.mirror.rotate-180 {
+  -webkit-transform: scaleX(-1) rotate(180deg);
+  -moz-transform: scaleX(-1) rotate(180deg);
+  -ms-transform: scaleX(-1) rotate(180deg);
+  -o-transform: scaleX(-1) rotate(180deg);
+  transform: scaleX(-1) rotate(180deg);
+}
+.mirror.rotate-270 {
+  -webkit-transform: scaleX(-1) rotate(270deg);
+  -moz-transform: scaleX(-1) rotate(270deg);
+  -ms-transform: scaleX(-1) rotate(270deg);
+  -o-transform: scaleX(-1) rotate(270deg);
+  transform: scaleX(-1) rotate(270deg);
+}
+@media only screen and (max-width: 480px) {
+  .wy-form button[type="submit"] {
+    margin: 0.7em 0 0;
+  }
+  .wy-form input[type="color"],
+  .wy-form input[type="date"],
+  .wy-form input[type="datetime-local"],
+  .wy-form input[type="datetime"],
+  .wy-form input[type="email"],
+  .wy-form input[type="month"],
+  .wy-form input[type="number"],
+  .wy-form input[type="password"],
+  .wy-form input[type="search"],
+  .wy-form input[type="tel"],
+  .wy-form input[type="text"],
+  .wy-form input[type="time"],
+  .wy-form input[type="url"],
+  .wy-form input[type="week"],
+  .wy-form label {
+    margin-bottom: 0.3em;
+    display: block;
+  }
+  .wy-form input[type="color"],
+  .wy-form input[type="date"],
+  .wy-form input[type="datetime-local"],
+  .wy-form input[type="datetime"],
+  .wy-form input[type="email"],
+  .wy-form input[type="month"],
+  .wy-form input[type="number"],
+  .wy-form input[type="password"],
+  .wy-form input[type="search"],
+  .wy-form input[type="tel"],
+  .wy-form input[type="time"],
+  .wy-form input[type="url"],
+  .wy-form input[type="week"] {
+    margin-bottom: 0;
+  }
+  .wy-form-aligned .wy-control-group label {
+    margin-bottom: 0.3em;
+    text-align: left;
+    display: block;
+    width: 100%;
+  }
+  .wy-form-aligned .wy-control {
+    margin: 1.5em 0 0;
+  }
+  .wy-form-message,
+  .wy-form-message-inline,
+  .wy-form .wy-help-inline {
+    display: block;
+    font-size: 80%;
+    padding: 6px 0;
+  }
+}
+@media screen and (max-width: 768px) {
+  .tablet-hide {
+    display: none;
+  }
+}
+@media screen and (max-width: 480px) {
+  .mobile-hide {
+    display: none;
+  }
+}
+.float-left {
+  float: left;
+}
+.float-right {
+  float: right;
+}
+.full-width {
+  width: 100%;
+}
+.rst-content table.docutils,
+.rst-content table.field-list,
+.wy-table {
+  border-collapse: collapse;
+  border-spacing: 0;
+  empty-cells: show;
+  margin-bottom: 24px;
+}
+.rst-content table.docutils caption,
+.rst-content table.field-list caption,
+.wy-table caption {
+  color: #000;
+  font-style: italic;
+  font-size: 85%;
+  padding: 1em 0;
+  text-align: center;
+}
+.rst-content table.docutils td,
+.rst-content table.docutils th,
+.rst-content table.field-list td,
+.rst-content table.field-list th,
+.wy-table td,
+.wy-table th {
+  font-size: 90%;
+  margin: 0;
+  overflow: visible;
+  padding: 8px 16px;
+}
+.rst-content table.docutils td:first-child,
+.rst-content table.docutils th:first-child,
+.rst-content table.field-list td:first-child,
+.rst-content table.field-list th:first-child,
+.wy-table td:first-child,
+.wy-table th:first-child {
+  border-left-width: 0;
+}
+.rst-content table.docutils thead,
+.rst-content table.field-list thead,
+.wy-table thead {
+  color: #000;
+  text-align: left;
+  vertical-align: bottom;
+  white-space: nowrap;
+}
+.rst-content table.docutils thead th,
+.rst-content table.field-list thead th,
+.wy-table thead th {
+  font-weight: 700;
+  border-bottom: 2px solid #e1e4e5;
+}
+.rst-content table.docutils td,
+.rst-content table.field-list td,
+.wy-table td {
+  background-color: transparent;
+  vertical-align: middle;
+}
+.rst-content table.docutils td p,
+.rst-content table.field-list td p,
+.wy-table td p {
+  line-height: 18px;
+}
+.rst-content table.docutils td p:last-child,
+.rst-content table.field-list td p:last-child,
+.wy-table td p:last-child {
+  margin-bottom: 0;
+}
+.rst-content table.docutils .wy-table-cell-min,
+.rst-content table.field-list .wy-table-cell-min,
+.wy-table .wy-table-cell-min {
+  width: 1%;
+  padding-right: 0;
+}
+.rst-content table.docutils .wy-table-cell-min input[type="checkbox"],
+.rst-content table.field-list .wy-table-cell-min input[type="checkbox"],
+.wy-table .wy-table-cell-min input[type="checkbox"] {
+  margin: 0;
+}
+.wy-table-secondary {
+  color: grey;
+  font-size: 90%;
+}
+.wy-table-tertiary {
+  color: grey;
+  font-size: 80%;
+}
+.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,
+.wy-table-backed,
+.wy-table-odd td,
+.wy-table-striped tr:nth-child(2n-1) td {
+  background-color: #f3f6f6;
+}
+.rst-content table.docutils,
+.wy-table-bordered-all {
+  border: 1px solid #e1e4e5;
+}
+.rst-content table.docutils td,
+.wy-table-bordered-all td {
+  border-bottom: 1px solid #e1e4e5;
+  border-left: 1px solid #e1e4e5;
+}
+.rst-content table.docutils tbody > tr:last-child td,
+.wy-table-bordered-all tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-bordered {
+  border: 1px solid #e1e4e5;
+}
+.wy-table-bordered-rows td {
+  border-bottom: 1px solid #e1e4e5;
+}
+.wy-table-bordered-rows tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-horizontal td,
+.wy-table-horizontal th {
+  border-width: 0 0 1px;
+  border-bottom: 1px solid #e1e4e5;
+}
+.wy-table-horizontal tbody > tr:last-child td {
+  border-bottom-width: 0;
+}
+.wy-table-responsive {
+  margin-bottom: 24px;
+  max-width: 100%;
+  overflow: auto;
+}
+.wy-table-responsive table {
+  margin-bottom: 0 !important;
+}
+.wy-table-responsive table td,
+.wy-table-responsive table th {
+  white-space: nowrap;
+}
+a {
+  color: #2980b9;
+  text-decoration: none;
+  cursor: pointer;
+}
+a:hover {
+  color: #3091d1;
+}
+a:visited {
+  color: #2980b9;
+}
+html {
+  height: 100%;
+}
+body,
+html {
+  overflow-x: hidden;
+}
+body {
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  font-weight: 400;
+  color: #404040;
+  min-height: 100%;
+  background: #edf0f2;
+}
+.wy-text-left {
+  text-align: left;
+}
+.wy-text-center {
+  text-align: center;
+}
+.wy-text-right {
+  text-align: right;
+}
+.wy-text-large {
+  font-size: 120%;
+}
+.wy-text-normal {
+  font-size: 100%;
+}
+.wy-text-small,
+small {
+  font-size: 80%;
+}
+.wy-text-strike {
+  text-decoration: line-through;
+}
+.wy-text-warning {
+  color: #e67e22 !important;
+}
+a.wy-text-warning:hover {
+  color: #eb9950 !important;
+}
+.wy-text-info {
+  color: #2980b9 !important;
+}
+a.wy-text-info:hover {
+  color: #409ad5 !important;
+}
+.wy-text-success {
+  color: #27ae60 !important;
+}
+a.wy-text-success:hover {
+  color: #36d278 !important;
+}
+.wy-text-danger {
+  color: #e74c3c !important;
+}
+a.wy-text-danger:hover {
+  color: #ed7669 !important;
+}
+.wy-text-neutral {
+  color: #404040 !important;
+}
+a.wy-text-neutral:hover {
+  color: #595959 !important;
+}
+.rst-content .toctree-wrapper > p.caption,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+legend {
+  margin-top: 0;
+  font-weight: 700;
+  font-family: Helvetica, Arial, sans-serif, ff-tisa-web-pro, Georgia;
+}
+p {
+  line-height: 24px;
+  font-size: 16px;
+  margin: 0 0 24px;
+}
+h1 {
+  font-size: 175%;
+}
+.rst-content .toctree-wrapper > p.caption,
+h2 {
+  font-size: 150%;
+}
+h3 {
+  font-size: 125%;
+}
+h4 {
+  font-size: 115%;
+}
+h5 {
+  font-size: 110%;
+}
+h6 {
+  font-size: 100%;
+}
+hr {
+  display: block;
+  height: 1px;
+  border: 0;
+  border-top: 1px solid #e1e4e5;
+  margin: 24px 0;
+  padding: 0;
+}
+.rst-content code,
+.rst-content tt,
+code {
+  white-space: nowrap;
+  max-width: 100%;
+  background: #fff;
+  border: 1px solid #e1e4e5;
+  font-size: 75%;
+  padding: 0 5px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  color: #E60000;
+  overflow-x: auto;
+}
+.rst-content tt.code-large,
+code.code-large {
+  font-size: 90%;
+}
+.rst-content .section ul,
+.rst-content .toctree-wrapper ul,
+.wy-plain-list-disc,
+article ul {
+  list-style: disc;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content .section ul li,
+.rst-content .toctree-wrapper ul li,
+.wy-plain-list-disc li,
+article ul li {
+  list-style: disc;
+  margin-left: 24px;
+}
+.rst-content .section ul li p:last-child,
+.rst-content .section ul li ul,
+.rst-content .toctree-wrapper ul li p:last-child,
+.rst-content .toctree-wrapper ul li ul,
+.wy-plain-list-disc li p:last-child,
+.wy-plain-list-disc li ul,
+article ul li p:last-child,
+article ul li ul {
+  margin-bottom: 0;
+}
+.rst-content .section ul li li,
+.rst-content .toctree-wrapper ul li li,
+.wy-plain-list-disc li li,
+article ul li li {
+  list-style: circle;
+}
+.rst-content .section ul li li li,
+.rst-content .toctree-wrapper ul li li li,
+.wy-plain-list-disc li li li,
+article ul li li li {
+  list-style: square;
+}
+.rst-content .section ul li ol li,
+.rst-content .toctree-wrapper ul li ol li,
+.wy-plain-list-disc li ol li,
+article ul li ol li {
+  list-style: decimal;
+}
+.rst-content .section ol,
+.rst-content ol.arabic,
+.wy-plain-list-decimal,
+article ol {
+  list-style: decimal;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content .section ol li,
+.rst-content ol.arabic li,
+.wy-plain-list-decimal li,
+article ol li {
+  list-style: decimal;
+  margin-left: 24px;
+}
+.rst-content .section ol li p:last-child,
+.rst-content .section ol li ul,
+.rst-content ol.arabic li p:last-child,
+.rst-content ol.arabic li ul,
+.wy-plain-list-decimal li p:last-child,
+.wy-plain-list-decimal li ul,
+article ol li p:last-child,
+article ol li ul {
+  margin-bottom: 0;
+}
+.rst-content .section ol li ul li,
+.rst-content ol.arabic li ul li,
+.wy-plain-list-decimal li ul li,
+article ol li ul li {
+  list-style: disc;
+}
+.wy-breadcrumbs {
+  *zoom: 1;
+}
+.wy-breadcrumbs:after,
+.wy-breadcrumbs:before {
+  display: table;
+  content: "";
+}
+.wy-breadcrumbs:after {
+  clear: both;
+}
+.wy-breadcrumbs li {
+  display: inline-block;
+}
+.wy-breadcrumbs li.wy-breadcrumbs-aside {
+  float: right;
+}
+.wy-breadcrumbs li a {
+  display: inline-block;
+  padding: 5px;
+}
+
+.wy-breadcrumbs li a:before {
+  font-weight: bold;
+  color: #000000;
+  content: "//";
+}
+.wy-breadcrumbs li a:first-child {
+  padding-left: 0;
+}
+
+.rst-content .wy-breadcrumbs li tt,
+.wy-breadcrumbs li .rst-content tt,
+.wy-breadcrumbs li code {
+  padding: 5px;
+  border: none;
+  background: none;
+}
+.rst-content .wy-breadcrumbs li tt.literal,
+.wy-breadcrumbs li .rst-content tt.literal,
+.wy-breadcrumbs li code.literal {
+  color: #E60000;
+}
+.wy-breadcrumbs-extra {
+  margin-bottom: 0;
+  color: #b3b3b3;
+  font-size: 80%;
+  display: inline-block;
+}
+@media screen and (max-width: 480px) {
+  .wy-breadcrumbs-extra,
+  .wy-breadcrumbs li.wy-breadcrumbs-aside {
+    display: none;
+  }
+}
+@media print {
+  .wy-breadcrumbs li.wy-breadcrumbs-aside {
+    display: none;
+  }
+}
+html {
+  font-size: 16px;
+}
+.wy-affix {
+  position: fixed;
+  top: 1.618em;
+}
+.wy-menu a:hover {
+  text-decoration: none;
+}
+.wy-menu-horiz {
+  *zoom: 1;
+}
+.wy-menu-horiz:after,
+.wy-menu-horiz:before {
+  display: table;
+  content: "";
+}
+.wy-menu-horiz:after {
+  clear: both;
+}
+.wy-menu-horiz li,
+.wy-menu-horiz ul {
+  display: inline-block;
+}
+.wy-menu-horiz li:hover {
+  background: hsla(0, 0%, 100%, 0.1);
+}
+.wy-menu-horiz li.divide-left {
+  border-left: 1px solid #404040;
+}
+.wy-menu-horiz li.divide-right {
+  border-right: 1px solid #404040;
+}
+.wy-menu-horiz a {
+  height: 32px;
+  display: inline-block;
+  line-height: 32px;
+  padding: 0 16px;
+}
+.wy-menu-vertical {
+  width: 300px;
+}
+.wy-menu-vertical header,
+.wy-menu-vertical p.caption::before {
+    font-weight: normal;
+    letter-spacing: .1rem;
+    color: #E60000;
+    font-size: 120%;
+    content: "// ";
+  }
+.wy-menu-vertical p.caption {
+  color: #ffffff;
+  height: 32px;
+  line-height: 32px;
+  padding: 0 1.618em;
+  margin: 12px 0 0;
+  display: block;
+  font-weight: 400;
+  text-transform: uppercase;
+  font-size: 85%;
+  white-space: nowrap;
+}
+.wy-menu-vertical ul {
+  margin-bottom: 0;
+}
+.wy-menu-vertical li.divide-top {
+  border-top: 1px solid #404040;
+}
+.wy-menu-vertical li.divide-bottom {
+  border-bottom: 1px solid #404040;
+}
+.wy-menu-vertical li.current {
+  background: #e3e3e3;
+}
+.wy-menu-vertical li.current a {
+  color: grey;
+  border-right: 1px solid #c9c9c9;
+  padding: 0.4045em 2.427em;
+}
+.wy-menu-vertical li.current a:hover {
+  background: #d6d6d6;
+}
+.rst-content .wy-menu-vertical li tt,
+.wy-menu-vertical li .rst-content tt,
+.wy-menu-vertical li code {
+  border: none;
+  background: inherit;
+  color: inherit;
+  padding-left: 0;
+  padding-right: 0;
+}
+.wy-menu-vertical li span.toctree-expand {
+  display: block;
+  float: left;
+  margin-left: -1.2em;
+  font-size: 0.8em;
+  line-height: 1.6em;
+  color: #4d4d4d;
+}
+.wy-menu-vertical li.current > a,
+.wy-menu-vertical li.on a {
+  color: #404040;
+  font-weight: 700;
+  position: relative;
+  background: #fcfcfc;
+  border: none;
+  padding: 0.4045em 1.618em;
+}
+.wy-menu-vertical li.current > a:hover,
+.wy-menu-vertical li.on a:hover {
+  background: #fcfcfc;
+}
+.wy-menu-vertical li.current > a:hover span.toctree-expand,
+.wy-menu-vertical li.on a:hover span.toctree-expand {
+  color: grey;
+}
+.wy-menu-vertical li.current > a span.toctree-expand,
+.wy-menu-vertical li.on a span.toctree-expand {
+  display: block;
+  font-size: 0.8em;
+  line-height: 1.6em;
+  color: #333;
+}
+.wy-menu-vertical li.toctree-l1.current > a {
+  border-bottom: 1px solid #c9c9c9;
+  border-top: 1px solid #c9c9c9;
+}
+.wy-menu-vertical .toctree-l1.current .toctree-l2 > ul,
+.wy-menu-vertical .toctree-l2.current .toctree-l3 > ul,
+.wy-menu-vertical .toctree-l3.current .toctree-l4 > ul,
+.wy-menu-vertical .toctree-l4.current .toctree-l5 > ul,
+.wy-menu-vertical .toctree-l5.current .toctree-l6 > ul,
+.wy-menu-vertical .toctree-l6.current .toctree-l7 > ul,
+.wy-menu-vertical .toctree-l7.current .toctree-l8 > ul,
+.wy-menu-vertical .toctree-l8.current .toctree-l9 > ul,
+.wy-menu-vertical .toctree-l9.current .toctree-l10 > ul,
+.wy-menu-vertical .toctree-l10.current .toctree-l11 > ul {
+  display: none;
+}
+.wy-menu-vertical .toctree-l1.current .current.toctree-l2 > ul,
+.wy-menu-vertical .toctree-l2.current .current.toctree-l3 > ul,
+.wy-menu-vertical .toctree-l3.current .current.toctree-l4 > ul,
+.wy-menu-vertical .toctree-l4.current .current.toctree-l5 > ul,
+.wy-menu-vertical .toctree-l5.current .current.toctree-l6 > ul,
+.wy-menu-vertical .toctree-l6.current .current.toctree-l7 > ul,
+.wy-menu-vertical .toctree-l7.current .current.toctree-l8 > ul,
+.wy-menu-vertical .toctree-l8.current .current.toctree-l9 > ul,
+.wy-menu-vertical .toctree-l9.current .current.toctree-l10 > ul,
+.wy-menu-vertical .toctree-l10.current .current.toctree-l11 > ul {
+  display: block;
+}
+.wy-menu-vertical li.toctree-l3,
+.wy-menu-vertical li.toctree-l4 {
+  font-size: 0.9em;
+}
+.wy-menu-vertical li.toctree-l2 a,
+.wy-menu-vertical li.toctree-l3 a,
+.wy-menu-vertical li.toctree-l4 a,
+.wy-menu-vertical li.toctree-l5 a,
+.wy-menu-vertical li.toctree-l6 a,
+.wy-menu-vertical li.toctree-l7 a,
+.wy-menu-vertical li.toctree-l8 a,
+.wy-menu-vertical li.toctree-l9 a,
+.wy-menu-vertical li.toctree-l10 a {
+  color: #404040;
+}
+.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,
+.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand {
+  color: grey;
+}
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a,
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a,
+.wy-menu-vertical li.toctree-l4.current li.toctree-l5 > a,
+.wy-menu-vertical li.toctree-l5.current li.toctree-l6 > a,
+.wy-menu-vertical li.toctree-l6.current li.toctree-l7 > a,
+.wy-menu-vertical li.toctree-l7.current li.toctree-l8 > a,
+.wy-menu-vertical li.toctree-l8.current li.toctree-l9 > a,
+.wy-menu-vertical li.toctree-l9.current li.toctree-l10 > a,
+.wy-menu-vertical li.toctree-l10.current li.toctree-l11 > a {
+  display: block;
+}
+.wy-menu-vertical li.toctree-l2.current > a {
+  padding: 0.4045em 2.427em;
+}
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a,
+.wy-menu-vertical li.toctree-l3.current > a {
+  padding: 0.4045em 4.045em;
+}
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a,
+.wy-menu-vertical li.toctree-l4.current > a {
+  padding: 0.4045em 5.663em;
+}
+.wy-menu-vertical li.toctree-l4.current li.toctree-l5 > a,
+.wy-menu-vertical li.toctree-l5.current > a {
+  padding: 0.4045em 7.281em;
+}
+.wy-menu-vertical li.toctree-l5.current li.toctree-l6 > a,
+.wy-menu-vertical li.toctree-l6.current > a {
+  padding: 0.4045em 8.899em;
+}
+.wy-menu-vertical li.toctree-l6.current li.toctree-l7 > a,
+.wy-menu-vertical li.toctree-l7.current > a {
+  padding: 0.4045em 10.517em;
+}
+.wy-menu-vertical li.toctree-l7.current li.toctree-l8 > a,
+.wy-menu-vertical li.toctree-l8.current > a {
+  padding: 0.4045em 12.135em;
+}
+.wy-menu-vertical li.toctree-l8.current li.toctree-l9 > a,
+.wy-menu-vertical li.toctree-l9.current > a {
+  padding: 0.4045em 13.753em;
+}
+.wy-menu-vertical li.toctree-l9.current li.toctree-l10 > a,
+.wy-menu-vertical li.toctree-l10.current > a {
+  padding: 0.4045em 15.371em;
+}
+.wy-menu-vertical li.toctree-l10.current li.toctree-l11 > a {
+  padding: 0.4045em 16.989em;
+}
+.wy-menu-vertical li.toctree-l2.current > a,
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a {
+  background: #c9c9c9;
+}
+.wy-menu-vertical li.toctree-l2 span.toctree-expand {
+  color: #a3a3a3;
+}
+.wy-menu-vertical li.toctree-l3.current > a,
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a {
+  background: #bdbdbd;
+}
+.wy-menu-vertical li.toctree-l3 span.toctree-expand {
+  color: #969696;
+}
+.wy-menu-vertical li.current ul {
+  display: block;
+}
+.wy-menu-vertical li ul {
+  margin-bottom: 0;
+  display: none;
+}
+.wy-menu-vertical li ul li a {
+  margin-bottom: 0;
+  color: #d9d9d9;
+  font-weight: 400;
+}
+.wy-menu-vertical a {
+  line-height: 18px;
+  padding: 0.4045em 1.618em;
+  display: block;
+  position: relative;
+  font-size: 90%;
+  color: #d9d9d9;
+}
+.wy-menu-vertical a:hover {
+  background-color: #4e4a4a;
+  cursor: pointer;
+}
+.wy-menu-vertical a:hover span.toctree-expand {
+  color: #d9d9d9;
+}
+.wy-menu-vertical a:active {
+  background-color: #000000;
+  cursor: pointer;
+  color: #fff;
+}
+.wy-menu-vertical a:active span.toctree-expand {
+  color: #fff;
+}
+.wy-side-nav-search {
+  display: block;
+  width: 300px;
+  padding: 0.809em;
+  margin-bottom: 0.809em;
+  z-index: 200;
+  background-color: #262626;
+  text-align: center;
+  color: #fcfcfc;
+}
+.wy-side-nav-search input[type="text"] {
+  width: 100%;
+  border-radius: 50px;
+  padding: 6px 12px;
+  border-color: #000000;
+}
+.wy-side-nav-search img {
+  display: block;
+  margin: auto auto 0.809em;
+  height: 45px;
+  width: 45px;
+  background-color: #666666;
+  padding: 5px;
+  border-radius: 100%;
+}
+.wy-side-nav-search .wy-dropdown > a,
+.wy-side-nav-search > a {
+  color: #fcfcfc;
+  font-size: 100%;
+  font-weight: 700;
+  display: inline-block;
+  padding: 4px 6px;
+  margin-bottom: 0.809em;
+}
+.wy-side-nav-search .wy-dropdown > a:hover,
+.wy-side-nav-search > a:hover {
+  background: hsla(0, 0%, 100%, 0.1);
+}
+.wy-side-nav-search .wy-dropdown > a img.logo,
+.wy-side-nav-search > a img.logo {
+  display: block;
+  margin: 0 auto;
+  height: auto;
+  width: auto;
+  border-radius: 0;
+  max-width: 100%;
+  background: transparent;
+}
+.wy-side-nav-search .wy-dropdown > a.icon img.logo,
+.wy-side-nav-search > a.icon img.logo {
+  margin-top: 0.85em;
+}
+.wy-side-nav-search > div.version {
+  margin-top: -0.4045em;
+  margin-bottom: 0.809em;
+  font-weight: 400;
+  color: #ffffff;
+}
+.wy-nav .wy-menu-vertical header {
+  color: #666666;
+}
+.wy-nav .wy-menu-vertical a {
+  color: #b3b3b3;
+}
+.wy-nav .wy-menu-vertical a:hover {
+  background-color: #000000;
+  color: #fff;
+}
+[data-menu-wrap] {
+  -webkit-transition: all 0.2s ease-in;
+  -moz-transition: all 0.2s ease-in;
+  transition: all 0.2s ease-in;
+  position: absolute;
+  opacity: 1;
+  width: 100%;
+  opacity: 0;
+}
+[data-menu-wrap].move-center {
+  left: 0;
+  right: auto;
+  opacity: 1;
+}
+[data-menu-wrap].move-left {
+  right: auto;
+  left: -100%;
+  opacity: 0;
+}
+[data-menu-wrap].move-right {
+  right: -100%;
+  left: auto;
+  opacity: 0;
+}
+.wy-body-for-nav {
+  background: #fcfcfc;
+}
+.wy-grid-for-nav {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+}
+.wy-nav-side {
+  position: fixed;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  padding-bottom: 2em;
+  width: 300px;
+  overflow-x: hidden;
+  overflow-y: hidden;
+  min-height: 100%;
+  color: #9b9b9b;
+  background: #000000;
+  z-index: 200;
+}
+.wy-side-scroll {
+  width: 320px;
+  position: relative;
+  overflow-x: hidden;
+  overflow-y: scroll;
+  height: 100%;
+}
+.wy-nav-top {
+  display: none;
+  background: #262626;
+  color: #fff;
+  padding: 0.4045em 0.809em;
+  position: relative;
+  line-height: 50px;
+  text-align: center;
+  font-size: 100%;
+  *zoom: 1;
+}
+.wy-nav-top:after,
+.wy-nav-top:before {
+  display: table;
+  content: "";
+}
+.wy-nav-top:after {
+  clear: both;
+}
+.wy-nav-top a {
+  color: #fff;
+  font-weight: 700;
+}
+.wy-nav-top img {
+  margin-right: 12px;
+  height: 45px;
+  width: 45px;
+  background-color: #666666;
+  padding: 5px;
+  border-radius: 100%;
+}
+.wy-nav-top i {
+  font-size: 30px;
+  float: left;
+  cursor: pointer;
+  padding-top: inherit;
+}
+.wy-nav-content-wrap {
+  margin-left: 300px;
+  background: #fcfcfc;
+  min-height: 100%;
+}
+.wy-nav-content {
+  padding: 1.618em 3.236em;
+  height: 100%;
+  max-width: 800px;
+  margin: auto;
+}
+.wy-body-mask {
+  position: fixed;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.2);
+  display: none;
+  z-index: 499;
+}
+.wy-body-mask.on {
+  display: block;
+}
+footer {
+  color: grey;
+}
+footer p {
+  margin-bottom: 12px;
+}
+.rst-content footer span.commit tt,
+footer span.commit .rst-content tt,
+footer span.commit code {
+  padding: 0;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  font-size: 1em;
+  background: none;
+  border: none;
+  color: grey;
+}
+.rst-footer-buttons {
+  *zoom: 1;
+}
+.rst-footer-buttons:after,
+.rst-footer-buttons:before {
+  width: 100%;
+  display: table;
+  content: "";
+}
+.rst-footer-buttons:after {
+  clear: both;
+}
+.rst-breadcrumbs-buttons {
+  margin-top: 12px;
+  *zoom: 1;
+}
+.rst-breadcrumbs-buttons:after,
+.rst-breadcrumbs-buttons:before {
+  display: table;
+  content: "";
+}
+.rst-breadcrumbs-buttons:after {
+  clear: both;
+}
+#search-results .search li {
+  margin-bottom: 24px;
+  border-bottom: 1px solid #e1e4e5;
+  padding-bottom: 24px;
+}
+#search-results .search li:first-child {
+  border-top: 1px solid #e1e4e5;
+  padding-top: 24px;
+}
+#search-results .search li a {
+  font-size: 120%;
+  margin-bottom: 12px;
+  display: inline-block;
+}
+#search-results .context {
+  color: grey;
+  font-size: 90%;
+}
+.genindextable li > ul {
+  margin-left: 24px;
+}
+@media screen and (max-width: 768px) {
+  .wy-body-for-nav {
+    background: #ffffff;
+  }
+  .wy-nav-top {
+    display: block;
+  }
+  .wy-nav-side {
+    left: -300px;
+  }
+  .wy-nav-side.shift {
+    width: 85%;
+    left: 0;
+  }
+  .wy-menu.wy-menu-vertical,
+  .wy-side-nav-search,
+  .wy-side-scroll {
+    width: auto;
+  }
+  .wy-nav-content-wrap {
+    margin-left: 0;
+  }
+  .wy-nav-content-wrap .wy-nav-content {
+    padding: 1.618em;
+  }
+  .wy-nav-content-wrap.shift {
+    position: fixed;
+    min-width: 100%;
+    left: 85%;
+    top: 0;
+    height: 100%;
+    overflow: hidden;
+  }
+}
+@media screen and (min-width: 1100px) {
+  .wy-nav-content-wrap {
+    background: #ffffff;
+  }
+  .wy-nav-content {
+    margin: 0;
+    background: #ffffff;
+  }
+}
+@media print {
+  .rst-versions,
+  .wy-nav-side,
+  footer {
+    display: none;
+  }
+  .wy-nav-content-wrap {
+    margin-left: 0;
+  }
+}
+.rst-versions {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 300px;
+  color: #fcfcfc;
+  background: #1f1d1d;
+  font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;
+  z-index: 400;
+}
+.rst-versions a {
+  color: #2980b9;
+  text-decoration: none;
+}
+.rst-versions .rst-badge-small {
+  display: none;
+}
+.rst-versions .rst-current-version {
+  padding: 12px;
+  background-color: #272525;
+  display: block;
+  text-align: right;
+  font-size: 90%;
+  cursor: pointer;
+  color: #27ae60;
+  *zoom: 1;
+}
+.rst-versions .rst-current-version:after,
+.rst-versions .rst-current-version:before {
+  display: table;
+  content: "";
+}
+.rst-versions .rst-current-version:after {
+  clear: both;
+}
+.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,
+.rst-content .rst-versions .rst-current-version .admonition-title,
+.rst-content code.download .rst-versions .rst-current-version span:first-child,
+.rst-content dl dt .rst-versions .rst-current-version .headerlink,
+.rst-content h1 .rst-versions .rst-current-version .headerlink,
+.rst-content h2 .rst-versions .rst-current-version .headerlink,
+.rst-content h3 .rst-versions .rst-current-version .headerlink,
+.rst-content h4 .rst-versions .rst-current-version .headerlink,
+.rst-content h5 .rst-versions .rst-current-version .headerlink,
+.rst-content h6 .rst-versions .rst-current-version .headerlink,
+.rst-content p.caption .rst-versions .rst-current-version .headerlink,
+.rst-content table > caption .rst-versions .rst-current-version .headerlink,
+.rst-content tt.download .rst-versions .rst-current-version span:first-child,
+.rst-versions .rst-current-version .fa,
+.rst-versions .rst-current-version .icon,
+.rst-versions .rst-current-version .rst-content .admonition-title,
+.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,
+.rst-versions .rst-current-version .rst-content code.download span:first-child,
+.rst-versions .rst-current-version .rst-content dl dt .headerlink,
+.rst-versions .rst-current-version .rst-content h1 .headerlink,
+.rst-versions .rst-current-version .rst-content h2 .headerlink,
+.rst-versions .rst-current-version .rst-content h3 .headerlink,
+.rst-versions .rst-current-version .rst-content h4 .headerlink,
+.rst-versions .rst-current-version .rst-content h5 .headerlink,
+.rst-versions .rst-current-version .rst-content h6 .headerlink,
+.rst-versions .rst-current-version .rst-content p.caption .headerlink,
+.rst-versions .rst-current-version .rst-content table > caption .headerlink,
+.rst-versions .rst-current-version .rst-content tt.download span:first-child,
+.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,
+.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand {
+  color: #fcfcfc;
+}
+.rst-versions .rst-current-version .fa-book,
+.rst-versions .rst-current-version .icon-book {
+  float: left;
+}
+.rst-versions .rst-current-version.rst-out-of-date {
+  background-color: #e74c3c;
+  color: #fff;
+}
+.rst-versions .rst-current-version.rst-active-old-version {
+  background-color: #f1c40f;
+  color: #000;
+}
+.rst-versions.shift-up {
+  height: auto;
+  max-height: 100%;
+  overflow-y: scroll;
+}
+.rst-versions.shift-up .rst-other-versions {
+  display: block;
+}
+.rst-versions .rst-other-versions {
+  font-size: 90%;
+  padding: 12px;
+  color: grey;
+  display: none;
+}
+.rst-versions .rst-other-versions hr {
+  display: block;
+  height: 1px;
+  border: 0;
+  margin: 20px 0;
+  padding: 0;
+  border-top: 1px solid #413d3d;
+}
+.rst-versions .rst-other-versions dd {
+  display: inline-block;
+  margin: 0;
+}
+.rst-versions .rst-other-versions dd a {
+  display: inline-block;
+  padding: 6px;
+  color: #fcfcfc;
+}
+.rst-versions.rst-badge {
+  width: auto;
+  bottom: 20px;
+  right: 20px;
+  left: auto;
+  border: none;
+  max-width: 300px;
+  max-height: 90%;
+}
+.rst-versions.rst-badge .fa-book,
+.rst-versions.rst-badge .icon-book {
+  float: none;
+  line-height: 30px;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version {
+  text-align: right;
+}
+.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,
+.rst-versions.rst-badge.shift-up .rst-current-version .icon-book {
+  float: left;
+}
+.rst-versions.rst-badge > .rst-current-version {
+  width: auto;
+  height: 30px;
+  line-height: 30px;
+  padding: 0 6px;
+  display: block;
+  text-align: center;
+}
+@media screen and (max-width: 768px) {
+  .rst-versions {
+    width: 85%;
+    display: none;
+  }
+  .rst-versions.shift {
+    display: block;
+  }
+}
+.rst-content img {
+  max-width: 100%;
+  height: auto;
+}
+.rst-content div.figure {
+  margin-bottom: 24px;
+}
+.rst-content div.figure p.caption {
+  font-style: italic;
+}
+.rst-content div.figure p:last-child.caption {
+  margin-bottom: 0;
+}
+.rst-content div.figure.align-center {
+  text-align: center;
+}
+.rst-content .section > a > img,
+.rst-content .section > img {
+  margin-bottom: 24px;
+}
+.rst-content abbr[title] {
+  text-decoration: none;
+}
+.rst-content.style-external-links a.reference.external:after {
+  font-family: FontAwesome;
+  content: "\f08e";
+  color: #b3b3b3;
+  vertical-align: super;
+  font-size: 60%;
+  margin: 0 0.2em;
+}
+.rst-content blockquote {
+  margin-left: 24px;
+  line-height: 24px;
+  margin-bottom: 24px;
+}
+.rst-content pre.literal-block {
+  white-space: pre;
+  margin: 0;
+  padding: 12px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  display: block;
+  overflow: auto;
+}
+.rst-content div[class^="highlight"],
+.rst-content pre.literal-block {
+  border: 1px solid #e1e4e5;
+  overflow-x: auto;
+  margin: 1px 0 24px;
+}
+.rst-content div[class^="highlight"] div[class^="highlight"],
+.rst-content pre.literal-block div[class^="highlight"] {
+  padding: 0;
+  border: none;
+  margin: 0;
+}
+.rst-content div[class^="highlight"] td.code {
+  width: 100%;
+}
+.rst-content .linenodiv pre {
+  border-right: 1px solid #e6e9ea;
+  margin: 0;
+  padding: 12px;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  user-select: none;
+  pointer-events: none;
+}
+.rst-content div[class^="highlight"] pre {
+  white-space: pre;
+  margin: 0;
+  padding: 12px;
+  display: block;
+  overflow: auto;
+}
+.rst-content div[class^="highlight"] pre .hll {
+  display: block;
+  margin: 0 -12px;
+  padding: 0 12px;
+}
+.rst-content .linenodiv pre,
+.rst-content div[class^="highlight"] pre,
+.rst-content pre.literal-block {
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  font-size: 12px;
+  line-height: 1.4;
+}
+.rst-content div.highlight .gp {
+  user-select: none;
+  pointer-events: none;
+}
+.rst-content .code-block-caption {
+  font-style: italic;
+  font-size: 100%;
+  line-height: 1;
+  padding: 1em 0;
+  text-align: center;
+}
+@media print {
+  .rst-content .codeblock,
+  .rst-content div[class^="highlight"],
+  .rst-content div[class^="highlight"] pre {
+    white-space: pre-wrap;
+  }
+}
+.rst-content .admonition,
+.rst-content .admonition-todo,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .danger,
+.rst-content .error,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .warning {
+  clear: both;
+}
+.rst-content .admonition-todo .last,
+.rst-content .admonition-todo > :last-child,
+.rst-content .admonition .last,
+.rst-content .admonition > :last-child,
+.rst-content .attention .last,
+.rst-content .attention > :last-child,
+.rst-content .caution .last,
+.rst-content .caution > :last-child,
+.rst-content .danger .last,
+.rst-content .danger > :last-child,
+.rst-content .error .last,
+.rst-content .error > :last-child,
+.rst-content .hint .last,
+.rst-content .hint > :last-child,
+.rst-content .important .last,
+.rst-content .important > :last-child,
+.rst-content .note .last,
+.rst-content .note > :last-child,
+.rst-content .seealso .last,
+.rst-content .seealso > :last-child,
+.rst-content .tip .last,
+.rst-content .tip > :last-child,
+.rst-content .warning .last,
+.rst-content .warning > :last-child {
+  margin-bottom: 0;
+}
+.rst-content .admonition-title:before {
+  margin-right: 4px;
+}
+.rst-content .admonition table {
+  border-color: rgba(0, 0, 0, 0.1);
+}
+.rst-content .admonition table td,
+.rst-content .admonition table th {
+  background: transparent !important;
+  border-color: rgba(0, 0, 0, 0.1) !important;
+}
+.rst-content .section ol.loweralpha,
+.rst-content .section ol.loweralpha > li {
+  list-style: lower-alpha;
+}
+.rst-content .section ol.upperalpha,
+.rst-content .section ol.upperalpha > li {
+  list-style: upper-alpha;
+}
+.rst-content .section ol li > *,
+.rst-content .section ul li > * {
+  margin-top: 12px;
+  margin-bottom: 12px;
+}
+.rst-content .section ol li > :first-child,
+.rst-content .section ul li > :first-child {
+  margin-top: 0;
+}
+.rst-content .section ol li > p,
+.rst-content .section ol li > p:last-child,
+.rst-content .section ul li > p,
+.rst-content .section ul li > p:last-child {
+  margin-bottom: 12px;
+}
+.rst-content .section ol li > p:only-child,
+.rst-content .section ol li > p:only-child:last-child,
+.rst-content .section ul li > p:only-child,
+.rst-content .section ul li > p:only-child:last-child {
+  margin-bottom: 0;
+}
+.rst-content .section ol li > ol,
+.rst-content .section ol li > ul,
+.rst-content .section ul li > ol,
+.rst-content .section ul li > ul {
+  margin-bottom: 12px;
+}
+.rst-content .section ol.simple li > *,
+.rst-content .section ol.simple li ol,
+.rst-content .section ol.simple li ul,
+.rst-content .section ul.simple li > *,
+.rst-content .section ul.simple li ol,
+.rst-content .section ul.simple li ul {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.rst-content .line-block {
+  margin-left: 0;
+  margin-bottom: 24px;
+  line-height: 24px;
+}
+.rst-content .line-block .line-block {
+  margin-left: 24px;
+  margin-bottom: 0;
+}
+.rst-content .topic-title {
+  font-weight: 700;
+  margin-bottom: 12px;
+}
+.rst-content .toc-backref {
+  color: #404040;
+}
+.rst-content .align-right {
+  float: right;
+  margin: 0 0 24px 24px;
+}
+.rst-content .align-left {
+  float: left;
+  margin: 0 24px 24px 0;
+}
+.rst-content .align-center {
+  margin: auto;
+}
+.rst-content .align-center:not(table) {
+  display: block;
+}
+.rst-content .code-block-caption .headerlink,
+.rst-content .toctree-wrapper > p.caption .headerlink,
+.rst-content dl dt .headerlink,
+.rst-content h1 .headerlink,
+.rst-content h2 .headerlink,
+.rst-content h3 .headerlink,
+.rst-content h4 .headerlink,
+.rst-content h5 .headerlink,
+.rst-content h6 .headerlink,
+.rst-content p.caption .headerlink,
+.rst-content table > caption .headerlink {
+  visibility: hidden;
+  font-size: 14px;
+}
+.rst-content .code-block-caption .headerlink:after,
+.rst-content .toctree-wrapper > p.caption .headerlink:after,
+.rst-content dl dt .headerlink:after,
+.rst-content h1 .headerlink:after,
+.rst-content h2 .headerlink:after,
+.rst-content h3 .headerlink:after,
+.rst-content h4 .headerlink:after,
+.rst-content h5 .headerlink:after,
+.rst-content h6 .headerlink:after,
+.rst-content p.caption .headerlink:after,
+.rst-content table > caption .headerlink:after {
+  content: "\f0c1";
+  font-family: FontAwesome;
+}
+.rst-content .code-block-caption:hover .headerlink:after,
+.rst-content .toctree-wrapper > p.caption:hover .headerlink:after,
+.rst-content dl dt:hover .headerlink:after,
+.rst-content h1:hover .headerlink:after,
+.rst-content h2:hover .headerlink:after,
+.rst-content h3:hover .headerlink:after,
+.rst-content h4:hover .headerlink:after,
+.rst-content h5:hover .headerlink:after,
+.rst-content h6:hover .headerlink:after,
+.rst-content p.caption:hover .headerlink:after,
+.rst-content table > caption:hover .headerlink:after {
+  visibility: visible;
+}
+.rst-content table > caption .headerlink:after {
+  font-size: 12px;
+}
+.rst-content .centered {
+  text-align: center;
+}
+.rst-content .sidebar {
+  float: right;
+  width: 40%;
+  display: block;
+  margin: 0 0 24px 24px;
+  padding: 24px;
+  background: #f3f6f6;
+  border: 1px solid #e1e4e5;
+}
+.rst-content .sidebar dl,
+.rst-content .sidebar p,
+.rst-content .sidebar ul {
+  font-size: 90%;
+}
+.rst-content .sidebar .last,
+.rst-content .sidebar > :last-child {
+  margin-bottom: 0;
+}
+.rst-content .sidebar .sidebar-title {
+  display: block;
+  font-family: Roboto Slab, ff-tisa-web-pro, Georgia, Arial, sans-serif;
+  font-weight: 700;
+  background: #e1e4e5;
+  padding: 6px 12px;
+  margin: -24px -24px 24px;
+  font-size: 100%;
+}
+.rst-content .highlighted {
+  background: #f1c40f;
+  box-shadow: 0 0 0 2px #f1c40f;
+  display: inline;
+  font-weight: 700;
+}
+.rst-content .citation-reference,
+.rst-content .footnote-reference {
+  vertical-align: baseline;
+  position: relative;
+  top: -0.4em;
+  line-height: 0;
+  font-size: 90%;
+}
+.rst-content .hlist {
+  width: 100%;
+}
+html.writer-html4 .rst-content table.docutils.citation,
+html.writer-html4 .rst-content table.docutils.footnote {
+  background: none;
+  border: none;
+}
+html.writer-html4 .rst-content table.docutils.citation td,
+html.writer-html4 .rst-content table.docutils.citation tr,
+html.writer-html4 .rst-content table.docutils.footnote td,
+html.writer-html4 .rst-content table.docutils.footnote tr {
+  border: none;
+  background-color: transparent !important;
+  white-space: normal;
+}
+html.writer-html4 .rst-content table.docutils.citation td.label,
+html.writer-html4 .rst-content table.docutils.footnote td.label {
+  padding-left: 0;
+  padding-right: 0;
+  vertical-align: top;
+}
+html.writer-html5 .rst-content dl dt span.classifier:before {
+  content: " : ";
+}
+html.writer-html5 .rst-content dl.field-list,
+html.writer-html5 .rst-content dl.footnote {
+  display: grid;
+  grid-template-columns: max-content auto;
+}
+html.writer-html5 .rst-content dl.field-list > dt,
+html.writer-html5 .rst-content dl.footnote > dt {
+  padding-left: 1rem;
+}
+html.writer-html5 .rst-content dl.field-list > dt:after,
+html.writer-html5 .rst-content dl.footnote > dt:after {
+  content: ":";
+}
+html.writer-html5 .rst-content dl.field-list > dd,
+html.writer-html5 .rst-content dl.field-list > dt,
+html.writer-html5 .rst-content dl.footnote > dd,
+html.writer-html5 .rst-content dl.footnote > dt {
+  margin-bottom: 0;
+}
+html.writer-html5 .rst-content dl.footnote {
+  font-size: 0.9rem;
+}
+html.writer-html5 .rst-content dl.footnote > dt {
+  margin: 0 0.5rem 0.5rem 0;
+  line-height: 1.2rem;
+  word-break: break-all;
+  font-weight: 400;
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets {
+  margin-right: 0.5rem;
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets:before {
+  content: "[";
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.brackets:after {
+  content: "]";
+}
+html.writer-html5 .rst-content dl.footnote > dt > span.fn-backref {
+  font-style: italic;
+}
+html.writer-html5 .rst-content dl.footnote > dd {
+  margin: 0 0 0.5rem;
+  line-height: 1.2rem;
+}
+html.writer-html5 .rst-content dl.footnote > dd p,
+html.writer-html5 .rst-content dl.option-list kbd {
+  font-size: 0.9rem;
+}
+.rst-content table.docutils.footnote,
+html.writer-html4 .rst-content table.docutils.citation,
+html.writer-html5 .rst-content dl.footnote {
+  color: grey;
+}
+.rst-content table.docutils.footnote code,
+.rst-content table.docutils.footnote tt,
+html.writer-html4 .rst-content table.docutils.citation code,
+html.writer-html4 .rst-content table.docutils.citation tt,
+html.writer-html5 .rst-content dl.footnote code,
+html.writer-html5 .rst-content dl.footnote tt {
+  color: #555;
+}
+.rst-content .wy-table-responsive.citation,
+.rst-content .wy-table-responsive.footnote {
+  margin-bottom: 0;
+}
+.rst-content .wy-table-responsive.citation + :not(.citation),
+.rst-content .wy-table-responsive.footnote + :not(.footnote) {
+  margin-top: 24px;
+}
+.rst-content .wy-table-responsive.citation:last-child,
+.rst-content .wy-table-responsive.footnote:last-child {
+  margin-bottom: 24px;
+}
+.rst-content table.docutils th {
+  border-color: #e1e4e5;
+}
+html.writer-html5 .rst-content table.docutils th {
+  border: 1px solid #e1e4e5;
+}
+html.writer-html5 .rst-content table.docutils td > p,
+html.writer-html5 .rst-content table.docutils th > p {
+  line-height: 1rem;
+  margin-bottom: 0;
+  font-size: 0.9rem;
+}
+.rst-content table.docutils td .last,
+.rst-content table.docutils td .last > :last-child {
+  margin-bottom: 0;
+}
+.rst-content table.field-list,
+.rst-content table.field-list td {
+  border: none;
+}
+.rst-content table.field-list td p {
+  font-size: inherit;
+  line-height: inherit;
+}
+.rst-content table.field-list td > strong {
+  display: inline-block;
+}
+.rst-content table.field-list .field-name {
+  padding-right: 10px;
+  text-align: left;
+  white-space: nowrap;
+}
+.rst-content table.field-list .field-body {
+  text-align: left;
+}
+.rst-content code,
+.rst-content tt {
+  color: #000;
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+  padding: 2px 5px;
+}
+.rst-content code big,
+.rst-content code em,
+.rst-content tt big,
+.rst-content tt em {
+  font-size: 100% !important;
+  line-height: normal;
+}
+.rst-content code.literal,
+.rst-content tt.literal {
+  color: #E60000;
+}
+.rst-content code.xref,
+.rst-content tt.xref,
+a .rst-content code,
+a .rst-content tt {
+  font-weight: 700;
+  color: #404040;
+}
+.rst-content kbd,
+.rst-content pre,
+.rst-content samp {
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono,
+    Courier New, Courier, monospace;
+}
+.rst-content a code,
+.rst-content a tt {
+  color: #558040;
+}
+.rst-content dl {
+  margin-bottom: 24px;
+}
+.rst-content dl dt {
+  font-weight: 700;
+  margin-bottom: 12px;
+}
+.rst-content dl ol,
+.rst-content dl p,
+.rst-content dl table,
+.rst-content dl ul {
+  margin-bottom: 12px;
+}
+.rst-content dl dd {
+  margin: 0 0 12px 24px;
+  line-height: 24px;
+}
+html.writer-html4 .rst-content dl:not(.docutils),
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) {
+  margin-bottom: 24px;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt {
+  display: table;
+  margin: 6px 0;
+  font-size: 90%;
+  line-height: normal;
+  background: ##F2F2F2;
+  color: #666666;
+  border-top: 3px solid #6ab0de;
+  padding: 6px;
+  position: relative;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt:before,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt:before {
+  color: #6ab0de;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt .headerlink,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt
+  .headerlink {
+  color: #404040;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  dl:not(.field-list)
+  > dt {
+  margin-bottom: 6px;
+  border: none;
+  border-left: 3px solid #ccc;
+  background: #f0f0f0;
+  color: #555;
+}
+html.writer-html4
+  .rst-content
+  dl:not(.docutils)
+  dl:not(.field-list)
+  > dt
+  .headerlink,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  dl:not(.field-list)
+  > dt
+  .headerlink {
+  color: #404040;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) > dt:first-child,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  > dt:first-child {
+  margin-top: 0;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code,
+html.writer-html4 .rst-content dl:not(.docutils) tt,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt {
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,
+html.writer-html4 .rst-content dl:not(.docutils) code.descname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descclassname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descclassname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descname {
+  background-color: transparent;
+  border: none;
+  padding: 0;
+  font-size: 100% !important;
+}
+html.writer-html4 .rst-content dl:not(.docutils) code.descname,
+html.writer-html4 .rst-content dl:not(.docutils) tt.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  code.descname,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  tt.descname {
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) .optional,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  .optional {
+  display: inline-block;
+  padding: 0 4px;
+  color: #000;
+  font-weight: 700;
+}
+html.writer-html4 .rst-content dl:not(.docutils) .property,
+html.writer-html5
+  .rst-content
+  dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)
+  .property {
+  display: inline-block;
+  padding-right: 8px;
+}
+.rst-content .viewcode-back,
+.rst-content .viewcode-link {
+  display: inline-block;
+  color: #27ae60;
+  font-size: 80%;
+  padding-left: 24px;
+}
+.rst-content .viewcode-back {
+  display: block;
+  float: right;
+}
+.rst-content p.rubric {
+  margin-bottom: 12px;
+  font-weight: 700;
+}
+.rst-content code.download,
+.rst-content tt.download {
+  background: inherit;
+  padding: inherit;
+  font-weight: 400;
+  font-family: inherit;
+  font-size: inherit;
+  color: inherit;
+  border: inherit;
+  white-space: inherit;
+}
+.rst-content code.download span:first-child,
+.rst-content tt.download span:first-child {
+  -webkit-font-smoothing: subpixel-antialiased;
+}
+.rst-content code.download span:first-child:before,
+.rst-content tt.download span:first-child:before {
+  margin-right: 4px;
+}
+.rst-content .guilabel {
+  border: 1px solid #7fbbe3;
+  background: #e7f2fa;
+  font-size: 80%;
+  font-weight: 700;
+  border-radius: 4px;
+  padding: 2.4px 6px;
+  margin: auto 2px;
+}
+.rst-content .versionmodified {
+  font-style: italic;
+}
+@media screen and (max-width: 480px) {
+  .rst-content .sidebar {
+    width: 100%;
+  }
+}
+span[id*="MathJax-Span"] {
+  color: #666666;
+}
+.math {
+  text-align: center;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942)
+      format("woff2"),
+    url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");
+  font-weight: 400;
+  font-style: normal;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2)
+      format("woff2"),
+    url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");
+  font-weight: 700;
+  font-style: normal;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d)
+      format("woff2"),
+    url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c)
+      format("woff");
+  font-weight: 700;
+  font-style: italic;
+  font-display: block;
+}
+@font-face {
+  font-family: Lato;
+  src: url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d)
+      format("woff2"),
+    url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892)
+      format("woff");
+  font-weight: 400;
+  font-style: italic;
+  font-display: block;
+}
+@font-face {
+  font-family: Roboto Slab;
+  font-style: normal;
+  font-weight: 400;
+  src: url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958)
+      format("woff2"),
+    url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c)
+      format("woff");
+  font-display: block;
+}
+@font-face {
+  font-family: Roboto Slab;
+  font-style: normal;
+  font-weight: 700;
+  src: url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe)
+      format("woff2"),
+    url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a)
+      format("woff");
+  font-display: block;
+}
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/doctools.js b/VimbaX/doc/VmbC_Function_Reference/_static/doctools.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1bfd708b7f424846261e634ec53b0be89a4f604
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/doctools.js
@@ -0,0 +1,358 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+if (!window.console || !console.firebug) {
+  var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
+    "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
+    "profile", "profileEnd"];
+  window.console = {};
+  for (var i = 0; i < names.length; ++i)
+    window.console[names[i]] = function() {};
+}
+ */
+
+/**
+ * small helper function to urldecode strings
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
+ */
+jQuery.urldecode = function(x) {
+  if (!x) {
+    return x
+  }
+  return decodeURIComponent(x.replace(/\+/g, ' '));
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+  if (typeof s === 'undefined')
+    s = document.location.search;
+  var parts = s.substr(s.indexOf('?') + 1).split('&');
+  var result = {};
+  for (var i = 0; i < parts.length; i++) {
+    var tmp = parts[i].split('=', 2);
+    var key = jQuery.urldecode(tmp[0]);
+    var value = jQuery.urldecode(tmp[1]);
+    if (key in result)
+      result[key].push(value);
+    else
+      result[key] = [value];
+  }
+  return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+  function highlight(node, addItems) {
+    if (node.nodeType === 3) {
+      var val = node.nodeValue;
+      var pos = val.toLowerCase().indexOf(text);
+      if (pos >= 0 &&
+          !jQuery(node.parentNode).hasClass(className) &&
+          !jQuery(node.parentNode).hasClass("nohighlight")) {
+        var span;
+        var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
+        if (isInSVG) {
+          span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+        } else {
+          span = document.createElement("span");
+          span.className = className;
+        }
+        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling));
+        node.nodeValue = val.substr(0, pos);
+        if (isInSVG) {
+          var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+          var bbox = node.parentElement.getBBox();
+          rect.x.baseVal.value = bbox.x;
+          rect.y.baseVal.value = bbox.y;
+          rect.width.baseVal.value = bbox.width;
+          rect.height.baseVal.value = bbox.height;
+          rect.setAttribute('class', className);
+          addItems.push({
+              "parent": node.parentNode,
+              "target": rect});
+        }
+      }
+    }
+    else if (!jQuery(node).is("button, select, textarea")) {
+      jQuery.each(node.childNodes, function() {
+        highlight(this, addItems);
+      });
+    }
+  }
+  var addItems = [];
+  var result = this.each(function() {
+    highlight(this, addItems);
+  });
+  for (var i = 0; i < addItems.length; ++i) {
+    jQuery(addItems[i].parent).before(addItems[i].target);
+  }
+  return result;
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+  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"
+    };
+  };
+  jQuery.browser = {};
+  jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+  init : function() {
+    this.fixFirefoxAnchorBug();
+    this.highlightSearchWords();
+    this.initIndexTable();
+    this.initOnKeyListeners();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS : {},
+  PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
+  LOCALE : 'unknown',
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext : function(string) {
+    var translated = Documentation.TRANSLATIONS[string];
+    if (typeof translated === 'undefined')
+      return string;
+    return (typeof translated === 'string') ? translated : translated[0];
+  },
+
+  ngettext : function(singular, plural, n) {
+    var translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated === 'undefined')
+      return (n == 1) ? singular : plural;
+    return translated[Documentation.PLURALEXPR(n)];
+  },
+
+  addTranslations : function(catalog) {
+    for (var key in catalog.messages)
+      this.TRANSLATIONS[key] = catalog.messages[key];
+    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+    this.LOCALE = catalog.locale;
+  },
+
+  /**
+   * add context elements like header anchor links
+   */
+  addContextElements : function() {
+    $('div[id] > :header:first').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this headline')).
+      appendTo(this);
+    });
+    $('dt[id]').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this definition')).
+      appendTo(this);
+    });
+  },
+
+  /**
+   * workaround a firefox stupidity
+   * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
+   */
+  fixFirefoxAnchorBug : function() {
+    if (document.location.hash && $.browser.mozilla)
+      window.setTimeout(function() {
+        document.location.href += '';
+      }, 10);
+  },
+
+  /**
+   * highlight the search words provided in the url in the text
+   */
+  highlightSearchWords : function() {
+    var params = $.getQueryParameters();
+    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+    if (terms.length) {
+      var body = $('div.body');
+      if (!body.length) {
+        body = $('body');
+      }
+      window.setTimeout(function() {
+        $.each(terms, function() {
+          body.highlightText(this.toLowerCase(), 'highlighted');
+        });
+      }, 10);
+      $('<p class="highlight-link"><a href="javascript:Documentation.' +
+        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
+          .appendTo($('#searchbox'));
+    }
+  },
+
+  /**
+   * init the domain index toggle buttons
+   */
+  initIndexTable : function() {
+    var togglers = $('img.toggler').click(function() {
+      var src = $(this).attr('src');
+      var idnum = $(this).attr('id').substr(7);
+      $('tr.cg-' + idnum).toggle();
+      if (src.substr(-9) === 'minus.png')
+        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
+      else
+        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
+    }).css('display', '');
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
+        togglers.click();
+    }
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords : function() {
+    $('#searchbox .highlight-link').fadeOut(300);
+    $('span.highlighted').removeClass('highlighted');
+    var url = new URL(window.location);
+    url.searchParams.delete('highlight');
+    window.history.replaceState({}, '', url);
+  },
+
+   /**
+   * helper function to focus on search bar
+   */
+  focusSearchBar : function() {
+    $('input[name=q]').first().focus();
+  },
+
+  /**
+   * make the url absolute
+   */
+  makeURL : function(relativeURL) {
+    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
+  },
+
+  /**
+   * get the current relative url
+   */
+  getCurrentURL : function() {
+    var path = document.location.pathname;
+    var parts = path.split(/\//);
+    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
+      if (this === '..')
+        parts.pop();
+    });
+    var url = parts.join('/');
+    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+  },
+
+  initOnKeyListeners: function() {
+    // only install a listener if it is really needed
+    if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
+        !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+        return;
+
+    $(document).keydown(function(event) {
+      var activeElementType = document.activeElement.tagName;
+      // don't navigate when in search box, textarea, dropdown or button
+      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
+          && activeElementType !== 'BUTTON') {
+        if (event.altKey || event.ctrlKey || event.metaKey)
+          return;
+
+          if (!event.shiftKey) {
+            switch (event.key) {
+              case 'ArrowLeft':
+                if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
+                  break;
+                var prevHref = $('link[rel="prev"]').prop('href');
+                if (prevHref) {
+                  window.location.href = prevHref;
+                  return false;
+                }
+                break;
+              case 'ArrowRight':
+                if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS)
+                  break;
+                var nextHref = $('link[rel="next"]').prop('href');
+                if (nextHref) {
+                  window.location.href = nextHref;
+                  return false;
+                }
+                break;
+              case 'Escape':
+                if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+                  break;
+                Documentation.hideSearchWords();
+                return false;
+          }
+        }
+
+        // some keyboard layouts may need Shift to get /
+        switch (event.key) {
+          case '/':
+            if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS)
+              break;
+            Documentation.focusSearchBar();
+            return false;
+        }
+      }
+    });
+  }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+  Documentation.init();
+});
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/documentation_options.js b/VimbaX/doc/VmbC_Function_Reference/_static/documentation_options.js
new file mode 100644
index 0000000000000000000000000000000000000000..57fb7a05cc64b583837d678ae9c087b47eafc3f3
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/documentation_options.js
@@ -0,0 +1,14 @@
+var DOCUMENTATION_OPTIONS = {
+    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
+    VERSION: '1.0.2',
+    LANGUAGE: 'None',
+    COLLAPSE_INDEX: false,
+    BUILDER: 'html',
+    FILE_SUFFIX: '.html',
+    LINK_SUFFIX: '.html',
+    HAS_SOURCE: false,
+    SOURCELINK_SUFFIX: '.txt',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/file.png b/VimbaX/doc/VmbC_Function_Reference/_static/file.png
new file mode 100644
index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/file.png differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/jquery-3.5.1.js b/VimbaX/doc/VmbC_Function_Reference/_static/jquery-3.5.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..50937333b99a5e168ac9e8292b22edd7e96c3e6a
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/jquery-3.5.1.js
@@ -0,0 +1,10872 @@
+/*!
+ * jQuery JavaScript Library v3.5.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2020-05-04T22:49Z
+ */
+( function( global, factory ) {
+
+	"use strict";
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var flat = arr.flat ? function( array ) {
+	return arr.flat.call( array );
+} : function( array ) {
+	return arr.concat.apply( [], array );
+};
+
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+      // Support: Chrome <=57, Firefox <=52
+      // In some browsers, typeof returns "function" for HTML <object> elements
+      // (i.e., `typeof document.createElement( "object" ) === "function"`).
+      // We don't want to classify *any* DOM node as a function.
+      return typeof obj === "function" && typeof obj.nodeType !== "number";
+  };
+
+
+var isWindow = function isWindow( obj ) {
+		return obj != null && obj === obj.window;
+	};
+
+
+var document = window.document;
+
+
+
+	var preservedScriptAttributes = {
+		type: true,
+		src: true,
+		nonce: true,
+		noModule: true
+	};
+
+	function DOMEval( code, node, doc ) {
+		doc = doc || document;
+
+		var i, val,
+			script = doc.createElement( "script" );
+
+		script.text = code;
+		if ( node ) {
+			for ( i in preservedScriptAttributes ) {
+
+				// Support: Firefox 64+, Edge 18+
+				// Some browsers don't support the "nonce" property on scripts.
+				// On the other hand, just using `getAttribute` is not enough as
+				// the `nonce` attribute is reset to an empty string whenever it
+				// becomes browsing-context connected.
+				// See https://github.com/whatwg/html/issues/2369
+				// See https://html.spec.whatwg.org/#nonce-attributes
+				// The `node.getAttribute` check was added for the sake of
+				// `jQuery.globalEval` so that it can fake a nonce-containing node
+				// via an object.
+				val = node[ i ] || node.getAttribute && node.getAttribute( i );
+				if ( val ) {
+					script.setAttribute( i, val );
+				}
+			}
+		}
+		doc.head.appendChild( script ).parentNode.removeChild( script );
+	}
+
+
+function toType( obj ) {
+	if ( obj == null ) {
+		return obj + "";
+	}
+
+	// Support: Android <=2.3 only (functionish RegExp)
+	return typeof obj === "object" || typeof obj === "function" ?
+		class2type[ toString.call( obj ) ] || "object" :
+		typeof obj;
+}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+	version = "3.5.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+
+		// Return all the elements in a clean array
+		if ( num == null ) {
+			return slice.call( this );
+		}
+
+		// Return just the one element from the set
+		return num < 0 ? this[ num + this.length ] : this[ num ];
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	even: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return ( i + 1 ) % 2;
+		} ) );
+	},
+
+	odd: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return i % 2;
+		} ) );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				copy = options[ name ];
+
+				// Prevent Object.prototype pollution
+				// Prevent never-ending loop
+				if ( name === "__proto__" || target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = Array.isArray( copy ) ) ) ) {
+					src = target[ name ];
+
+					// Ensure proper type for the source value
+					if ( copyIsArray && !Array.isArray( src ) ) {
+						clone = [];
+					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
+						clone = {};
+					} else {
+						clone = src;
+					}
+					copyIsArray = false;
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isPlainObject: function( obj ) {
+		var proto, Ctor;
+
+		// Detect obvious negatives
+		// Use toString instead of jQuery.type to catch host objects
+		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+			return false;
+		}
+
+		proto = getProto( obj );
+
+		// Objects with no prototype (e.g., `Object.create( null )`) are plain
+		if ( !proto ) {
+			return true;
+		}
+
+		// Objects with prototype are plain iff they were constructed by a global Object function
+		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	// Evaluates a script in a provided context; falls back to the global one
+	// if not specified.
+	globalEval: function( code, options, doc ) {
+		DOMEval( code, { nonce: options && options.nonce }, doc );
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	// Support: Android <=4.0 only, PhantomJS 1 only
+	// push.apply(_, arraylike) throws on ancient WebKit
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return flat( ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( _i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: real iOS 8.2 only (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = toType( obj );
+
+	if ( isFunction( obj ) || isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.5
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://js.foundation/
+ *
+ * Date: 2020-03-14
+ */
+( function( window ) {
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	nonnativeSelectorCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// Instance methods
+	hasOwn = ( {} ).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	pushNative = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+
+	// Use a stripped-down indexOf as it's faster than native
+	// https://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[ i ] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
+		"ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
+	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
+		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+
+		// "Attribute values must be CSS identifiers [capture 5]
+		// or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
+		whitespace + "*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
+		whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
+		"*" ),
+	rdescend = new RegExp( whitespace + "|>" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
+			whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
+			whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace +
+			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rhtml = /HTML$/i,
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+
+	// CSS escapes
+	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
+	funescape = function( escape, nonHex ) {
+		var high = "0x" + escape.slice( 1 ) - 0x10000;
+
+		return nonHex ?
+
+			// Strip the backslash prefix from a non-hex escape sequence
+			nonHex :
+
+			// Replace a hexadecimal escape sequence with the encoded Unicode code point
+			// Support: IE <=11+
+			// For values outside the Basic Multilingual Plane (BMP), manually construct a
+			// surrogate pair
+			high < 0 ?
+				String.fromCharCode( high + 0x10000 ) :
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// CSS string/identifier serialization
+	// https://drafts.csswg.org/cssom/#common-serializing-idioms
+	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+	fcssescape = function( ch, asCodePoint ) {
+		if ( asCodePoint ) {
+
+			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+			if ( ch === "\0" ) {
+				return "\uFFFD";
+			}
+
+			// Control characters and (dependent upon position) numbers get escaped as code points
+			return ch.slice( 0, -1 ) + "\\" +
+				ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+		}
+
+		// Other potentially-special ASCII characters get backslash-escaped
+		return "\\" + ch;
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	},
+
+	inDisabledFieldset = addCombinator(
+		function( elem ) {
+			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
+		},
+		{ dir: "parentNode", next: "legend" }
+	);
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		( arr = slice.call( preferredDoc.childNodes ) ),
+		preferredDoc.childNodes
+	);
+
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	// eslint-disable-next-line no-unused-expressions
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			pushNative.apply( target, slice.call( els ) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+
+			// Can't trust NodeList.length
+			while ( ( target[ j++ ] = els[ i++ ] ) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+		setDocument( context );
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
+
+				// ID selector
+				if ( ( m = match[ 1 ] ) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( ( elem = context.getElementById( m ) ) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[ 2 ] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!nonnativeSelectorCache[ selector + " " ] &&
+				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
+
+				// Support: IE 8 only
+				// Exclude object elements
+				( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
+
+				newSelector = selector;
+				newContext = context;
+
+				// qSA considers elements outside a scoping root when evaluating child or
+				// descendant combinators, which is not what we want.
+				// In such cases, we work around the behavior by prefixing every selector in the
+				// list with an ID selector referencing the scope context.
+				// The technique has to be used as well when a leading combinator is used
+				// as such selectors are not recognized by querySelectorAll.
+				// Thanks to Andrew Dupont for this technique.
+				if ( nodeType === 1 &&
+					( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+
+					// We can use :scope instead of the ID hack if the browser
+					// supports it & if we're not changing the context.
+					if ( newContext !== context || !support.scope ) {
+
+						// Capture the context ID, setting it first if necessary
+						if ( ( nid = context.getAttribute( "id" ) ) ) {
+							nid = nid.replace( rcssescape, fcssescape );
+						} else {
+							context.setAttribute( "id", ( nid = expando ) );
+						}
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					while ( i-- ) {
+						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
+							toSelector( groups[ i ] );
+					}
+					newSelector = groups.join( "," );
+				}
+
+				try {
+					push.apply( results,
+						newContext.querySelectorAll( newSelector )
+					);
+					return results;
+				} catch ( qsaError ) {
+					nonnativeSelectorCache( selector, true );
+				} finally {
+					if ( nid === expando ) {
+						context.removeAttribute( "id" );
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return ( cache[ key + " " ] = value );
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+	var el = document.createElement( "fieldset" );
+
+	try {
+		return !!fn( el );
+	} catch ( e ) {
+		return false;
+	} finally {
+
+		// Remove from its parent by default
+		if ( el.parentNode ) {
+			el.parentNode.removeChild( el );
+		}
+
+		// release memory in IE
+		el = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split( "|" ),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[ i ] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			a.sourceIndex - b.sourceIndex;
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( ( cur = cur.nextSibling ) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return ( name === "input" || name === "button" ) && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+	return function( elem ) {
+
+		// Only certain elements can match :enabled or :disabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+		if ( "form" in elem ) {
+
+			// Check for inherited disabledness on relevant non-disabled elements:
+			// * listed form-associated elements in a disabled fieldset
+			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+			// * option elements in a disabled optgroup
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+			// All such elements have a "form" property.
+			if ( elem.parentNode && elem.disabled === false ) {
+
+				// Option elements defer to a parent optgroup if present
+				if ( "label" in elem ) {
+					if ( "label" in elem.parentNode ) {
+						return elem.parentNode.disabled === disabled;
+					} else {
+						return elem.disabled === disabled;
+					}
+				}
+
+				// Support: IE 6 - 11
+				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
+				return elem.isDisabled === disabled ||
+
+					// Where there is no isDisabled, check manually
+					/* jshint -W018 */
+					elem.isDisabled !== !disabled &&
+					inDisabledFieldset( elem ) === disabled;
+			}
+
+			return elem.disabled === disabled;
+
+		// Try to winnow out elements that can't be disabled before trusting the disabled property.
+		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+		// even exist on them, let alone have a boolean value.
+		} else if ( "label" in elem ) {
+			return elem.disabled === disabled;
+		}
+
+		// Remaining elements are neither :enabled nor :disabled
+		return false;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction( function( argument ) {
+		argument = +argument;
+		return markFunction( function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
+					seed[ j ] = !( matches[ j ] = seed[ j ] );
+				}
+			}
+		} );
+	} );
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	var namespace = elem.namespaceURI,
+		docElem = ( elem.ownerDocument || elem ).documentElement;
+
+	// Support: IE <=8
+	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
+	// https://bugs.jquery.com/ticket/4833
+	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, subWindow,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9 - 11+, Edge 12 - 18+
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( preferredDoc != document &&
+		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
+
+		// Support: IE 11, Edge
+		if ( subWindow.addEventListener ) {
+			subWindow.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( subWindow.attachEvent ) {
+			subWindow.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
+	// Safari 4 - 5 only, Opera <=11.6 - 12.x only
+	// IE/Edge & older browsers don't support the :scope pseudo-class.
+	// Support: Safari 6.0 only
+	// Safari 6.0 supports :scope but it's an alias of :root there.
+	support.scope = assert( function( el ) {
+		docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
+		return typeof el.querySelectorAll !== "undefined" &&
+			!el.querySelectorAll( ":scope fieldset div" ).length;
+	} );
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert( function( el ) {
+		el.className = "i";
+		return !el.getAttribute( "className" );
+	} );
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert( function( el ) {
+		el.appendChild( document.createComment( "" ) );
+		return !el.getElementsByTagName( "*" ).length;
+	} );
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programmatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert( function( el ) {
+		docElem.appendChild( el ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	} );
+
+	// ID filter and find
+	if ( support.getById ) {
+		Expr.filter[ "ID" ] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute( "id" ) === attrId;
+			};
+		};
+		Expr.find[ "ID" ] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var elem = context.getElementById( id );
+				return elem ? [ elem ] : [];
+			}
+		};
+	} else {
+		Expr.filter[ "ID" ] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode( "id" );
+				return node && node.value === attrId;
+			};
+		};
+
+		// Support: IE 6 - 7 only
+		// getElementById is not reliable as a find shortcut
+		Expr.find[ "ID" ] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var node, i, elems,
+					elem = context.getElementById( id );
+
+				if ( elem ) {
+
+					// Verify the id attribute
+					node = elem.getAttributeNode( "id" );
+					if ( node && node.value === id ) {
+						return [ elem ];
+					}
+
+					// Fall back on getElementsByName
+					elems = context.getElementsByName( id );
+					i = 0;
+					while ( ( elem = elems[ i++ ] ) ) {
+						node = elem.getAttributeNode( "id" );
+						if ( node && node.value === id ) {
+							return [ elem ];
+						}
+					}
+				}
+
+				return [];
+			}
+		};
+	}
+
+	// Tag
+	Expr.find[ "TAG" ] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( ( elem = results[ i++ ] ) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See https://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
+
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert( function( el ) {
+
+			var input;
+
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// https://bugs.jquery.com/ticket/12359
+			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !el.querySelectorAll( "[selected]" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push( "~=" );
+			}
+
+			// Support: IE 11+, Edge 15 - 18+
+			// IE 11/Edge don't find elements on a `[name='']` query in some cases.
+			// Adding a temporary attribute to the document before the selection works
+			// around the issue.
+			// Interestingly, IE 10 & older don't seem to have the issue.
+			input = document.createElement( "input" );
+			input.setAttribute( "name", "" );
+			el.appendChild( input );
+			if ( !el.querySelectorAll( "[name='']" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
+					whitespace + "*(?:''|\"\")" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !el.querySelectorAll( ":checked" ).length ) {
+				rbuggyQSA.push( ":checked" );
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibling-combinator selector` fails
+			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push( ".#.+[+~]" );
+			}
+
+			// Support: Firefox <=3.6 - 5 only
+			// Old Firefox doesn't throw on a badly-escaped identifier.
+			el.querySelectorAll( "\\\f" );
+			rbuggyQSA.push( "[\\r\\n\\f]" );
+		} );
+
+		assert( function( el ) {
+			el.innerHTML = "<a href='' disabled='disabled'></a>" +
+				"<select disabled='disabled'><option/></select>";
+
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement( "input" );
+			input.setAttribute( "type", "hidden" );
+			el.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( el.querySelectorAll( "[name=d]" ).length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: IE9-11+
+			// IE's :disabled selector does not pick up the children of disabled fieldsets
+			docElem.appendChild( el ).disabled = true;
+			if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: Opera 10 - 11 only
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			el.querySelectorAll( "*,:x" );
+			rbuggyQSA.push( ",.*:" );
+		} );
+	}
+
+	if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector ) ) ) ) {
+
+		assert( function( el ) {
+
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( el, "*" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( el, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		} );
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			) );
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( ( b = b.parentNode ) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		// Support: IE 11+, Edge 17 - 18+
+		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+		// two documents; shallow comparisons work.
+		// eslint-disable-next-line eqeqeq
+		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
+
+			// Choose the first element that is related to our preferred document
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( a == document || a.ownerDocument == preferredDoc &&
+				contains( preferredDoc, a ) ) {
+				return -1;
+			}
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( b == document || b.ownerDocument == preferredDoc &&
+				contains( preferredDoc, b ) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			return a == document ? -1 :
+				b == document ? 1 :
+				/* eslint-enable eqeqeq */
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( ( cur = cur.parentNode ) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( ( cur = cur.parentNode ) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[ i ] === bp[ i ] ) {
+			i++;
+		}
+
+		return i ?
+
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[ i ], bp[ i ] ) :
+
+			// Otherwise nodes in our document sort first
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			ap[ i ] == preferredDoc ? -1 :
+			bp[ i ] == preferredDoc ? 1 :
+			/* eslint-enable eqeqeq */
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	setDocument( elem );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!nonnativeSelectorCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+
+				// As well, disconnected nodes are said to be in a document
+				// fragment in IE 9
+				elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch ( e ) {
+			nonnativeSelectorCache( expr, true );
+		}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+
+	// Set document vars if needed
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( context.ownerDocument || context ) != document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+
+	// Set document vars if needed
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( elem.ownerDocument || elem ) != document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			( val = elem.getAttributeNode( name ) ) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.escape = function( sel ) {
+	return ( sel + "" ).replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( ( elem = results[ i++ ] ) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+
+		// If no nodeType, this is expected to be an array
+		while ( ( node = elem[ i++ ] ) ) {
+
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
+				match[ 5 ] || "" ).replace( runescape, funescape );
+
+			if ( match[ 2 ] === "~=" ) {
+				match[ 3 ] = " " + match[ 3 ] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[ 1 ] = match[ 1 ].toLowerCase();
+
+			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
+
+				// nth-* requires argument
+				if ( !match[ 3 ] ) {
+					Sizzle.error( match[ 0 ] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[ 4 ] = +( match[ 4 ] ?
+					match[ 5 ] + ( match[ 6 ] || 1 ) :
+					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
+				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
+
+				// other types prohibit arguments
+			} else if ( match[ 3 ] ) {
+				Sizzle.error( match[ 0 ] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[ 6 ] && match[ 2 ];
+
+			if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[ 3 ] ) {
+				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+
+				// Get excess from tokenize (recursively)
+				( excess = tokenize( unquoted, true ) ) &&
+
+				// advance to the next closing parenthesis
+				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
+
+				// excess is a negative index
+				match[ 0 ] = match[ 0 ].slice( 0, excess );
+				match[ 2 ] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() {
+					return true;
+				} :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				( pattern = new RegExp( "(^|" + whitespace +
+					")" + className + "(" + whitespace + "|$)" ) ) && classCache(
+						className, function( elem ) {
+							return pattern.test(
+								typeof elem.className === "string" && elem.className ||
+								typeof elem.getAttribute !== "undefined" &&
+									elem.getAttribute( "class" ) ||
+								""
+							);
+				} );
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				/* eslint-disable max-len */
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+				/* eslint-enable max-len */
+
+			};
+		},
+
+		"CHILD": function( type, what, _argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, _context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( ( node = node[ dir ] ) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								( outerCache[ node.uniqueID ] = {} );
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( ( node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+
+							// Use previously-cached element index if available
+							if ( useCache ) {
+
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									( outerCache[ node.uniqueID ] = {} );
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+
+								// Use the same loop as above to seek `elem` from the start
+								while ( ( node = ++nodeIndex && node && node[ dir ] ||
+									( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] ||
+												( node[ expando ] = {} );
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												( outerCache[ node.uniqueID ] = {} );
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction( function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[ i ] );
+							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
+						}
+					} ) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+
+		// Potentially complex pseudos
+		"not": markFunction( function( selector ) {
+
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction( function( seed, matches, _context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( ( elem = unmatched[ i ] ) ) {
+							seed[ i ] = !( matches[ i ] = elem );
+						}
+					}
+				} ) :
+				function( elem, _context, xml ) {
+					input[ 0 ] = elem;
+					matcher( input, null, xml, results );
+
+					// Don't keep the element (issue #299)
+					input[ 0 ] = null;
+					return !results.pop();
+				};
+		} ),
+
+		"has": markFunction( function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		} ),
+
+		"contains": markFunction( function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
+			};
+		} ),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+
+			// lang value must be a valid identifier
+			if ( !ridentifier.test( lang || "" ) ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( ( elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
+				return false;
+			};
+		} ),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement &&
+				( !document.hasFocus || document.hasFocus() ) &&
+				!!( elem.type || elem.href || ~elem.tabIndex );
+		},
+
+		// Boolean properties
+		"enabled": createDisabledPseudo( false ),
+		"disabled": createDisabledPseudo( true ),
+
+		"checked": function( elem ) {
+
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return ( nodeName === "input" && !!elem.checked ) ||
+				( nodeName === "option" && !!elem.selected );
+		},
+
+		"selected": function( elem ) {
+
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				// eslint-disable-next-line no-unused-expressions
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos[ "empty" ]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( ( attr = elem.getAttribute( "type" ) ) == null ||
+					attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo( function() {
+			return [ 0 ];
+		} ),
+
+		"last": createPositionalPseudo( function( _matchIndexes, length ) {
+			return [ length - 1 ];
+		} ),
+
+		"eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		} ),
+
+		"even": createPositionalPseudo( function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"odd": createPositionalPseudo( function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+			var i = argument < 0 ?
+				argument + length :
+				argument > length ?
+					length :
+					argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} ),
+
+		"gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		} )
+	}
+};
+
+Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
+			if ( match ) {
+
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[ 0 ].length ) || soFar;
+			}
+			groups.push( ( tokens = [] ) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( ( match = rcombinators.exec( soFar ) ) ) {
+			matched = match.shift();
+			tokens.push( {
+				value: matched,
+
+				// Cast descendant combinators to space
+				type: match[ 0 ].replace( rtrim, " " )
+			} );
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
+				( match = preFilters[ type ]( match ) ) ) ) {
+				matched = match.shift();
+				tokens.push( {
+					value: matched,
+					type: type,
+					matches: match
+				} );
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[ i ].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		skip = combinator.next,
+		key = skip || dir,
+		checkNonElements = base && key === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( ( elem = elem[ dir ] ) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+			return false;
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( ( elem = elem[ dir ] ) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( ( elem = elem[ dir ] ) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] ||
+							( outerCache[ elem.uniqueID ] = {} );
+
+						if ( skip && skip === elem.nodeName.toLowerCase() ) {
+							elem = elem[ dir ] || elem;
+						} else if ( ( oldCache = uniqueCache[ key ] ) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return ( newCache[ 2 ] = oldCache[ 2 ] );
+						} else {
+
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ key ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+			return false;
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[ i ]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[ 0 ];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[ i ], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( ( elem = unmatched[ i ] ) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction( function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts(
+				selector || "*",
+				context.nodeType ? [ context ] : context,
+				[]
+			),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( ( elem = temp[ i ] ) ) {
+					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( ( elem = matcherOut[ i ] ) ) {
+
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( ( matcherIn[ i ] = elem ) );
+						}
+					}
+					postFinder( null, ( matcherOut = [] ), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( ( elem = matcherOut[ i ] ) &&
+						( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
+
+						seed[ temp ] = !( results[ temp ] = elem );
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	} );
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
+		implicitRelative = leadingRelative || Expr.relative[ " " ],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				( checkContext = context ).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
+			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
+		} else {
+			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[ j ].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+
+					// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+					tokens
+						.slice( 0, i - 1 )
+						.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
+
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
+				len = elems.length;
+
+			if ( outermost ) {
+
+				// Support: IE 11+, Edge 17 - 18+
+				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+				// two documents; shallow comparisons work.
+				// eslint-disable-next-line eqeqeq
+				outermostContext = context == document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+
+					// Support: IE 11+, Edge 17 - 18+
+					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+					// two documents; shallow comparisons work.
+					// eslint-disable-next-line eqeqeq
+					if ( !context && elem.ownerDocument != document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( ( matcher = elementMatchers[ j++ ] ) ) {
+						if ( matcher( elem, context || document, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+
+					// They will have gone through all possible matchers
+					if ( ( elem = !matcher && elem ) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( ( matcher = setMatchers[ j++ ] ) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
+								setMatched[ i ] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[ i ] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache(
+			selector,
+			matcherFromGroupMatchers( elementMatchers, setMatchers )
+		);
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
+		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
+			context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
+
+			context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
+				.replace( runescape, funescape ), context ) || [] )[ 0 ];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[ i ];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ ( type = token.type ) ] ) {
+				break;
+			}
+			if ( ( find = Expr.find[ type ] ) ) {
+
+				// Search, expanding context for leading sibling combinators
+				if ( ( seed = find(
+					token.matches[ 0 ].replace( runescape, funescape ),
+					rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
+						context
+				) ) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert( function( el ) {
+
+	// Should return 1, but returns 4 (following)
+	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
+} );
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert( function( el ) {
+	el.innerHTML = "<a href='#'></a>";
+	return el.firstChild.getAttribute( "href" ) === "#";
+} ) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	} );
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert( function( el ) {
+	el.innerHTML = "<input/>";
+	el.firstChild.setAttribute( "value", "" );
+	return el.firstChild.getAttribute( "value" ) === "";
+} ) ) {
+	addHandle( "value", function( elem, _name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	} );
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert( function( el ) {
+	return el.getAttribute( "disabled" ) == null;
+} ) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+				( val = elem.getAttributeNode( name ) ) && val.specified ?
+					val.value :
+					null;
+		}
+	} );
+}
+
+return Sizzle;
+
+} )( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+	}
+
+	// Single element
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+	}
+
+	// Arraylike of elements (jQuery, arguments, Array)
+	if ( typeof qualifier !== "string" ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+		} );
+	}
+
+	// Filtered directly for both simple and complex selectors
+	return jQuery.filter( qualifier, elements, not );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	if ( elems.length === 1 && elem.nodeType === 1 ) {
+		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+	}
+
+	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+		return elem.nodeType === 1;
+	} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i, ret,
+			len = this.length,
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		ret = this.pushStack( [] );
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	// Shortcut simple #id case for speed
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Method init() accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[ 0 ] === "<" &&
+				selector[ selector.length - 1 ] === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					if ( elem ) {
+
+						// Inject the element directly into the jQuery object
+						this[ 0 ] = elem;
+						this.length = 1;
+					}
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( isFunction( selector ) ) {
+			return root.ready !== undefined ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter( function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			targets = typeof selectors !== "string" && jQuery( selectors );
+
+		// Positional selectors never match, since there's no _selection_ context
+		if ( !rneedsContext.test( selectors ) ) {
+			for ( ; i < l; i++ ) {
+				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+					// Always skip document fragments
+					if ( cur.nodeType < 11 && ( targets ?
+						targets.index( cur ) > -1 :
+
+						// Don't pass non-elements to Sizzle
+						cur.nodeType === 1 &&
+							jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+						matched.push( cur );
+						break;
+					}
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, _i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, _i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, _i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+		if ( elem.contentDocument != null &&
+
+			// Support: IE 11+
+			// <object> elements with no `data` attribute has an object
+			// `contentDocument` with a `null` prototype.
+			getProto( elem.contentDocument ) ) {
+
+			return elem.contentDocument;
+		}
+
+		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+		// Treat the template element as a regular one in browsers that
+		// don't support it.
+		if ( nodeName( elem, "template" ) ) {
+			elem = elem.content || elem;
+		}
+
+		return jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.uniqueSort( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = locked || options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = queue = [];
+				if ( !memory && !firing ) {
+					list = memory = "";
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+function Identity( v ) {
+	return v;
+}
+function Thrower( ex ) {
+	throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+	var method;
+
+	try {
+
+		// Check for promise aspect first to privilege synchronous behavior
+		if ( value && isFunction( ( method = value.promise ) ) ) {
+			method.call( value ).done( resolve ).fail( reject );
+
+		// Other thenables
+		} else if ( value && isFunction( ( method = value.then ) ) ) {
+			method.call( value, resolve, reject );
+
+		// Other non-thenables
+		} else {
+
+			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+			// * false: [ value ].slice( 0 ) => resolve( value )
+			// * true: [ value ].slice( 1 ) => resolve()
+			resolve.apply( undefined, [ value ].slice( noValue ) );
+		}
+
+	// For Promises/A+, convert exceptions into rejections
+	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+	// Deferred#then to conditionally suppress rejection.
+	} catch ( value ) {
+
+		// Support: Android 4.0 only
+		// Strict mode functions invoked without .call/.apply get global-object context
+		reject.apply( undefined, [ value ] );
+	}
+}
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, callbacks,
+				// ... .then handlers, argument index, [final state]
+				[ "notify", "progress", jQuery.Callbacks( "memory" ),
+					jQuery.Callbacks( "memory" ), 2 ],
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				"catch": function( fn ) {
+					return promise.then( null, fn );
+				},
+
+				// Keep pipe for back-compat
+				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( _i, tuple ) {
+
+							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
+							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+							// deferred.progress(function() { bind to newDefer or newDefer.notify })
+							// deferred.done(function() { bind to newDefer or newDefer.resolve })
+							// deferred.fail(function() { bind to newDefer or newDefer.reject })
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+				then: function( onFulfilled, onRejected, onProgress ) {
+					var maxDepth = 0;
+					function resolve( depth, deferred, handler, special ) {
+						return function() {
+							var that = this,
+								args = arguments,
+								mightThrow = function() {
+									var returned, then;
+
+									// Support: Promises/A+ section 2.3.3.3.3
+									// https://promisesaplus.com/#point-59
+									// Ignore double-resolution attempts
+									if ( depth < maxDepth ) {
+										return;
+									}
+
+									returned = handler.apply( that, args );
+
+									// Support: Promises/A+ section 2.3.1
+									// https://promisesaplus.com/#point-48
+									if ( returned === deferred.promise() ) {
+										throw new TypeError( "Thenable self-resolution" );
+									}
+
+									// Support: Promises/A+ sections 2.3.3.1, 3.5
+									// https://promisesaplus.com/#point-54
+									// https://promisesaplus.com/#point-75
+									// Retrieve `then` only once
+									then = returned &&
+
+										// Support: Promises/A+ section 2.3.4
+										// https://promisesaplus.com/#point-64
+										// Only check objects and functions for thenability
+										( typeof returned === "object" ||
+											typeof returned === "function" ) &&
+										returned.then;
+
+									// Handle a returned thenable
+									if ( isFunction( then ) ) {
+
+										// Special processors (notify) just wait for resolution
+										if ( special ) {
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special )
+											);
+
+										// Normal processors (resolve) also hook into progress
+										} else {
+
+											// ...and disregard older resolution values
+											maxDepth++;
+
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special ),
+												resolve( maxDepth, deferred, Identity,
+													deferred.notifyWith )
+											);
+										}
+
+									// Handle all other returned values
+									} else {
+
+										// Only substitute handlers pass on context
+										// and multiple values (non-spec behavior)
+										if ( handler !== Identity ) {
+											that = undefined;
+											args = [ returned ];
+										}
+
+										// Process the value(s)
+										// Default process is resolve
+										( special || deferred.resolveWith )( that, args );
+									}
+								},
+
+								// Only normal processors (resolve) catch and reject exceptions
+								process = special ?
+									mightThrow :
+									function() {
+										try {
+											mightThrow();
+										} catch ( e ) {
+
+											if ( jQuery.Deferred.exceptionHook ) {
+												jQuery.Deferred.exceptionHook( e,
+													process.stackTrace );
+											}
+
+											// Support: Promises/A+ section 2.3.3.3.4.1
+											// https://promisesaplus.com/#point-61
+											// Ignore post-resolution exceptions
+											if ( depth + 1 >= maxDepth ) {
+
+												// Only substitute handlers pass on context
+												// and multiple values (non-spec behavior)
+												if ( handler !== Thrower ) {
+													that = undefined;
+													args = [ e ];
+												}
+
+												deferred.rejectWith( that, args );
+											}
+										}
+									};
+
+							// Support: Promises/A+ section 2.3.3.3.1
+							// https://promisesaplus.com/#point-57
+							// Re-resolve promises immediately to dodge false rejection from
+							// subsequent errors
+							if ( depth ) {
+								process();
+							} else {
+
+								// Call an optional hook to record the stack, in case of exception
+								// since it's otherwise lost when execution goes async
+								if ( jQuery.Deferred.getStackHook ) {
+									process.stackTrace = jQuery.Deferred.getStackHook();
+								}
+								window.setTimeout( process );
+							}
+						};
+					}
+
+					return jQuery.Deferred( function( newDefer ) {
+
+						// progress_handlers.add( ... )
+						tuples[ 0 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onProgress ) ?
+									onProgress :
+									Identity,
+								newDefer.notifyWith
+							)
+						);
+
+						// fulfilled_handlers.add( ... )
+						tuples[ 1 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onFulfilled ) ?
+									onFulfilled :
+									Identity
+							)
+						);
+
+						// rejected_handlers.add( ... )
+						tuples[ 2 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onRejected ) ?
+									onRejected :
+									Thrower
+							)
+						);
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 5 ];
+
+			// promise.progress = list.add
+			// promise.done = list.add
+			// promise.fail = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(
+					function() {
+
+						// state = "resolved" (i.e., fulfilled)
+						// state = "rejected"
+						state = stateString;
+					},
+
+					// rejected_callbacks.disable
+					// fulfilled_callbacks.disable
+					tuples[ 3 - i ][ 2 ].disable,
+
+					// rejected_handlers.disable
+					// fulfilled_handlers.disable
+					tuples[ 3 - i ][ 3 ].disable,
+
+					// progress_callbacks.lock
+					tuples[ 0 ][ 2 ].lock,
+
+					// progress_handlers.lock
+					tuples[ 0 ][ 3 ].lock
+				);
+			}
+
+			// progress_handlers.fire
+			// fulfilled_handlers.fire
+			// rejected_handlers.fire
+			list.add( tuple[ 3 ].fire );
+
+			// deferred.notify = function() { deferred.notifyWith(...) }
+			// deferred.resolve = function() { deferred.resolveWith(...) }
+			// deferred.reject = function() { deferred.rejectWith(...) }
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+				return this;
+			};
+
+			// deferred.notifyWith = list.fireWith
+			// deferred.resolveWith = list.fireWith
+			// deferred.rejectWith = list.fireWith
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( singleValue ) {
+		var
+
+			// count of uncompleted subordinates
+			remaining = arguments.length,
+
+			// count of unprocessed arguments
+			i = remaining,
+
+			// subordinate fulfillment data
+			resolveContexts = Array( i ),
+			resolveValues = slice.call( arguments ),
+
+			// the master Deferred
+			master = jQuery.Deferred(),
+
+			// subordinate callback factory
+			updateFunc = function( i ) {
+				return function( value ) {
+					resolveContexts[ i ] = this;
+					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( !( --remaining ) ) {
+						master.resolveWith( resolveContexts, resolveValues );
+					}
+				};
+			};
+
+		// Single- and empty arguments are adopted like Promise.resolve
+		if ( remaining <= 1 ) {
+			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+				!remaining );
+
+			// Use .then() to unwrap secondary thenables (cf. gh-3000)
+			if ( master.state() === "pending" ||
+				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+				return master.then();
+			}
+		}
+
+		// Multiple arguments are aggregated like Promise.all array elements
+		while ( i-- ) {
+			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+		}
+
+		return master.promise();
+	}
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+	// Support: IE 8 - 9 only
+	// Console exists when dev tools are open, which can happen at any time
+	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+	}
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+	window.setTimeout( function() {
+		throw error;
+	} );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+	readyList
+		.then( fn )
+
+		// Wrap jQuery.readyException in a function so that the lookup
+		// happens at the time of error handling instead of callback
+		// registration.
+		.catch( function( error ) {
+			jQuery.readyException( error );
+		} );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+	}
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed );
+	window.removeEventListener( "load", completed );
+	jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+	// Handle it asynchronously to allow scripts the opportunity to delay ready
+	window.setTimeout( jQuery.ready );
+
+} else {
+
+	// Use the handy event callback
+	document.addEventListener( "DOMContentLoaded", completed );
+
+	// A fallback to window.onload, that will always work
+	window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( toType( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, _key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn(
+					elems[ i ], key, raw ?
+					value :
+					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	if ( chainable ) {
+		return elems;
+	}
+
+	// Gets
+	if ( bulk ) {
+		return fn.call( elems );
+	}
+
+	return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+
+
+// Matches dashed string for camelizing
+var rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([a-z])/g;
+
+// Used by camelCase as callback to replace()
+function fcamelCase( _all, letter ) {
+	return letter.toUpperCase();
+}
+
+// Convert dashed to camelCase; used by the css and data modules
+// Support: IE <=9 - 11, Edge 12 - 15
+// Microsoft forgot to hump their vendor prefix (#9572)
+function camelCase( string ) {
+	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+}
+var acceptData = function( owner ) {
+
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+	cache: function( owner ) {
+
+		// Check if the owner object already has a cache
+		var value = owner[ this.expando ];
+
+		// If not, create one
+		if ( !value ) {
+			value = {};
+
+			// We can accept data for non-element nodes in modern browsers,
+			// but we should not, see #8335.
+			// Always return an empty object.
+			if ( acceptData( owner ) ) {
+
+				// If it is a node unlikely to be stringify-ed or looped over
+				// use plain assignment
+				if ( owner.nodeType ) {
+					owner[ this.expando ] = value;
+
+				// Otherwise secure it in a non-enumerable property
+				// configurable must be true to allow the property to be
+				// deleted when data is removed
+				} else {
+					Object.defineProperty( owner, this.expando, {
+						value: value,
+						configurable: true
+					} );
+				}
+			}
+		}
+
+		return value;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			cache = this.cache( owner );
+
+		// Handle: [ owner, key, value ] args
+		// Always use camelCase key (gh-2257)
+		if ( typeof data === "string" ) {
+			cache[ camelCase( data ) ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ camelCase( prop ) ] = data[ prop ];
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		return key === undefined ?
+			this.cache( owner ) :
+
+			// Always use camelCase key (gh-2257)
+			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
+	},
+	access: function( owner, key, value ) {
+
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+			return this.get( owner, key );
+		}
+
+		// When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i,
+			cache = owner[ this.expando ];
+
+		if ( cache === undefined ) {
+			return;
+		}
+
+		if ( key !== undefined ) {
+
+			// Support array or space separated string of keys
+			if ( Array.isArray( key ) ) {
+
+				// If key is an array of keys...
+				// We always set camelCase keys, so remove that.
+				key = key.map( camelCase );
+			} else {
+				key = camelCase( key );
+
+				// If a key with the spaces exists, use it.
+				// Otherwise, create an array by matching non-whitespace
+				key = key in cache ?
+					[ key ] :
+					( key.match( rnothtmlwhite ) || [] );
+			}
+
+			i = key.length;
+
+			while ( i-- ) {
+				delete cache[ key[ i ] ];
+			}
+		}
+
+		// Remove the expando if there's no more data
+		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+			// Support: Chrome <=35 - 45
+			// Webkit & Blink performance suffers when deleting properties
+			// from DOM nodes, so set to undefined instead
+			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+			if ( owner.nodeType ) {
+				owner[ this.expando ] = undefined;
+			} else {
+				delete owner[ this.expando ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		var cache = owner[ this.expando ];
+		return cache !== undefined && !jQuery.isEmptyObject( cache );
+	}
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+	if ( data === "true" ) {
+		return true;
+	}
+
+	if ( data === "false" ) {
+		return false;
+	}
+
+	if ( data === "null" ) {
+		return null;
+	}
+
+	// Only convert to a number if it doesn't change the string
+	if ( data === +data + "" ) {
+		return +data;
+	}
+
+	if ( rbrace.test( data ) ) {
+		return JSON.parse( data );
+	}
+
+	return data;
+}
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = getData( data );
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			dataUser.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend( {
+	hasData: function( elem ) {
+		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return dataUser.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		dataUser.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to dataPriv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return dataPriv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		dataPriv.remove( elem, name );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = dataUser.get( elem );
+
+				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE 11 only
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					dataPriv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				dataUser.set( this, key );
+			} );
+		}
+
+		return access( this, function( value ) {
+			var data;
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+
+				// Attempt to get data from the cache
+				// The key will always be camelCased in Data
+				data = dataUser.get( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			this.each( function() {
+
+				// We always store the camelCased key
+				dataUser.set( this, key, value );
+			} );
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			dataUser.remove( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = dataPriv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || Array.isArray( data ) ) {
+					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				dataPriv.remove( elem, [ type + "queue", key ] );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var documentElement = document.documentElement;
+
+
+
+	var isAttached = function( elem ) {
+			return jQuery.contains( elem.ownerDocument, elem );
+		},
+		composed = { composed: true };
+
+	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
+	// Check attachment across shadow DOM boundaries when possible (gh-3504)
+	// Support: iOS 10.0-10.2 only
+	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
+	// leading to errors. We need to check for `getRootNode`.
+	if ( documentElement.getRootNode ) {
+		isAttached = function( elem ) {
+			return jQuery.contains( elem.ownerDocument, elem ) ||
+				elem.getRootNode( composed ) === elem.ownerDocument;
+		};
+	}
+var isHiddenWithinTree = function( elem, el ) {
+
+		// isHiddenWithinTree might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+
+		// Inline style trumps all
+		return elem.style.display === "none" ||
+			elem.style.display === "" &&
+
+			// Otherwise, check computed style
+			// Support: Firefox <=43 - 45
+			// Disconnected elements can have computed display: none, so first confirm that elem is
+			// in the document.
+			isAttached( elem ) &&
+
+			jQuery.css( elem, "display" ) === "none";
+	};
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted, scale,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() {
+				return tween.cur();
+			} :
+			function() {
+				return jQuery.css( elem, prop, "" );
+			},
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = elem.nodeType &&
+			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Support: Firefox <=54
+		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
+		initial = initial / 2;
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		while ( maxIterations-- ) {
+
+			// Evaluate and update our best guess (doubling guesses that zero out).
+			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
+			jQuery.style( elem, prop, initialInUnit + unit );
+			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
+				maxIterations = 0;
+			}
+			initialInUnit = initialInUnit / scale;
+
+		}
+
+		initialInUnit = initialInUnit * 2;
+		jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+	var temp,
+		doc = elem.ownerDocument,
+		nodeName = elem.nodeName,
+		display = defaultDisplayMap[ nodeName ];
+
+	if ( display ) {
+		return display;
+	}
+
+	temp = doc.body.appendChild( doc.createElement( nodeName ) );
+	display = jQuery.css( temp, "display" );
+
+	temp.parentNode.removeChild( temp );
+
+	if ( display === "none" ) {
+		display = "block";
+	}
+	defaultDisplayMap[ nodeName ] = display;
+
+	return display;
+}
+
+function showHide( elements, show ) {
+	var display, elem,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	// Determine new display value for elements that need to change
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		display = elem.style.display;
+		if ( show ) {
+
+			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+			// check is required in this first loop unless we have a nonempty display value (either
+			// inline or about-to-be-restored)
+			if ( display === "none" ) {
+				values[ index ] = dataPriv.get( elem, "display" ) || null;
+				if ( !values[ index ] ) {
+					elem.style.display = "";
+				}
+			}
+			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+				values[ index ] = getDefaultDisplay( elem );
+			}
+		} else {
+			if ( display !== "none" ) {
+				values[ index ] = "none";
+
+				// Remember what we're overwriting
+				dataPriv.set( elem, "display", display );
+			}
+		}
+	}
+
+	// Set the display of the elements in a second loop to avoid constant reflow
+	for ( index = 0; index < length; index++ ) {
+		if ( values[ index ] != null ) {
+			elements[ index ].style.display = values[ index ];
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend( {
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHiddenWithinTree( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
+
+var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
+
+
+
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0 - 4.3 only
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Android <=4.1 only
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE <=11 only
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+	// Support: IE <=9 only
+	// IE <=9 replaces <option> tags with their contents when inserted outside of
+	// the select element.
+	div.innerHTML = "<option></option>";
+	support.option = !!div.lastChild;
+} )();
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+	// XHTML parsers do not magically insert elements in the
+	// same way that tag soup parsers do. So we cannot shorten
+	// this by omitting <tbody> or other required elements.
+	thead: [ 1, "<table>", "</table>" ],
+	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+	_default: [ 0, "", "" ]
+};
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: IE <=9 only
+if ( !support.option ) {
+	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
+}
+
+
+function getAll( context, tag ) {
+
+	// Support: IE <=9 - 11 only
+	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
+	var ret;
+
+	if ( typeof context.getElementsByTagName !== "undefined" ) {
+		ret = context.getElementsByTagName( tag || "*" );
+
+	} else if ( typeof context.querySelectorAll !== "undefined" ) {
+		ret = context.querySelectorAll( tag || "*" );
+
+	} else {
+		ret = [];
+	}
+
+	if ( tag === undefined || tag && nodeName( context, tag ) ) {
+		return jQuery.merge( [ context ], ret );
+	}
+
+	return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		dataPriv.set(
+			elems[ i ],
+			"globalEval",
+			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var elem, tmp, tag, wrap, attached, j,
+		fragment = context.createDocumentFragment(),
+		nodes = [],
+		i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( toType( elem ) === "object" ) {
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Remember the top-level container
+				tmp = fragment.firstChild;
+
+				// Ensure the created nodes are orphaned (#12392)
+				tmp.textContent = "";
+			}
+		}
+	}
+
+	// Remove wrapper from fragment
+	fragment.textContent = "";
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+			continue;
+		}
+
+		attached = isAttached( elem );
+
+		// Append to fragment
+		tmp = getAll( fragment.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( attached ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	return fragment;
+}
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE <=9 - 11+
+// focus() and blur() are asynchronous, except when they are no-op.
+// So expect focus to be synchronous when the element is already active,
+// and blur to be synchronous when the element is not already active.
+// (focus and blur are always synchronous in other supported browsers,
+// this just defines when we can count on it).
+function expectSync( elem, type ) {
+	return ( elem === safeActiveElement() ) === ( type === "focus" );
+}
+
+// Support: IE <=9 only
+// Accessing document.activeElement can throw unexpectedly
+// https://bugs.jquery.com/ticket/13393
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.get( elem );
+
+		// Only attach events to objects that accept data
+		if ( !acceptData( elem ) ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Ensure that invalid selectors throw exceptions at attach time
+		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
+		if ( selector ) {
+			jQuery.find.matchesSelector( documentElement, selector );
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = Object.create( null );
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove data and the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			dataPriv.remove( elem, "handle events" );
+		}
+	},
+
+	dispatch: function( nativeEvent ) {
+
+		var i, j, ret, matched, handleObj, handlerQueue,
+			args = new Array( arguments.length ),
+
+			// Make a writable jQuery.Event from the native event object
+			event = jQuery.event.fix( nativeEvent ),
+
+			handlers = (
+					dataPriv.get( this, "events" ) || Object.create( null )
+				)[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+
+		for ( i = 1; i < arguments.length; i++ ) {
+			args[ i ] = arguments[ i ];
+		}
+
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// If the event is namespaced, then each handler is only invoked if it is
+				// specially universal or its namespaces are a superset of the event's.
+				if ( !event.rnamespace || handleObj.namespace === false ||
+					event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, handleObj, sel, matchedHandlers, matchedSelectors,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		if ( delegateCount &&
+
+			// Support: IE <=9
+			// Black-hole SVG <use> instance trees (trac-13180)
+			cur.nodeType &&
+
+			// Support: Firefox <=42
+			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+			// Support: IE 11 only
+			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+			!( event.type === "click" && event.button >= 1 ) ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+					matchedHandlers = [];
+					matchedSelectors = {};
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matchedSelectors[ sel ] === undefined ) {
+							matchedSelectors[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matchedSelectors[ sel ] ) {
+							matchedHandlers.push( handleObj );
+						}
+					}
+					if ( matchedHandlers.length ) {
+						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		cur = this;
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	addProp: function( name, hook ) {
+		Object.defineProperty( jQuery.Event.prototype, name, {
+			enumerable: true,
+			configurable: true,
+
+			get: isFunction( hook ) ?
+				function() {
+					if ( this.originalEvent ) {
+							return hook( this.originalEvent );
+					}
+				} :
+				function() {
+					if ( this.originalEvent ) {
+							return this.originalEvent[ name ];
+					}
+				},
+
+			set: function( value ) {
+				Object.defineProperty( this, name, {
+					enumerable: true,
+					configurable: true,
+					writable: true,
+					value: value
+				} );
+			}
+		} );
+	},
+
+	fix: function( originalEvent ) {
+		return originalEvent[ jQuery.expando ] ?
+			originalEvent :
+			new jQuery.Event( originalEvent );
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		click: {
+
+			// Utilize native event to ensure correct state for checkable inputs
+			setup: function( data ) {
+
+				// For mutual compressibility with _default, replace `this` access with a local var.
+				// `|| data` is dead code meant only to preserve the variable through minification.
+				var el = this || data;
+
+				// Claim the first handler
+				if ( rcheckableType.test( el.type ) &&
+					el.click && nodeName( el, "input" ) ) {
+
+					// dataPriv.set( el, "click", ... )
+					leverageNative( el, "click", returnTrue );
+				}
+
+				// Return false to allow normal processing in the caller
+				return false;
+			},
+			trigger: function( data ) {
+
+				// For mutual compressibility with _default, replace `this` access with a local var.
+				// `|| data` is dead code meant only to preserve the variable through minification.
+				var el = this || data;
+
+				// Force setup before triggering a click
+				if ( rcheckableType.test( el.type ) &&
+					el.click && nodeName( el, "input" ) ) {
+
+					leverageNative( el, "click" );
+				}
+
+				// Return non-false to allow normal event-path propagation
+				return true;
+			},
+
+			// For cross-browser consistency, suppress native .click() on links
+			// Also prevent it if we're currently inside a leveraged native-event stack
+			_default: function( event ) {
+				var target = event.target;
+				return rcheckableType.test( target.type ) &&
+					target.click && nodeName( target, "input" ) &&
+					dataPriv.get( target, "click" ) ||
+					nodeName( target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	}
+};
+
+// Ensure the presence of an event listener that handles manually-triggered
+// synthetic events by interrupting progress until reinvoked in response to
+// *native* events that it fires directly, ensuring that state changes have
+// already occurred before other listeners are invoked.
+function leverageNative( el, type, expectSync ) {
+
+	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
+	if ( !expectSync ) {
+		if ( dataPriv.get( el, type ) === undefined ) {
+			jQuery.event.add( el, type, returnTrue );
+		}
+		return;
+	}
+
+	// Register the controller as a special universal handler for all event namespaces
+	dataPriv.set( el, type, false );
+	jQuery.event.add( el, type, {
+		namespace: false,
+		handler: function( event ) {
+			var notAsync, result,
+				saved = dataPriv.get( this, type );
+
+			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
+
+				// Interrupt processing of the outer synthetic .trigger()ed event
+				// Saved data should be false in such cases, but might be a leftover capture object
+				// from an async native handler (gh-4350)
+				if ( !saved.length ) {
+
+					// Store arguments for use when handling the inner native event
+					// There will always be at least one argument (an event object), so this array
+					// will not be confused with a leftover capture object.
+					saved = slice.call( arguments );
+					dataPriv.set( this, type, saved );
+
+					// Trigger the native event and capture its result
+					// Support: IE <=9 - 11+
+					// focus() and blur() are asynchronous
+					notAsync = expectSync( this, type );
+					this[ type ]();
+					result = dataPriv.get( this, type );
+					if ( saved !== result || notAsync ) {
+						dataPriv.set( this, type, false );
+					} else {
+						result = {};
+					}
+					if ( saved !== result ) {
+
+						// Cancel the outer synthetic event
+						event.stopImmediatePropagation();
+						event.preventDefault();
+						return result.value;
+					}
+
+				// If this is an inner synthetic event for an event with a bubbling surrogate
+				// (focus or blur), assume that the surrogate already propagated from triggering the
+				// native event and prevent that from happening again here.
+				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
+				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
+				// less bad than duplication.
+				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
+					event.stopPropagation();
+				}
+
+			// If this is a native event triggered above, everything is now in order
+			// Fire an inner synthetic event with the original arguments
+			} else if ( saved.length ) {
+
+				// ...and capture the result
+				dataPriv.set( this, type, {
+					value: jQuery.event.trigger(
+
+						// Support: IE <=9 - 11+
+						// Extend with the prototype to reset the above stopImmediatePropagation()
+						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
+						saved.slice( 1 ),
+						this
+					)
+				} );
+
+				// Abort handling of the native event
+				event.stopImmediatePropagation();
+			}
+		}
+	} );
+}
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+	// This "if" is needed for plain objects
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: Android <=2.3 only
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+		// Create target properties
+		// Support: Safari <=6 - 7 only
+		// Target should not be a text node (#504, #13143)
+		this.target = ( src.target && src.target.nodeType === 3 ) ?
+			src.target.parentNode :
+			src.target;
+
+		this.currentTarget = src.currentTarget;
+		this.relatedTarget = src.relatedTarget;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || Date.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+	isSimulated: false,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+	altKey: true,
+	bubbles: true,
+	cancelable: true,
+	changedTouches: true,
+	ctrlKey: true,
+	detail: true,
+	eventPhase: true,
+	metaKey: true,
+	pageX: true,
+	pageY: true,
+	shiftKey: true,
+	view: true,
+	"char": true,
+	code: true,
+	charCode: true,
+	key: true,
+	keyCode: true,
+	button: true,
+	buttons: true,
+	clientX: true,
+	clientY: true,
+	offsetX: true,
+	offsetY: true,
+	pointerId: true,
+	pointerType: true,
+	screenX: true,
+	screenY: true,
+	targetTouches: true,
+	toElement: true,
+	touches: true,
+
+	which: function( event ) {
+		var button = event.button;
+
+		// Add which for key events
+		if ( event.which == null && rkeyEvent.test( event.type ) ) {
+			return event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+			if ( button & 1 ) {
+				return 1;
+			}
+
+			if ( button & 2 ) {
+				return 3;
+			}
+
+			if ( button & 4 ) {
+				return 2;
+			}
+
+			return 0;
+		}
+
+		return event.which;
+	}
+}, jQuery.event.addProp );
+
+jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
+	jQuery.event.special[ type ] = {
+
+		// Utilize native event if possible so blur/focus sequence is correct
+		setup: function() {
+
+			// Claim the first handler
+			// dataPriv.set( this, "focus", ... )
+			// dataPriv.set( this, "blur", ... )
+			leverageNative( this, type, expectSync );
+
+			// Return false to allow normal processing in the caller
+			return false;
+		},
+		trigger: function() {
+
+			// Force setup before trigger
+			leverageNative( this, type );
+
+			// Return non-false to allow normal event-path propagation
+			return true;
+		},
+
+		delegateType: delegateType
+	};
+} );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+jQuery.fn.extend( {
+
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	}
+} );
+
+
+var
+
+	// Support: IE <=10 - 11, Edge 12 - 13 only
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+	if ( nodeName( elem, "table" ) &&
+		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
+	}
+
+	return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
+		elem.type = elem.type.slice( 5 );
+	} else {
+		elem.removeAttribute( "type" );
+	}
+
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( dataPriv.hasData( src ) ) {
+		pdataOld = dataPriv.get( src );
+		events = pdataOld.events;
+
+		if ( events ) {
+			dataPriv.remove( dest, "handle events" );
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( dataUser.hasData( src ) ) {
+		udataOld = dataUser.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		dataUser.set( dest, udataCur );
+	}
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = flat( args );
+
+	var fragment, first, scripts, hasScripts, node, doc,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		valueIsFunction = isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( valueIsFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( valueIsFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android <=4.0 only, PhantomJS 1 only
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!dataPriv.access( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl && !node.noModule ) {
+								jQuery._evalUrl( node.src, {
+									nonce: node.nonce || node.getAttribute( "nonce" )
+								}, doc );
+							}
+						} else {
+							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		nodes = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && isAttached( node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html;
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = isAttached( elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+			if ( acceptData( elem ) ) {
+				if ( ( data = elem[ dataPriv.expando ] ) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataPriv.expando ] = undefined;
+				}
+				if ( elem[ dataUser.expando ] ) {
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataUser.expando ] = undefined;
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each( function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				} );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: Android <=4.0 only, PhantomJS 1 only
+			// .get() because push.apply(_, arraylike) throws on ancient WebKit
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+var swap = function( elem, options, callback ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.call( elem );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
+
+
+
+( function() {
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computeStyleTests() {
+
+		// This is a singleton, we need to execute it only once
+		if ( !div ) {
+			return;
+		}
+
+		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
+			"margin-top:1px;padding:0;border:0";
+		div.style.cssText =
+			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"width:60%;top:1%";
+		documentElement.appendChild( container ).appendChild( div );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+
+		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
+
+		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.right = "60%";
+		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
+
+		// Support: IE 9 - 11 only
+		// Detect misreporting of content dimensions for box-sizing:border-box elements
+		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
+
+		// Support: IE 9 only
+		// Detect overflow:scroll screwiness (gh-3699)
+		// Support: Chrome <=64
+		// Don't get tricked when zoom affects offsetWidth (gh-4029)
+		div.style.position = "absolute";
+		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
+
+		documentElement.removeChild( container );
+
+		// Nullify the div so it wouldn't be stored in the memory and
+		// it will also be a sign that checks already performed
+		div = null;
+	}
+
+	function roundPixelMeasures( measure ) {
+		return Math.round( parseFloat( measure ) );
+	}
+
+	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
+		reliableTrDimensionsVal, reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE <=9 - 11 only
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	jQuery.extend( support, {
+		boxSizingReliable: function() {
+			computeStyleTests();
+			return boxSizingReliableVal;
+		},
+		pixelBoxStyles: function() {
+			computeStyleTests();
+			return pixelBoxStylesVal;
+		},
+		pixelPosition: function() {
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		reliableMarginLeft: function() {
+			computeStyleTests();
+			return reliableMarginLeftVal;
+		},
+		scrollboxSize: function() {
+			computeStyleTests();
+			return scrollboxSizeVal;
+		},
+
+		// Support: IE 9 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Behavior in IE 9 is more subtle than in newer versions & it passes
+		// some versions of this test; make sure not to make it pass there!
+		reliableTrDimensions: function() {
+			var table, tr, trChild, trStyle;
+			if ( reliableTrDimensionsVal == null ) {
+				table = document.createElement( "table" );
+				tr = document.createElement( "tr" );
+				trChild = document.createElement( "div" );
+
+				table.style.cssText = "position:absolute;left:-11111px";
+				tr.style.height = "1px";
+				trChild.style.height = "9px";
+
+				documentElement
+					.appendChild( table )
+					.appendChild( tr )
+					.appendChild( trChild );
+
+				trStyle = window.getComputedStyle( tr );
+				reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
+
+				documentElement.removeChild( table );
+			}
+			return reliableTrDimensionsVal;
+		}
+	} );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+
+		// Support: Firefox 51+
+		// Retrieving style before computed somehow
+		// fixes an issue with getting wrong values
+		// on detached elements
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+
+	// getPropertyValue is needed for:
+	//   .css('filter') (IE 9 only, #12537)
+	//   .css('--customProperty) (#3144)
+	if ( computed ) {
+		ret = computed.getPropertyValue( name ) || computed[ name ];
+
+		if ( ret === "" && !isAttached( elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// Android Browser returns percentage for some values,
+		// but width seems to be reliably pixels.
+		// This is against the CSSOM draft spec:
+		// https://drafts.csswg.org/cssom/#resolved-values
+		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+
+		// Support: IE <=9 - 11 only
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var cssPrefixes = [ "Webkit", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style,
+	vendorProps = {};
+
+// Return a vendor-prefixed property or undefined
+function vendorPropName( name ) {
+
+	// Check for vendor prefixed names
+	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
+function finalPropName( name ) {
+	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
+
+	if ( final ) {
+		return final;
+	}
+	if ( name in emptyStyle ) {
+		return name;
+	}
+	return vendorProps[ name ] = vendorPropName( name ) || name;
+}
+
+
+var
+
+	// Swappable if display is none or starts with table
+	// except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rcustomProp = /^--/,
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	};
+
+function setPositiveNumber( _elem, value, subtract ) {
+
+	// Any relative (+/-) values have already been
+	// normalized at this point
+	var matches = rcssNum.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+		value;
+}
+
+function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
+	var i = dimension === "width" ? 1 : 0,
+		extra = 0,
+		delta = 0;
+
+	// Adjustment may not be necessary
+	if ( box === ( isBorderBox ? "border" : "content" ) ) {
+		return 0;
+	}
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin
+		if ( box === "margin" ) {
+			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
+		}
+
+		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
+		if ( !isBorderBox ) {
+
+			// Add padding
+			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// For "border" or "margin", add border
+			if ( box !== "padding" ) {
+				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+
+			// But still keep track of it otherwise
+			} else {
+				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+
+		// If we get here with a border-box (content + padding + border), we're seeking "content" or
+		// "padding" or "margin"
+		} else {
+
+			// For "content", subtract padding
+			if ( box === "content" ) {
+				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// For "content" or "padding", subtract border
+			if ( box !== "margin" ) {
+				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	// Account for positive content-box scroll gutter when requested by providing computedVal
+	if ( !isBorderBox && computedVal >= 0 ) {
+
+		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
+		// Assuming integer scroll gutter, subtract the rest and round down
+		delta += Math.max( 0, Math.ceil(
+			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+			computedVal -
+			delta -
+			extra -
+			0.5
+
+		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
+		// Use an explicit zero to avoid NaN (gh-3964)
+		) ) || 0;
+	}
+
+	return delta;
+}
+
+function getWidthOrHeight( elem, dimension, extra ) {
+
+	// Start with computed style
+	var styles = getStyles( elem ),
+
+		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
+		// Fake content-box until we know it's needed to know the true value.
+		boxSizingNeeded = !support.boxSizingReliable() || extra,
+		isBorderBox = boxSizingNeeded &&
+			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+		valueIsBorderBox = isBorderBox,
+
+		val = curCSS( elem, dimension, styles ),
+		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
+
+	// Support: Firefox <=54
+	// Return a confounding non-pixel value or feign ignorance, as appropriate.
+	if ( rnumnonpx.test( val ) ) {
+		if ( !extra ) {
+			return val;
+		}
+		val = "auto";
+	}
+
+
+	// Support: IE 9 - 11 only
+	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
+	// In those cases, the computed value can be trusted to be border-box.
+	if ( ( !support.boxSizingReliable() && isBorderBox ||
+
+		// Support: IE 10 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
+		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
+
+		// Fall back to offsetWidth/offsetHeight when value is "auto"
+		// This happens for inline elements with no explicit setting (gh-3571)
+		val === "auto" ||
+
+		// Support: Android <=4.1 - 4.3 only
+		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
+		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
+
+		// Make sure the element is visible & connected
+		elem.getClientRects().length ) {
+
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
+		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
+		// retrieved value as a content box dimension.
+		valueIsBorderBox = offsetProp in elem;
+		if ( valueIsBorderBox ) {
+			val = elem[ offsetProp ];
+		}
+	}
+
+	// Normalize "" and auto
+	val = parseFloat( val ) || 0;
+
+	// Adjust for the element's box model
+	return ( val +
+		boxModelAdjustment(
+			elem,
+			dimension,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles,
+
+			// Provide the current computed size to request scroll gutter calculation (gh-3589)
+			val
+		)
+	) + "px";
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"gridArea": true,
+		"gridColumn": true,
+		"gridColumnEnd": true,
+		"gridColumnStart": true,
+		"gridRow": true,
+		"gridRowEnd": true,
+		"gridRowStart": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = camelCase( name ),
+			isCustomProp = rcustomProp.test( name ),
+			style = elem.style;
+
+		// Make sure that we're working with the right name. We don't
+		// want to query the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
+			// "px" to a few hardcoded values.
+			if ( type === "number" && !isCustomProp ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				if ( isCustomProp ) {
+					style.setProperty( name, value );
+				} else {
+					style[ name ] = value;
+				}
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = camelCase( name ),
+			isCustomProp = rcustomProp.test( name );
+
+		// Make sure that we're working with the right name. We don't
+		// want to modify the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( _i, dimension ) {
+	jQuery.cssHooks[ dimension ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+					// Support: Safari 8+
+					// Table columns in Safari have non-zero offsetWidth & zero
+					// getBoundingClientRect().width unless display is changed.
+					// Support: IE <=11 only
+					// Running getBoundingClientRect on a disconnected node
+					// in IE throws an error.
+					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, dimension, extra );
+						} ) :
+						getWidthOrHeight( elem, dimension, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = getStyles( elem ),
+
+				// Only read styles.position if the test has a chance to fail
+				// to avoid forcing a reflow.
+				scrollboxSizeBuggy = !support.scrollboxSize() &&
+					styles.position === "absolute",
+
+				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
+				boxSizingNeeded = scrollboxSizeBuggy || extra,
+				isBorderBox = boxSizingNeeded &&
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+				subtract = extra ?
+					boxModelAdjustment(
+						elem,
+						dimension,
+						extra,
+						isBorderBox,
+						styles
+					) :
+					0;
+
+			// Account for unreliable border-box dimensions by comparing offset* to computed and
+			// faking a content-box to get border and padding (gh-3699)
+			if ( isBorderBox && scrollboxSizeBuggy ) {
+				subtract -= Math.ceil(
+					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+					parseFloat( styles[ dimension ] ) -
+					boxModelAdjustment( elem, dimension, "border", false, styles ) -
+					0.5
+				);
+			}
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ dimension ] = value;
+				value = jQuery.css( elem, dimension );
+			}
+
+			return setPositiveNumber( elem, value, subtract );
+		}
+	};
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+				elem.getBoundingClientRect().left -
+					swap( elem, { marginLeft: 0 }, function() {
+						return elem.getBoundingClientRect().left;
+					} )
+				) + "px";
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( prefix !== "margin" ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( Array.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 && (
+					jQuery.cssHooks[ tween.prop ] ||
+					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, inProgress,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+function schedule() {
+	if ( inProgress ) {
+		if ( document.hidden === false && window.requestAnimationFrame ) {
+			window.requestAnimationFrame( schedule );
+		} else {
+			window.setTimeout( schedule, jQuery.fx.interval );
+		}
+
+		jQuery.fx.tick();
+	}
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = Date.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+		isBox = "width" in props || "height" in props,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHiddenWithinTree( elem ),
+		dataShow = dataPriv.get( elem, "fxshow" );
+
+	// Queue-skipping animations hijack the fx hooks
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// Ensure the complete handler is called before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// Detect show/hide animations
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.test( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// Pretend to be hidden if this is a "show" and
+				// there is still data from a stopped show/hide
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+
+				// Ignore all other no-op show/hide data
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+		}
+	}
+
+	// Bail out if this is a no-op like .hide().hide()
+	propTween = !jQuery.isEmptyObject( props );
+	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+		return;
+	}
+
+	// Restrict "overflow" and "display" styles during box animations
+	if ( isBox && elem.nodeType === 1 ) {
+
+		// Support: IE <=9 - 11, Edge 12 - 15
+		// Record all 3 overflow attributes because IE does not infer the shorthand
+		// from identically-valued overflowX and overflowY and Edge just mirrors
+		// the overflowX value there.
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Identify a display type, preferring old show/hide data over the CSS cascade
+		restoreDisplay = dataShow && dataShow.display;
+		if ( restoreDisplay == null ) {
+			restoreDisplay = dataPriv.get( elem, "display" );
+		}
+		display = jQuery.css( elem, "display" );
+		if ( display === "none" ) {
+			if ( restoreDisplay ) {
+				display = restoreDisplay;
+			} else {
+
+				// Get nonempty value(s) by temporarily forcing visibility
+				showHide( [ elem ], true );
+				restoreDisplay = elem.style.display || restoreDisplay;
+				display = jQuery.css( elem, "display" );
+				showHide( [ elem ] );
+			}
+		}
+
+		// Animate inline elements as inline-block
+		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+			if ( jQuery.css( elem, "float" ) === "none" ) {
+
+				// Restore the original display value at the end of pure show/hide animations
+				if ( !propTween ) {
+					anim.done( function() {
+						style.display = restoreDisplay;
+					} );
+					if ( restoreDisplay == null ) {
+						display = style.display;
+						restoreDisplay = display === "none" ? "" : display;
+					}
+				}
+				style.display = "inline-block";
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always( function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		} );
+	}
+
+	// Implement show/hide animations
+	propTween = false;
+	for ( prop in orig ) {
+
+		// General show/hide setup for this element animation
+		if ( !propTween ) {
+			if ( dataShow ) {
+				if ( "hidden" in dataShow ) {
+					hidden = dataShow.hidden;
+				}
+			} else {
+				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+			}
+
+			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+			if ( toggle ) {
+				dataShow.hidden = !hidden;
+			}
+
+			// Show elements before animating them
+			if ( hidden ) {
+				showHide( [ elem ], true );
+			}
+
+			/* eslint-disable no-loop-func */
+
+			anim.done( function() {
+
+			/* eslint-enable no-loop-func */
+
+				// The final step of a "hide" animation is actually hiding the element
+				if ( !hidden ) {
+					showHide( [ elem ] );
+				}
+				dataPriv.remove( elem, "fxshow" );
+				for ( prop in orig ) {
+					jQuery.style( elem, prop, orig[ prop ] );
+				}
+			} );
+		}
+
+		// Per-property setup
+		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+		if ( !( prop in dataShow ) ) {
+			dataShow[ prop ] = propTween.start;
+			if ( hidden ) {
+				propTween.end = propTween.start;
+				propTween.start = 0;
+			}
+		}
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( Array.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3 only
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			// If there's more to do, yield
+			if ( percent < 1 && length ) {
+				return remaining;
+			}
+
+			// If this was an empty animation, synthesize a final progress notification
+			if ( !length ) {
+				deferred.notifyWith( elem, [ animation, 1, 0 ] );
+			}
+
+			// Resolve the animation and report its conclusion
+			deferred.resolveWith( elem, [ animation ] );
+			return false;
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					result.stop.bind( result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	// Attach callbacks from options
+	animation
+		.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnothtmlwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !isFunction( easing ) && easing
+	};
+
+	// Go to the end state if fx are off
+	if ( jQuery.fx.off ) {
+		opt.duration = 0;
+
+	} else {
+		if ( typeof opt.duration !== "number" ) {
+			if ( opt.duration in jQuery.fx.speeds ) {
+				opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+			} else {
+				opt.duration = jQuery.fx.speeds._default;
+			}
+		}
+	}
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || dataPriv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = dataPriv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = dataPriv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = Date.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Run the timer and safely remove it when done (allowing for external removal)
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+	if ( inProgress ) {
+		return;
+	}
+
+	inProgress = true;
+	schedule();
+};
+
+jQuery.fx.stop = function() {
+	inProgress = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: Android <=4.3 only
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE <=11 only
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: IE <=11 only
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// Attribute hooks are determined by the lowercase version
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name,
+			i = 0,
+
+			// Attribute names can contain non-HTML whitespace characters
+			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+			attrNames = value && value.match( rnothtmlwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				elem.removeAttribute( name );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle,
+			lowercaseName = name.toLowerCase();
+
+		if ( !isXML ) {
+
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ lowercaseName ];
+			attrHandle[ lowercaseName ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				lowercaseName :
+				null;
+			attrHandle[ lowercaseName ] = handle;
+		}
+		return ret;
+	};
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each( function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// Support: IE <=9 - 11 only
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				if ( tabindex ) {
+					return parseInt( tabindex, 10 );
+				}
+
+				if (
+					rfocusable.test( elem.nodeName ) ||
+					rclickable.test( elem.nodeName ) &&
+					elem.href
+				) {
+					return 0;
+				}
+
+				return -1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		},
+		set: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent ) {
+				parent.selectedIndex;
+
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+	// Strip and collapse whitespace according to HTML spec
+	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
+	function stripAndCollapse( value ) {
+		var tokens = value.match( rnothtmlwhite ) || [];
+		return tokens.join( " " );
+	}
+
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+function classesToArray( value ) {
+	if ( Array.isArray( value ) ) {
+		return value;
+	}
+	if ( typeof value === "string" ) {
+		return value.match( rnothtmlwhite ) || [];
+	}
+	return [];
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isValidValue = type === "string" || Array.isArray( value );
+
+		if ( typeof stateVal === "boolean" && isValidValue ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( isValidValue ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = classesToArray( value );
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// Store className if set
+					dataPriv.set( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				if ( this.setAttribute ) {
+					this.setAttribute( "class",
+						className || value === false ?
+						"" :
+						dataPriv.get( this, "__className__" ) || ""
+					);
+				}
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+					return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, valueIsFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				// Handle most common string cases
+				if ( typeof ret === "string" ) {
+					return ret.replace( rreturn, "" );
+				}
+
+				// Handle cases where value is null/undef or number
+				return ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		valueIsFunction = isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( valueIsFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( Array.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE <=10 - 11 only
+					// option.text throws exceptions (#14686, #14858)
+					// Strip and collapse whitespace
+					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+					stripAndCollapse( jQuery.text( elem ) );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option, i,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one",
+					values = one ? null : [],
+					max = one ? index + 1 : options.length;
+
+				if ( index < 0 ) {
+					i = max;
+
+				} else {
+					i = one ? index : 0;
+				}
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// Support: IE <=9 only
+					// IE8-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							!option.disabled &&
+							( !option.parentNode.disabled ||
+								!nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+
+					/* eslint-disable no-cond-assign */
+
+					if ( option.selected =
+						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+					) {
+						optionSet = true;
+					}
+
+					/* eslint-enable no-cond-assign */
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( Array.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+support.focusin = "onfocusin" in window;
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	stopPropagationCallback = function( e ) {
+		e.stopPropagation();
+	};
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = lastElement = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+			lastElement = cur;
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = (
+					dataPriv.get( cur, "events" ) || Object.create( null )
+				)[ event.type ] &&
+				dataPriv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( ( !special._default ||
+				special._default.apply( eventPath.pop(), data ) === false ) &&
+				acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.addEventListener( type, stopPropagationCallback );
+					}
+
+					elem[ type ]();
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.removeEventListener( type, stopPropagationCallback );
+					}
+
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	// Used only for `focus(in | out)` events
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+	}
+
+} );
+
+jQuery.fn.extend( {
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+
+				// Handle: regular nodes (via `this.ownerDocument`), window
+				// (via `this.document`) & document (via `this`).
+				var doc = this.ownerDocument || this.document || this,
+					attaches = dataPriv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this.document || this,
+					attaches = dataPriv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					dataPriv.remove( doc, fix );
+
+				} else {
+					dataPriv.access( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+var location = window.location;
+
+var nonce = { guid: Date.now() };
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE 9 - 11 only
+	// IE throws on parseFromString with invalid input.
+	try {
+		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( Array.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && toType( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, valueOrFunction ) {
+
+			// If value is a function, invoke it and use its return value
+			var value = isFunction( valueOrFunction ) ?
+				valueOrFunction() :
+				valueOrFunction;
+
+			s[ s.length ] = encodeURIComponent( key ) + "=" +
+				encodeURIComponent( value == null ? "" : value );
+		};
+
+	if ( a == null ) {
+		return "";
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( _i, elem ) {
+			var val = jQuery( this ).val();
+
+			if ( val == null ) {
+				return null;
+			}
+
+			if ( Array.isArray( val ) ) {
+				return jQuery.map( val, function( val ) {
+					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+				} );
+			}
+
+			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+var
+	r20 = /%20/g,
+	rhash = /#.*$/,
+	rantiCache = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+		if ( isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+			// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": JSON.parse,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// Request state (becomes false upon send and true upon completion)
+			completed,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// uncached part of the url
+			uncached,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( completed ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
+									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
+										.concat( match[ 2 ] );
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() + " " ];
+					}
+					return match == null ? null : match.join( ", " );
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return completed ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( completed == null ) {
+						name = requestHeadersNames[ name.toLowerCase() ] =
+							requestHeadersNames[ name.toLowerCase() ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( completed == null ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( completed ) {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						} else {
+
+							// Lazy-add the new callbacks in a way that preserves old ones
+							for ( code in map ) {
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE <=8 - 11, Edge 12 - 15
+			// IE throws exception on accessing the href property if url is malformed,
+			// e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE <=8 - 11 only
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( completed ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		// Remove hash to simplify url manipulation
+		cacheURL = s.url.replace( rhash, "" );
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// Remember the hash so we can put it back
+			uncached = s.url.slice( cacheURL.length );
+
+			// If data is available and should be processed, append data to url
+			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
+				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add or update anti-cache param if needed
+			if ( s.cache === false ) {
+				cacheURL = cacheURL.replace( rantiCache, "$1" );
+				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
+					uncached;
+			}
+
+			// Put hash and anti-cache on the URL that will be requested (gh-1732)
+			s.url = cacheURL + uncached;
+
+		// Change '%20' to '+' if this is encoded form body content (gh-2658)
+		} else if ( s.data && s.processData &&
+			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+			s.data = s.data.replace( r20, "+" );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		completeDeferred.add( s.complete );
+		jqXHR.done( s.success );
+		jqXHR.fail( s.error );
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( completed ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				completed = false;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Rethrow post-completion exceptions
+				if ( completed ) {
+					throw e;
+				}
+
+				// Propagate others as results
+				done( -1, e );
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Ignore repeat invocations
+			if ( completed ) {
+				return;
+			}
+
+			completed = true;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Use a noop converter for missing script
+			if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
+				s.converters[ "text script" ] = function() {};
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( _i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+jQuery.ajaxPrefilter( function( s ) {
+	var i;
+	for ( i in s.headers ) {
+		if ( i.toLowerCase() === "content-type" ) {
+			s.contentType = s.headers[ i ] || "";
+		}
+	}
+} );
+
+
+jQuery._evalUrl = function( url, options, doc ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		cache: true,
+		async: false,
+		global: false,
+
+		// Only evaluate the response if it is successful (gh-4126)
+		// dataFilter is not invoked for failure responses, so using it instead
+		// of the default converter is kludgy but it works.
+		converters: {
+			"text script": function() {}
+		},
+		dataFilter: function( response ) {
+			jQuery.globalEval( response, options, doc );
+		}
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( this[ 0 ] ) {
+			if ( isFunction( html ) ) {
+				html = html.call( this[ 0 ] );
+			}
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var htmlIsFunction = isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function( selector ) {
+		this.parent( selector ).not( "body" ).each( function() {
+			jQuery( this ).replaceWith( this.childNodes );
+		} );
+		return this;
+	}
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+	return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+		// File protocol always yields status code 0, assume 200
+		0: 200,
+
+		// Support: IE <=9 only
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+	var callback, errorCallback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr();
+
+				xhr.open(
+					options.type,
+					options.url,
+					options.async,
+					options.username,
+					options.password
+				);
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+					headers[ "X-Requested-With" ] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							callback = errorCallback = xhr.onload =
+								xhr.onerror = xhr.onabort = xhr.ontimeout =
+									xhr.onreadystatechange = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+
+								// Support: IE <=9 only
+								// On a manual native abort, IE9 throws
+								// errors on any property access that is not readyState
+								if ( typeof xhr.status !== "number" ) {
+									complete( 0, "error" );
+								} else {
+									complete(
+
+										// File: protocol always yields status 0; see #8605, #14207
+										xhr.status,
+										xhr.statusText
+									);
+								}
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+
+									// Support: IE <=9 only
+									// IE9 has no XHR2 but throws on binary (trac-11426)
+									// For XHR2 non-text, let the caller handle it (gh-2498)
+									( xhr.responseType || "text" ) !== "text"  ||
+									typeof xhr.responseText !== "string" ?
+										{ binary: xhr.response } :
+										{ text: xhr.responseText },
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
+
+				// Support: IE 9 only
+				// Use onreadystatechange to replace onabort
+				// to handle uncaught aborts
+				if ( xhr.onabort !== undefined ) {
+					xhr.onabort = errorCallback;
+				} else {
+					xhr.onreadystatechange = function() {
+
+						// Check readyState before timeout as it changes
+						if ( xhr.readyState === 4 ) {
+
+							// Allow onerror to be called first,
+							// but that will not handle a native abort
+							// Also, save errorCallback to a variable
+							// as xhr.onerror cannot be accessed
+							window.setTimeout( function() {
+								if ( callback ) {
+									errorCallback();
+								}
+							} );
+						}
+					};
+				}
+
+				// Create the abort callback
+				callback = callback( "abort" );
+
+				try {
+
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+	if ( s.crossDomain ) {
+		s.contents.script = false;
+	}
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain or forced-by-attrs requests
+	if ( s.crossDomain || s.scriptAttrs ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery( "<script>" )
+					.attr( s.scriptAttrs || {} )
+					.prop( { charset: s.scriptCharset, src: s.url } )
+					.on( "load error", callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					} );
+
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+	var body = document.implementation.createHTMLDocument( "" ).body;
+	body.innerHTML = "<form></form><form></form>";
+	return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( typeof data !== "string" ) {
+		return [];
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+
+	var base, parsed, scripts;
+
+	if ( !context ) {
+
+		// Stop scripts or inline event handlers from being executed immediately
+		// by using document.implementation
+		if ( support.createHTMLDocument ) {
+			context = document.implementation.createHTMLDocument( "" );
+
+			// Set the base href for the created document
+			// so any parsed elements with URLs
+			// are based on the document's URL (gh-2965)
+			base = context.createElement( "base" );
+			base.href = document.location.href;
+			context.head.appendChild( base );
+		} else {
+			context = document;
+		}
+	}
+
+	parsed = rsingleTag.exec( data );
+	scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = stripAndCollapse( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			if ( typeof props.top === "number" ) {
+				props.top += "px";
+			}
+			if ( typeof props.left === "number" ) {
+				props.left += "px";
+			}
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+
+	// offset() relates an element's border box to the document origin
+	offset: function( options ) {
+
+		// Preserve chaining for setter
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var rect, win,
+			elem = this[ 0 ];
+
+		if ( !elem ) {
+			return;
+		}
+
+		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+		// Support: IE <=11 only
+		// Running getBoundingClientRect on a
+		// disconnected node in IE throws an error
+		if ( !elem.getClientRects().length ) {
+			return { top: 0, left: 0 };
+		}
+
+		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
+		rect = elem.getBoundingClientRect();
+		win = elem.ownerDocument.defaultView;
+		return {
+			top: rect.top + win.pageYOffset,
+			left: rect.left + win.pageXOffset
+		};
+	},
+
+	// position() relates an element's margin box to its offset parent's padding box
+	// This corresponds to the behavior of CSS absolute positioning
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset, doc,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// position:fixed elements are offset from the viewport, which itself always has zero offset
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume position:fixed implies availability of getBoundingClientRect
+			offset = elem.getBoundingClientRect();
+
+		} else {
+			offset = this.offset();
+
+			// Account for the *real* offset parent, which can be the document or its root element
+			// when a statically positioned element is identified
+			doc = elem.ownerDocument;
+			offsetParent = elem.offsetParent || doc.documentElement;
+			while ( offsetParent &&
+				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
+				jQuery.css( offsetParent, "position" ) === "static" ) {
+
+				offsetParent = offsetParent.parentNode;
+			}
+			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
+
+				// Incorporate borders into its offset, since they are outside its content origin
+				parentOffset = jQuery( offsetParent ).offset();
+				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
+				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
+			}
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	// This method will return documentElement in the following cases:
+	// 1) For the element inside the iframe without offsetParent, this method will return
+	//    documentElement of the parent window
+	// 2) For the hidden or detached element
+	// 3) For body or html element, i.e. in case of the html node - it will return itself
+	//
+	// but those exceptions were never presented as a real life use-cases
+	// and might be considered as more preferable results.
+	//
+	// This logic, however, is not guaranteed and can change at any point in the future
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+
+			// Coalesce documents and windows
+			var win;
+			if ( isWindow( elem ) ) {
+				win = elem;
+			} else if ( elem.nodeType === 9 ) {
+				win = elem.defaultView;
+			}
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : win.pageXOffset,
+					top ? val : win.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length );
+	};
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( _i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+		function( defaultExtra, funcName ) {
+
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( isWindow( elem ) ) {
+
+					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+					return funcName.indexOf( "outer" ) === 0 ?
+						elem[ "inner" + name ] :
+						elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable );
+		};
+	} );
+} );
+
+
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( _i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
+	function( _i, name ) {
+
+		// Handle event binding
+		jQuery.fn[ name ] = function( data, fn ) {
+			return arguments.length > 0 ?
+				this.on( name, null, data, fn ) :
+				this.trigger( name );
+		};
+	} );
+
+
+
+
+// Support: Android <=4.0 only
+// Make sure we trim BOM and NBSP
+var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
+// Bind a function to a context, optionally partially applying any
+// arguments.
+// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
+// However, it is not slated for removal any time soon
+jQuery.proxy = function( fn, context ) {
+	var tmp, args, proxy;
+
+	if ( typeof context === "string" ) {
+		tmp = fn[ context ];
+		context = fn;
+		fn = tmp;
+	}
+
+	// Quick check to determine if target is callable, in the spec
+	// this throws a TypeError, but we will just return undefined.
+	if ( !isFunction( fn ) ) {
+		return undefined;
+	}
+
+	// Simulated bind
+	args = slice.call( arguments, 2 );
+	proxy = function() {
+		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+	};
+
+	// Set the guid of unique handler to the same of original handler, so it can be removed
+	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+	return proxy;
+};
+
+jQuery.holdReady = function( hold ) {
+	if ( hold ) {
+		jQuery.readyWait++;
+	} else {
+		jQuery.ready( true );
+	}
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+jQuery.isFunction = isFunction;
+jQuery.isWindow = isWindow;
+jQuery.camelCase = camelCase;
+jQuery.type = toType;
+
+jQuery.now = Date.now;
+
+jQuery.isNumeric = function( obj ) {
+
+	// As of jQuery 3.0, isNumeric is limited to
+	// strings and numbers (primitives or objects)
+	// that can be coerced to finite numbers (gh-2662)
+	var type = jQuery.type( obj );
+	return ( type === "number" || type === "string" ) &&
+
+		// parseFloat NaNs numeric-cast false positives ("")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		!isNaN( obj - parseFloat( obj ) );
+};
+
+jQuery.trim = function( text ) {
+	return text == null ?
+		"" :
+		( text + "" ).replace( rtrim, "" );
+};
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( typeof noGlobal === "undefined" ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/jquery.js b/VimbaX/doc/VmbC_Function_Reference/_static/jquery.js
new file mode 100644
index 0000000000000000000000000000000000000000..b0614034ad3a95e4ae9f53c2b015eeb3e8d68bde
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/jquery.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/js/badge_only.js b/VimbaX/doc/VmbC_Function_Reference/_static/js/badge_only.js
new file mode 100644
index 0000000000000000000000000000000000000000..526d7234b6538603393d419ae2330b3fd6e57ee8
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/js/badge_only.js
@@ -0,0 +1 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/js/html5shiv-printshiv.min.js b/VimbaX/doc/VmbC_Function_Reference/_static/js/html5shiv-printshiv.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b43bd062e9689f9f4016931d08e7143d555539d
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/js/html5shiv-printshiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/js/html5shiv.min.js b/VimbaX/doc/VmbC_Function_Reference/_static/js/html5shiv.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd1c674f5e3a290a12386156500df3c50903a46b
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/js/html5shiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/js/theme.js b/VimbaX/doc/VmbC_Function_Reference/_static/js/theme.js
new file mode 100644
index 0000000000000000000000000000000000000000..1fddb6ee4a60f30b4a4c4b3ad1f1604043f77981
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/js/theme.js
@@ -0,0 +1 @@
+!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),n("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),n("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n('<button class="toctree-expand" title="Open/close menu"></button>'),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e,t){var i=(new Date).getTime(),o=Math.max(0,16-(i-n)),r=window.setTimeout((function(){e(i+o)}),o);return n=i+o,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()}).call(window)},function(n,e){n.exports=jQuery},function(n,e,t){}]);
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/language_data.js b/VimbaX/doc/VmbC_Function_Reference/_static/language_data.js
new file mode 100644
index 0000000000000000000000000000000000000000..ebe2f03bf03b7f72481f8f483039ef9b7013f062
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/language_data.js
@@ -0,0 +1,297 @@
+/*
+ * language_data.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * This script contains the language-specific data used by searchtools.js,
+ * namely the list of stopwords, stemmer, scorer and splitter.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
+
+
+/* Non-minified version is copied as a separate JS file, is available */
+
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
+
+
+
+var splitChars = (function() {
+    var result = {};
+    var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
+         1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
+         2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
+         2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
+         3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
+         3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
+         4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
+         8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
+         11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
+         43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
+    var i, j, start, end;
+    for (i = 0; i < singles.length; i++) {
+        result[singles[i]] = true;
+    }
+    var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
+         [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
+         [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
+         [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
+         [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
+         [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
+         [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
+         [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
+         [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
+         [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
+         [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
+         [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
+         [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
+         [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
+         [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
+         [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
+         [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
+         [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
+         [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
+         [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
+         [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
+         [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
+         [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
+         [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
+         [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
+         [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
+         [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
+         [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
+         [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
+         [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
+         [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
+         [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
+         [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
+         [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
+         [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
+         [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
+         [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
+         [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
+         [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
+         [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
+         [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
+         [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
+         [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
+         [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
+         [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
+         [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
+         [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
+         [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
+         [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
+    for (i = 0; i < ranges.length; i++) {
+        start = ranges[i][0];
+        end = ranges[i][1];
+        for (j = start; j <= end; j++) {
+            result[j] = true;
+        }
+    }
+    return result;
+})();
+
+function splitQuery(query) {
+    var result = [];
+    var start = -1;
+    for (var i = 0; i < query.length; i++) {
+        if (splitChars[query.charCodeAt(i)]) {
+            if (start !== -1) {
+                result.push(query.slice(start, i));
+                start = -1;
+            }
+        } else if (start === -1) {
+            start = i;
+        }
+    }
+    if (start !== -1) {
+        result.push(query.slice(start));
+    }
+    return result;
+}
+
+
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/minus.png b/VimbaX/doc/VmbC_Function_Reference/_static/minus.png
new file mode 100644
index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/minus.png differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/plus.png b/VimbaX/doc/VmbC_Function_Reference/_static/plus.png
new file mode 100644
index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/_static/plus.png differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/pygments.css b/VimbaX/doc/VmbC_Function_Reference/_static/pygments.css
new file mode 100644
index 0000000000000000000000000000000000000000..08bec689d3306e6c13d1973f61a01bee9a307e87
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/pygments.css
@@ -0,0 +1,74 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #9C6500 } /* Comment.Preproc */
+.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #E40000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #008400 } /* Generic.Inserted */
+.highlight .go { color: #717171 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #687822 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #767600 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #666666 } /* Literal.Number.Bin */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0000FF } /* Name.Function.Magic */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .vm { color: #19177C } /* Name.Variable.Magic */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/pygments_new.css b/VimbaX/doc/VmbC_Function_Reference/_static/pygments_new.css
new file mode 100644
index 0000000000000000000000000000000000000000..feced5a969a074d6abb8d67c0f279d43d1558bb3
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/pygments_new.css
@@ -0,0 +1,69 @@
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #f8f8f8; }
+.highlight .c { color: #308000; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #308000; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #308000; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
+.highlight .cpf { color: #308000; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #308000; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #308000; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #7D9029 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #A0A000 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #666666 } /* Literal.Number.Bin */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0000FF } /* Name.Function.Magic */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .vm { color: #19177C } /* Name.Variable.Magic */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/searchtools.js b/VimbaX/doc/VmbC_Function_Reference/_static/searchtools.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a44e8582f6eda32047831d454c09eced81622d2
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/searchtools.js
@@ -0,0 +1,525 @@
+/*
+ * searchtools.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for the full-text search.
+ *
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+if (!Scorer) {
+  /**
+   * Simple result scoring code.
+   */
+  var Scorer = {
+    // Implement the following function to further tweak the score for each result
+    // The function takes a result array [filename, title, anchor, descr, score]
+    // and returns the new score.
+    /*
+    score: function(result) {
+      return result[4];
+    },
+    */
+
+    // query matches the full name of an object
+    objNameMatch: 11,
+    // or matches in the last dotted part of the object name
+    objPartialMatch: 6,
+    // Additive scores depending on the priority of the object
+    objPrio: {0:  15,   // used to be importantResults
+              1:  5,   // used to be objectResults
+              2: -5},  // used to be unimportantResults
+    //  Used when the priority is not in the mapping.
+    objPrioDefault: 0,
+
+    // query found in title
+    title: 15,
+    partialTitle: 7,
+    // query found in terms
+    term: 5,
+    partialTerm: 2
+  };
+}
+
+if (!splitQuery) {
+  function splitQuery(query) {
+    return query.split(/\s+/);
+  }
+}
+
+/**
+ * Search Module
+ */
+var Search = {
+
+  _index : null,
+  _queued_query : null,
+  _pulse_status : -1,
+
+  htmlToText : function(htmlString) {
+      var virtualDocument = document.implementation.createHTMLDocument('virtual');
+      var htmlElement = $(htmlString, virtualDocument);
+      htmlElement.find('.headerlink').remove();
+      docContent = htmlElement.find('[role=main]')[0];
+      if(docContent === undefined) {
+          console.warn("Content block not found. Sphinx search tries to obtain it " +
+                       "via '[role=main]'. Could you check your theme or template.");
+          return "";
+      }
+      return docContent.textContent || docContent.innerText;
+  },
+
+  init : function() {
+      var params = $.getQueryParameters();
+      if (params.q) {
+          var query = params.q[0];
+          $('input[name="q"]')[0].value = query;
+          this.performSearch(query);
+      }
+  },
+
+  loadIndex : function(url) {
+    $.ajax({type: "GET", url: url, data: null,
+            dataType: "script", cache: true,
+            complete: function(jqxhr, textstatus) {
+              if (textstatus != "success") {
+                document.getElementById("searchindexloader").src = url;
+              }
+            }});
+  },
+
+  setIndex : function(index) {
+    var q;
+    this._index = index;
+    if ((q = this._queued_query) !== null) {
+      this._queued_query = null;
+      Search.query(q);
+    }
+  },
+
+  hasIndex : function() {
+      return this._index !== null;
+  },
+
+  deferQuery : function(query) {
+      this._queued_query = query;
+  },
+
+  stopPulse : function() {
+      this._pulse_status = 0;
+  },
+
+  startPulse : function() {
+    if (this._pulse_status >= 0)
+        return;
+    function pulse() {
+      var i;
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      var dotString = '';
+      for (i = 0; i < Search._pulse_status; i++)
+        dotString += '.';
+      Search.dots.text(dotString);
+      if (Search._pulse_status > -1)
+        window.setTimeout(pulse, 500);
+    }
+    pulse();
+  },
+
+  /**
+   * perform a search for something (or wait until index is loaded)
+   */
+  performSearch : function(query) {
+    // create the required interface elements
+    this.out = $('#search-results');
+    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
+    this.dots = $('<span></span>').appendTo(this.title);
+    this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
+    this.output = $('<ul class="search"/>').appendTo(this.out);
+
+    $('#search-progress').text(_('Preparing search...'));
+    this.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (this.hasIndex())
+      this.query(query);
+    else
+      this.deferQuery(query);
+  },
+
+  /**
+   * execute search (requires search index to be loaded)
+   */
+  query : function(query) {
+    var i;
+
+    // stem the searchterms and add them to the correct list
+    var stemmer = new Stemmer();
+    var searchterms = [];
+    var excluded = [];
+    var hlterms = [];
+    var tmp = splitQuery(query);
+    var objectterms = [];
+    for (i = 0; i < tmp.length; i++) {
+      if (tmp[i] !== "") {
+          objectterms.push(tmp[i].toLowerCase());
+      }
+
+      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
+        // skip this "word"
+        continue;
+      }
+      // stem the word
+      var word = stemmer.stemWord(tmp[i].toLowerCase());
+      var toAppend;
+      // select the correct list
+      if (word[0] == '-') {
+        toAppend = excluded;
+        word = word.substr(1);
+      }
+      else {
+        toAppend = searchterms;
+        hlterms.push(tmp[i].toLowerCase());
+      }
+      // only add if not already in the list
+      if (!$u.contains(toAppend, word))
+        toAppend.push(word);
+    }
+    var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
+
+    // console.debug('SEARCH: searching for:');
+    // console.info('required: ', searchterms);
+    // console.info('excluded: ', excluded);
+
+    // prepare search
+    var terms = this._index.terms;
+    var titleterms = this._index.titleterms;
+
+    // array of [filename, title, anchor, descr, score]
+    var results = [];
+    $('#search-progress').empty();
+
+    // lookup as object
+    for (i = 0; i < objectterms.length; i++) {
+      var others = [].concat(objectterms.slice(0, i),
+                             objectterms.slice(i+1, objectterms.length));
+      results = results.concat(this.performObjectSearch(objectterms[i], others));
+    }
+
+    // lookup as search terms in fulltext
+    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
+
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) {
+      for (i = 0; i < results.length; i++)
+        results[i][4] = Scorer.score(results[i]);
+    }
+
+    // now sort the results by score (in opposite order of appearance, since the
+    // display function below uses pop() to retrieve items) and then
+    // alphabetically
+    results.sort(function(a, b) {
+      var left = a[4];
+      var right = b[4];
+      if (left > right) {
+        return 1;
+      } else if (left < right) {
+        return -1;
+      } else {
+        // same score: sort alphabetically
+        left = a[1].toLowerCase();
+        right = b[1].toLowerCase();
+        return (left > right) ? -1 : ((left < right) ? 1 : 0);
+      }
+    });
+
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    //console.info('search results:', Search.lastresults);
+
+    // print the results
+    var resultCount = results.length;
+    function displayNextItem() {
+      // results left, load the summary and display it
+      if (results.length) {
+        var item = results.pop();
+        var listItem = $('<li></li>');
+        var requestUrl = "";
+        var linkUrl = "";
+        if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
+          // dirhtml builder
+          var dirname = item[0] + '/';
+          if (dirname.match(/\/index\/$/)) {
+            dirname = dirname.substring(0, dirname.length-6);
+          } else if (dirname == 'index/') {
+            dirname = '';
+          }
+          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
+          linkUrl = requestUrl;
+
+        } else {
+          // normal html builders
+          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+          linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
+        }
+        listItem.append($('<a/>').attr('href',
+            linkUrl +
+            highlightstring + item[2]).html(item[1]));
+        if (item[3]) {
+          listItem.append($('<span> (' + item[3] + ')</span>'));
+          Search.output.append(listItem);
+          setTimeout(function() {
+            displayNextItem();
+          }, 5);
+        } else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) {
+          $.ajax({url: requestUrl,
+                  dataType: "text",
+                  complete: function(jqxhr, textstatus) {
+                    var data = jqxhr.responseText;
+                    if (data !== '' && data !== undefined) {
+                      var summary = Search.makeSearchSummary(data, searchterms, hlterms);
+                      if (summary) {
+                        listItem.append(summary);
+                      }
+                    }
+                    Search.output.append(listItem);
+                    setTimeout(function() {
+                      displayNextItem();
+                    }, 5);
+                  }});
+        } else {
+          // just display title
+          Search.output.append(listItem);
+          setTimeout(function() {
+            displayNextItem();
+          }, 5);
+        }
+      }
+      // search finished, update title and status message
+      else {
+        Search.stopPulse();
+        Search.title.text(_('Search Results'));
+        if (!resultCount)
+          Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
+        else
+            Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
+        Search.status.fadeIn(500);
+      }
+    }
+    displayNextItem();
+  },
+
+  /**
+   * search for object names
+   */
+  performObjectSearch : function(object, otherterms) {
+    var filenames = this._index.filenames;
+    var docnames = this._index.docnames;
+    var objects = this._index.objects;
+    var objnames = this._index.objnames;
+    var titles = this._index.titles;
+
+    var i;
+    var results = [];
+
+    for (var prefix in objects) {
+      for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
+        var match = objects[prefix][iMatch];
+        var name = match[4];
+        var fullname = (prefix ? prefix + '.' : '') + name;
+        var fullnameLower = fullname.toLowerCase()
+        if (fullnameLower.indexOf(object) > -1) {
+          var score = 0;
+          var parts = fullnameLower.split('.');
+          // check for different match types: exact matches of full name or
+          // "last name" (i.e. last dotted part)
+          if (fullnameLower == object || parts[parts.length - 1] == object) {
+            score += Scorer.objNameMatch;
+          // matches in last name
+          } else if (parts[parts.length - 1].indexOf(object) > -1) {
+            score += Scorer.objPartialMatch;
+          }
+          var objname = objnames[match[1]][2];
+          var title = titles[match[0]];
+          // If more than one term searched for, we require other words to be
+          // found in the name/title/description
+          if (otherterms.length > 0) {
+            var haystack = (prefix + ' ' + name + ' ' +
+                            objname + ' ' + title).toLowerCase();
+            var allfound = true;
+            for (i = 0; i < otherterms.length; i++) {
+              if (haystack.indexOf(otherterms[i]) == -1) {
+                allfound = false;
+                break;
+              }
+            }
+            if (!allfound) {
+              continue;
+            }
+          }
+          var descr = objname + _(', in ') + title;
+
+          var anchor = match[3];
+          if (anchor === '')
+            anchor = fullname;
+          else if (anchor == '-')
+            anchor = objnames[match[1]][1] + '-' + fullname;
+          // add custom score for some objects according to scorer
+          if (Scorer.objPrio.hasOwnProperty(match[2])) {
+            score += Scorer.objPrio[match[2]];
+          } else {
+            score += Scorer.objPrioDefault;
+          }
+          results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
+        }
+      }
+    }
+
+    return results;
+  },
+
+  /**
+   * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+   */
+  escapeRegExp : function(string) {
+    return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+  },
+
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch : function(searchterms, excluded, terms, titleterms) {
+    var docnames = this._index.docnames;
+    var filenames = this._index.filenames;
+    var titles = this._index.titles;
+
+    var i, j, file;
+    var fileMap = {};
+    var scoreMap = {};
+    var results = [];
+
+    // perform the search on the required terms
+    for (i = 0; i < searchterms.length; i++) {
+      var word = searchterms[i];
+      var files = [];
+      var _o = [
+        {files: terms[word], score: Scorer.term},
+        {files: titleterms[word], score: Scorer.title}
+      ];
+      // add support for partial matches
+      if (word.length > 2) {
+        var word_regex = this.escapeRegExp(word);
+        for (var w in terms) {
+          if (w.match(word_regex) && !terms[word]) {
+            _o.push({files: terms[w], score: Scorer.partialTerm})
+          }
+        }
+        for (var w in titleterms) {
+          if (w.match(word_regex) && !titleterms[word]) {
+              _o.push({files: titleterms[w], score: Scorer.partialTitle})
+          }
+        }
+      }
+
+      // no match but word was a required one
+      if ($u.every(_o, function(o){return o.files === undefined;})) {
+        break;
+      }
+      // found search word in contents
+      $u.each(_o, function(o) {
+        var _files = o.files;
+        if (_files === undefined)
+          return
+
+        if (_files.length === undefined)
+          _files = [_files];
+        files = files.concat(_files);
+
+        // set score for the word in each file to Scorer.term
+        for (j = 0; j < _files.length; j++) {
+          file = _files[j];
+          if (!(file in scoreMap))
+            scoreMap[file] = {};
+          scoreMap[file][word] = o.score;
+        }
+      });
+
+      // create the mapping
+      for (j = 0; j < files.length; j++) {
+        file = files[j];
+        if (file in fileMap && fileMap[file].indexOf(word) === -1)
+          fileMap[file].push(word);
+        else
+          fileMap[file] = [word];
+      }
+    }
+
+    // now check if the files don't contain excluded terms
+    for (file in fileMap) {
+      var valid = true;
+
+      // check if all requirements are matched
+      var filteredTermCount = // as search terms with length < 3 are discarded: ignore
+        searchterms.filter(function(term){return term.length > 2}).length
+      if (
+        fileMap[file].length != searchterms.length &&
+        fileMap[file].length != filteredTermCount
+      ) continue;
+
+      // ensure that none of the excluded terms is in the search result
+      for (i = 0; i < excluded.length; i++) {
+        if (terms[excluded[i]] == file ||
+            titleterms[excluded[i]] == file ||
+            $u.contains(terms[excluded[i]] || [], file) ||
+            $u.contains(titleterms[excluded[i]] || [], file)) {
+          valid = false;
+          break;
+        }
+      }
+
+      // if we have still a valid result we can add it to the result list
+      if (valid) {
+        // select one (max) score for the file.
+        // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
+        var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
+        results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
+      }
+    }
+    return results;
+  },
+
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words, hlwords is the list of normal, unstemmed
+   * words. the first one is used to find the occurrence, the
+   * latter for highlighting it.
+   */
+  makeSearchSummary : function(htmlText, keywords, hlwords) {
+    var text = Search.htmlToText(htmlText);
+    if (text == "") {
+      return null;
+    }
+    var textLower = text.toLowerCase();
+    var start = 0;
+    $.each(keywords, function() {
+      var i = textLower.indexOf(this.toLowerCase());
+      if (i > -1)
+        start = i;
+    });
+    start = Math.max(start - 120, 0);
+    var excerpt = ((start > 0) ? '...' : '') +
+      $.trim(text.substr(start, 240)) +
+      ((start + 240 - text.length) ? '...' : '');
+    var rv = $('<p class="context"></p>').text(excerpt);
+    $.each(hlwords, function() {
+      rv = rv.highlightText(this, 'highlighted');
+    });
+    return rv;
+  }
+};
+
+$(document).ready(function() {
+  Search.init();
+});
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/underscore-1.13.1.js b/VimbaX/doc/VmbC_Function_Reference/_static/underscore-1.13.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..ffd77af9648a47d389f2d6976d4aa1c44d7ce7ce
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/underscore-1.13.1.js
@@ -0,0 +1,2042 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define('underscore', factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
+    var current = global._;
+    var exports = global._ = factory();
+    exports.noConflict = function () { global._ = current; return exports; };
+  }()));
+}(this, (function () {
+  //     Underscore.js 1.13.1
+  //     https://underscorejs.org
+  //     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
+  //     Underscore may be freely distributed under the MIT license.
+
+  // Current version.
+  var VERSION = '1.13.1';
+
+  // Establish the root object, `window` (`self`) in the browser, `global`
+  // on the server, or `this` in some virtual machines. We use `self`
+  // instead of `window` for `WebWorker` support.
+  var root = typeof self == 'object' && self.self === self && self ||
+            typeof global == 'object' && global.global === global && global ||
+            Function('return this')() ||
+            {};
+
+  // Save bytes in the minified (but not gzipped) version:
+  var ArrayProto = Array.prototype, ObjProto = Object.prototype;
+  var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
+
+  // Create quick reference variables for speed access to core prototypes.
+  var push = ArrayProto.push,
+      slice = ArrayProto.slice,
+      toString = ObjProto.toString,
+      hasOwnProperty = ObjProto.hasOwnProperty;
+
+  // Modern feature detection.
+  var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
+      supportsDataView = typeof DataView !== 'undefined';
+
+  // All **ECMAScript 5+** native function implementations that we hope to use
+  // are declared here.
+  var nativeIsArray = Array.isArray,
+      nativeKeys = Object.keys,
+      nativeCreate = Object.create,
+      nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;
+
+  // Create references to these builtin functions because we override them.
+  var _isNaN = isNaN,
+      _isFinite = isFinite;
+
+  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
+  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
+    'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
+
+  // The largest integer that can be represented exactly.
+  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
+
+  // Some functions take a variable number of arguments, or a few expected
+  // arguments at the beginning and then a variable number of values to operate
+  // on. This helper accumulates all remaining arguments past the function’s
+  // argument length (or an explicit `startIndex`), into an array that becomes
+  // the last argument. Similar to ES6’s "rest parameter".
+  function restArguments(func, startIndex) {
+    startIndex = startIndex == null ? func.length - 1 : +startIndex;
+    return function() {
+      var length = Math.max(arguments.length - startIndex, 0),
+          rest = Array(length),
+          index = 0;
+      for (; index < length; index++) {
+        rest[index] = arguments[index + startIndex];
+      }
+      switch (startIndex) {
+        case 0: return func.call(this, rest);
+        case 1: return func.call(this, arguments[0], rest);
+        case 2: return func.call(this, arguments[0], arguments[1], rest);
+      }
+      var args = Array(startIndex + 1);
+      for (index = 0; index < startIndex; index++) {
+        args[index] = arguments[index];
+      }
+      args[startIndex] = rest;
+      return func.apply(this, args);
+    };
+  }
+
+  // Is a given variable an object?
+  function isObject(obj) {
+    var type = typeof obj;
+    return type === 'function' || type === 'object' && !!obj;
+  }
+
+  // Is a given value equal to null?
+  function isNull(obj) {
+    return obj === null;
+  }
+
+  // Is a given variable undefined?
+  function isUndefined(obj) {
+    return obj === void 0;
+  }
+
+  // Is a given value a boolean?
+  function isBoolean(obj) {
+    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+  }
+
+  // Is a given value a DOM element?
+  function isElement(obj) {
+    return !!(obj && obj.nodeType === 1);
+  }
+
+  // Internal function for creating a `toString`-based type tester.
+  function tagTester(name) {
+    var tag = '[object ' + name + ']';
+    return function(obj) {
+      return toString.call(obj) === tag;
+    };
+  }
+
+  var isString = tagTester('String');
+
+  var isNumber = tagTester('Number');
+
+  var isDate = tagTester('Date');
+
+  var isRegExp = tagTester('RegExp');
+
+  var isError = tagTester('Error');
+
+  var isSymbol = tagTester('Symbol');
+
+  var isArrayBuffer = tagTester('ArrayBuffer');
+
+  var isFunction = tagTester('Function');
+
+  // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old
+  // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
+  var nodelist = root.document && root.document.childNodes;
+  if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
+    isFunction = function(obj) {
+      return typeof obj == 'function' || false;
+    };
+  }
+
+  var isFunction$1 = isFunction;
+
+  var hasObjectTag = tagTester('Object');
+
+  // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.
+  // In IE 11, the most common among them, this problem also applies to
+  // `Map`, `WeakMap` and `Set`.
+  var hasStringTagBug = (
+        supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))
+      ),
+      isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));
+
+  var isDataView = tagTester('DataView');
+
+  // In IE 10 - Edge 13, we need a different heuristic
+  // to determine whether an object is a `DataView`.
+  function ie10IsDataView(obj) {
+    return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);
+  }
+
+  var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);
+
+  // Is a given value an array?
+  // Delegates to ECMA5's native `Array.isArray`.
+  var isArray = nativeIsArray || tagTester('Array');
+
+  // Internal function to check whether `key` is an own property name of `obj`.
+  function has$1(obj, key) {
+    return obj != null && hasOwnProperty.call(obj, key);
+  }
+
+  var isArguments = tagTester('Arguments');
+
+  // Define a fallback version of the method in browsers (ahem, IE < 9), where
+  // there isn't any inspectable "Arguments" type.
+  (function() {
+    if (!isArguments(arguments)) {
+      isArguments = function(obj) {
+        return has$1(obj, 'callee');
+      };
+    }
+  }());
+
+  var isArguments$1 = isArguments;
+
+  // Is a given object a finite number?
+  function isFinite$1(obj) {
+    return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));
+  }
+
+  // Is the given value `NaN`?
+  function isNaN$1(obj) {
+    return isNumber(obj) && _isNaN(obj);
+  }
+
+  // Predicate-generating function. Often useful outside of Underscore.
+  function constant(value) {
+    return function() {
+      return value;
+    };
+  }
+
+  // Common internal logic for `isArrayLike` and `isBufferLike`.
+  function createSizePropertyCheck(getSizeProperty) {
+    return function(collection) {
+      var sizeProperty = getSizeProperty(collection);
+      return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;
+    }
+  }
+
+  // Internal helper to generate a function to obtain property `key` from `obj`.
+  function shallowProperty(key) {
+    return function(obj) {
+      return obj == null ? void 0 : obj[key];
+    };
+  }
+
+  // Internal helper to obtain the `byteLength` property of an object.
+  var getByteLength = shallowProperty('byteLength');
+
+  // Internal helper to determine whether we should spend extensive checks against
+  // `ArrayBuffer` et al.
+  var isBufferLike = createSizePropertyCheck(getByteLength);
+
+  // Is a given value a typed array?
+  var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;
+  function isTypedArray(obj) {
+    // `ArrayBuffer.isView` is the most future-proof, so use it when available.
+    // Otherwise, fall back on the above regular expression.
+    return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :
+                  isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));
+  }
+
+  var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);
+
+  // Internal helper to obtain the `length` property of an object.
+  var getLength = shallowProperty('length');
+
+  // Internal helper to create a simple lookup structure.
+  // `collectNonEnumProps` used to depend on `_.contains`, but this led to
+  // circular imports. `emulatedSet` is a one-off solution that only works for
+  // arrays of strings.
+  function emulatedSet(keys) {
+    var hash = {};
+    for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;
+    return {
+      contains: function(key) { return hash[key]; },
+      push: function(key) {
+        hash[key] = true;
+        return keys.push(key);
+      }
+    };
+  }
+
+  // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
+  // be iterated by `for key in ...` and thus missed. Extends `keys` in place if
+  // needed.
+  function collectNonEnumProps(obj, keys) {
+    keys = emulatedSet(keys);
+    var nonEnumIdx = nonEnumerableProps.length;
+    var constructor = obj.constructor;
+    var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;
+
+    // Constructor is a special case.
+    var prop = 'constructor';
+    if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);
+
+    while (nonEnumIdx--) {
+      prop = nonEnumerableProps[nonEnumIdx];
+      if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {
+        keys.push(prop);
+      }
+    }
+  }
+
+  // Retrieve the names of an object's own properties.
+  // Delegates to **ECMAScript 5**'s native `Object.keys`.
+  function keys(obj) {
+    if (!isObject(obj)) return [];
+    if (nativeKeys) return nativeKeys(obj);
+    var keys = [];
+    for (var key in obj) if (has$1(obj, key)) keys.push(key);
+    // Ahem, IE < 9.
+    if (hasEnumBug) collectNonEnumProps(obj, keys);
+    return keys;
+  }
+
+  // Is a given array, string, or object empty?
+  // An "empty" object has no enumerable own-properties.
+  function isEmpty(obj) {
+    if (obj == null) return true;
+    // Skip the more expensive `toString`-based type checks if `obj` has no
+    // `.length`.
+    var length = getLength(obj);
+    if (typeof length == 'number' && (
+      isArray(obj) || isString(obj) || isArguments$1(obj)
+    )) return length === 0;
+    return getLength(keys(obj)) === 0;
+  }
+
+  // Returns whether an object has a given set of `key:value` pairs.
+  function isMatch(object, attrs) {
+    var _keys = keys(attrs), length = _keys.length;
+    if (object == null) return !length;
+    var obj = Object(object);
+    for (var i = 0; i < length; i++) {
+      var key = _keys[i];
+      if (attrs[key] !== obj[key] || !(key in obj)) return false;
+    }
+    return true;
+  }
+
+  // If Underscore is called as a function, it returns a wrapped object that can
+  // be used OO-style. This wrapper holds altered versions of all functions added
+  // through `_.mixin`. Wrapped objects may be chained.
+  function _$1(obj) {
+    if (obj instanceof _$1) return obj;
+    if (!(this instanceof _$1)) return new _$1(obj);
+    this._wrapped = obj;
+  }
+
+  _$1.VERSION = VERSION;
+
+  // Extracts the result from a wrapped and chained object.
+  _$1.prototype.value = function() {
+    return this._wrapped;
+  };
+
+  // Provide unwrapping proxies for some methods used in engine operations
+  // such as arithmetic and JSON stringification.
+  _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;
+
+  _$1.prototype.toString = function() {
+    return String(this._wrapped);
+  };
+
+  // Internal function to wrap or shallow-copy an ArrayBuffer,
+  // typed array or DataView to a new view, reusing the buffer.
+  function toBufferView(bufferSource) {
+    return new Uint8Array(
+      bufferSource.buffer || bufferSource,
+      bufferSource.byteOffset || 0,
+      getByteLength(bufferSource)
+    );
+  }
+
+  // We use this string twice, so give it a name for minification.
+  var tagDataView = '[object DataView]';
+
+  // Internal recursive comparison function for `_.isEqual`.
+  function eq(a, b, aStack, bStack) {
+    // Identical objects are equal. `0 === -0`, but they aren't identical.
+    // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
+    if (a === b) return a !== 0 || 1 / a === 1 / b;
+    // `null` or `undefined` only equal to itself (strict comparison).
+    if (a == null || b == null) return false;
+    // `NaN`s are equivalent, but non-reflexive.
+    if (a !== a) return b !== b;
+    // Exhaust primitive checks
+    var type = typeof a;
+    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
+    return deepEq(a, b, aStack, bStack);
+  }
+
+  // Internal recursive comparison function for `_.isEqual`.
+  function deepEq(a, b, aStack, bStack) {
+    // Unwrap any wrapped objects.
+    if (a instanceof _$1) a = a._wrapped;
+    if (b instanceof _$1) b = b._wrapped;
+    // Compare `[[Class]]` names.
+    var className = toString.call(a);
+    if (className !== toString.call(b)) return false;
+    // Work around a bug in IE 10 - Edge 13.
+    if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {
+      if (!isDataView$1(b)) return false;
+      className = tagDataView;
+    }
+    switch (className) {
+      // These types are compared by value.
+      case '[object RegExp]':
+        // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+      case '[object String]':
+        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+        // equivalent to `new String("5")`.
+        return '' + a === '' + b;
+      case '[object Number]':
+        // `NaN`s are equivalent, but non-reflexive.
+        // Object(NaN) is equivalent to NaN.
+        if (+a !== +a) return +b !== +b;
+        // An `egal` comparison is performed for other numeric values.
+        return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+      case '[object Date]':
+      case '[object Boolean]':
+        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+        // millisecond representations. Note that invalid dates with millisecond representations
+        // of `NaN` are not equivalent.
+        return +a === +b;
+      case '[object Symbol]':
+        return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
+      case '[object ArrayBuffer]':
+      case tagDataView:
+        // Coerce to typed array so we can fall through.
+        return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);
+    }
+
+    var areArrays = className === '[object Array]';
+    if (!areArrays && isTypedArray$1(a)) {
+        var byteLength = getByteLength(a);
+        if (byteLength !== getByteLength(b)) return false;
+        if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;
+        areArrays = true;
+    }
+    if (!areArrays) {
+      if (typeof a != 'object' || typeof b != 'object') return false;
+
+      // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+      // from different frames are.
+      var aCtor = a.constructor, bCtor = b.constructor;
+      if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&
+                               isFunction$1(bCtor) && bCtor instanceof bCtor)
+                          && ('constructor' in a && 'constructor' in b)) {
+        return false;
+      }
+    }
+    // Assume equality for cyclic structures. The algorithm for detecting cyclic
+    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+
+    // Initializing stack of traversed objects.
+    // It's done here since we only need them for objects and arrays comparison.
+    aStack = aStack || [];
+    bStack = bStack || [];
+    var length = aStack.length;
+    while (length--) {
+      // Linear search. Performance is inversely proportional to the number of
+      // unique nested structures.
+      if (aStack[length] === a) return bStack[length] === b;
+    }
+
+    // Add the first object to the stack of traversed objects.
+    aStack.push(a);
+    bStack.push(b);
+
+    // Recursively compare objects and arrays.
+    if (areArrays) {
+      // Compare array lengths to determine if a deep comparison is necessary.
+      length = a.length;
+      if (length !== b.length) return false;
+      // Deep compare the contents, ignoring non-numeric properties.
+      while (length--) {
+        if (!eq(a[length], b[length], aStack, bStack)) return false;
+      }
+    } else {
+      // Deep compare objects.
+      var _keys = keys(a), key;
+      length = _keys.length;
+      // Ensure that both objects contain the same number of properties before comparing deep equality.
+      if (keys(b).length !== length) return false;
+      while (length--) {
+        // Deep compare each member
+        key = _keys[length];
+        if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
+      }
+    }
+    // Remove the first object from the stack of traversed objects.
+    aStack.pop();
+    bStack.pop();
+    return true;
+  }
+
+  // Perform a deep comparison to check if two objects are equal.
+  function isEqual(a, b) {
+    return eq(a, b);
+  }
+
+  // Retrieve all the enumerable property names of an object.
+  function allKeys(obj) {
+    if (!isObject(obj)) return [];
+    var keys = [];
+    for (var key in obj) keys.push(key);
+    // Ahem, IE < 9.
+    if (hasEnumBug) collectNonEnumProps(obj, keys);
+    return keys;
+  }
+
+  // Since the regular `Object.prototype.toString` type tests don't work for
+  // some types in IE 11, we use a fingerprinting heuristic instead, based
+  // on the methods. It's not great, but it's the best we got.
+  // The fingerprint method lists are defined below.
+  function ie11fingerprint(methods) {
+    var length = getLength(methods);
+    return function(obj) {
+      if (obj == null) return false;
+      // `Map`, `WeakMap` and `Set` have no enumerable keys.
+      var keys = allKeys(obj);
+      if (getLength(keys)) return false;
+      for (var i = 0; i < length; i++) {
+        if (!isFunction$1(obj[methods[i]])) return false;
+      }
+      // If we are testing against `WeakMap`, we need to ensure that
+      // `obj` doesn't have a `forEach` method in order to distinguish
+      // it from a regular `Map`.
+      return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);
+    };
+  }
+
+  // In the interest of compact minification, we write
+  // each string in the fingerprints only once.
+  var forEachName = 'forEach',
+      hasName = 'has',
+      commonInit = ['clear', 'delete'],
+      mapTail = ['get', hasName, 'set'];
+
+  // `Map`, `WeakMap` and `Set` each have slightly different
+  // combinations of the above sublists.
+  var mapMethods = commonInit.concat(forEachName, mapTail),
+      weakMapMethods = commonInit.concat(mapTail),
+      setMethods = ['add'].concat(commonInit, forEachName, hasName);
+
+  var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');
+
+  var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');
+
+  var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');
+
+  var isWeakSet = tagTester('WeakSet');
+
+  // Retrieve the values of an object's properties.
+  function values(obj) {
+    var _keys = keys(obj);
+    var length = _keys.length;
+    var values = Array(length);
+    for (var i = 0; i < length; i++) {
+      values[i] = obj[_keys[i]];
+    }
+    return values;
+  }
+
+  // Convert an object into a list of `[key, value]` pairs.
+  // The opposite of `_.object` with one argument.
+  function pairs(obj) {
+    var _keys = keys(obj);
+    var length = _keys.length;
+    var pairs = Array(length);
+    for (var i = 0; i < length; i++) {
+      pairs[i] = [_keys[i], obj[_keys[i]]];
+    }
+    return pairs;
+  }
+
+  // Invert the keys and values of an object. The values must be serializable.
+  function invert(obj) {
+    var result = {};
+    var _keys = keys(obj);
+    for (var i = 0, length = _keys.length; i < length; i++) {
+      result[obj[_keys[i]]] = _keys[i];
+    }
+    return result;
+  }
+
+  // Return a sorted list of the function names available on the object.
+  function functions(obj) {
+    var names = [];
+    for (var key in obj) {
+      if (isFunction$1(obj[key])) names.push(key);
+    }
+    return names.sort();
+  }
+
+  // An internal function for creating assigner functions.
+  function createAssigner(keysFunc, defaults) {
+    return function(obj) {
+      var length = arguments.length;
+      if (defaults) obj = Object(obj);
+      if (length < 2 || obj == null) return obj;
+      for (var index = 1; index < length; index++) {
+        var source = arguments[index],
+            keys = keysFunc(source),
+            l = keys.length;
+        for (var i = 0; i < l; i++) {
+          var key = keys[i];
+          if (!defaults || obj[key] === void 0) obj[key] = source[key];
+        }
+      }
+      return obj;
+    };
+  }
+
+  // Extend a given object with all the properties in passed-in object(s).
+  var extend = createAssigner(allKeys);
+
+  // Assigns a given object with all the own properties in the passed-in
+  // object(s).
+  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+  var extendOwn = createAssigner(keys);
+
+  // Fill in a given object with default properties.
+  var defaults = createAssigner(allKeys, true);
+
+  // Create a naked function reference for surrogate-prototype-swapping.
+  function ctor() {
+    return function(){};
+  }
+
+  // An internal function for creating a new object that inherits from another.
+  function baseCreate(prototype) {
+    if (!isObject(prototype)) return {};
+    if (nativeCreate) return nativeCreate(prototype);
+    var Ctor = ctor();
+    Ctor.prototype = prototype;
+    var result = new Ctor;
+    Ctor.prototype = null;
+    return result;
+  }
+
+  // Creates an object that inherits from the given prototype object.
+  // If additional properties are provided then they will be added to the
+  // created object.
+  function create(prototype, props) {
+    var result = baseCreate(prototype);
+    if (props) extendOwn(result, props);
+    return result;
+  }
+
+  // Create a (shallow-cloned) duplicate of an object.
+  function clone(obj) {
+    if (!isObject(obj)) return obj;
+    return isArray(obj) ? obj.slice() : extend({}, obj);
+  }
+
+  // Invokes `interceptor` with the `obj` and then returns `obj`.
+  // The primary purpose of this method is to "tap into" a method chain, in
+  // order to perform operations on intermediate results within the chain.
+  function tap(obj, interceptor) {
+    interceptor(obj);
+    return obj;
+  }
+
+  // Normalize a (deep) property `path` to array.
+  // Like `_.iteratee`, this function can be customized.
+  function toPath$1(path) {
+    return isArray(path) ? path : [path];
+  }
+  _$1.toPath = toPath$1;
+
+  // Internal wrapper for `_.toPath` to enable minification.
+  // Similar to `cb` for `_.iteratee`.
+  function toPath(path) {
+    return _$1.toPath(path);
+  }
+
+  // Internal function to obtain a nested property in `obj` along `path`.
+  function deepGet(obj, path) {
+    var length = path.length;
+    for (var i = 0; i < length; i++) {
+      if (obj == null) return void 0;
+      obj = obj[path[i]];
+    }
+    return length ? obj : void 0;
+  }
+
+  // Get the value of the (deep) property on `path` from `object`.
+  // If any property in `path` does not exist or if the value is
+  // `undefined`, return `defaultValue` instead.
+  // The `path` is normalized through `_.toPath`.
+  function get(object, path, defaultValue) {
+    var value = deepGet(object, toPath(path));
+    return isUndefined(value) ? defaultValue : value;
+  }
+
+  // Shortcut function for checking if an object has a given property directly on
+  // itself (in other words, not on a prototype). Unlike the internal `has`
+  // function, this public version can also traverse nested properties.
+  function has(obj, path) {
+    path = toPath(path);
+    var length = path.length;
+    for (var i = 0; i < length; i++) {
+      var key = path[i];
+      if (!has$1(obj, key)) return false;
+      obj = obj[key];
+    }
+    return !!length;
+  }
+
+  // Keep the identity function around for default iteratees.
+  function identity(value) {
+    return value;
+  }
+
+  // Returns a predicate for checking whether an object has a given set of
+  // `key:value` pairs.
+  function matcher(attrs) {
+    attrs = extendOwn({}, attrs);
+    return function(obj) {
+      return isMatch(obj, attrs);
+    };
+  }
+
+  // Creates a function that, when passed an object, will traverse that object’s
+  // properties down the given `path`, specified as an array of keys or indices.
+  function property(path) {
+    path = toPath(path);
+    return function(obj) {
+      return deepGet(obj, path);
+    };
+  }
+
+  // Internal function that returns an efficient (for current engines) version
+  // of the passed-in callback, to be repeatedly applied in other Underscore
+  // functions.
+  function optimizeCb(func, context, argCount) {
+    if (context === void 0) return func;
+    switch (argCount == null ? 3 : argCount) {
+      case 1: return function(value) {
+        return func.call(context, value);
+      };
+      // The 2-argument case is omitted because we’re not using it.
+      case 3: return function(value, index, collection) {
+        return func.call(context, value, index, collection);
+      };
+      case 4: return function(accumulator, value, index, collection) {
+        return func.call(context, accumulator, value, index, collection);
+      };
+    }
+    return function() {
+      return func.apply(context, arguments);
+    };
+  }
+
+  // An internal function to generate callbacks that can be applied to each
+  // element in a collection, returning the desired result — either `_.identity`,
+  // an arbitrary callback, a property matcher, or a property accessor.
+  function baseIteratee(value, context, argCount) {
+    if (value == null) return identity;
+    if (isFunction$1(value)) return optimizeCb(value, context, argCount);
+    if (isObject(value) && !isArray(value)) return matcher(value);
+    return property(value);
+  }
+
+  // External wrapper for our callback generator. Users may customize
+  // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
+  // This abstraction hides the internal-only `argCount` argument.
+  function iteratee(value, context) {
+    return baseIteratee(value, context, Infinity);
+  }
+  _$1.iteratee = iteratee;
+
+  // The function we call internally to generate a callback. It invokes
+  // `_.iteratee` if overridden, otherwise `baseIteratee`.
+  function cb(value, context, argCount) {
+    if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);
+    return baseIteratee(value, context, argCount);
+  }
+
+  // Returns the results of applying the `iteratee` to each element of `obj`.
+  // In contrast to `_.map` it returns an object.
+  function mapObject(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    var _keys = keys(obj),
+        length = _keys.length,
+        results = {};
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys[index];
+      results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
+    }
+    return results;
+  }
+
+  // Predicate-generating function. Often useful outside of Underscore.
+  function noop(){}
+
+  // Generates a function for a given object that returns a given property.
+  function propertyOf(obj) {
+    if (obj == null) return noop;
+    return function(path) {
+      return get(obj, path);
+    };
+  }
+
+  // Run a function **n** times.
+  function times(n, iteratee, context) {
+    var accum = Array(Math.max(0, n));
+    iteratee = optimizeCb(iteratee, context, 1);
+    for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+    return accum;
+  }
+
+  // Return a random integer between `min` and `max` (inclusive).
+  function random(min, max) {
+    if (max == null) {
+      max = min;
+      min = 0;
+    }
+    return min + Math.floor(Math.random() * (max - min + 1));
+  }
+
+  // A (possibly faster) way to get the current timestamp as an integer.
+  var now = Date.now || function() {
+    return new Date().getTime();
+  };
+
+  // Internal helper to generate functions for escaping and unescaping strings
+  // to/from HTML interpolation.
+  function createEscaper(map) {
+    var escaper = function(match) {
+      return map[match];
+    };
+    // Regexes for identifying a key that needs to be escaped.
+    var source = '(?:' + keys(map).join('|') + ')';
+    var testRegexp = RegExp(source);
+    var replaceRegexp = RegExp(source, 'g');
+    return function(string) {
+      string = string == null ? '' : '' + string;
+      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+    };
+  }
+
+  // Internal list of HTML entities for escaping.
+  var escapeMap = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#x27;',
+    '`': '&#x60;'
+  };
+
+  // Function for escaping strings to HTML interpolation.
+  var _escape = createEscaper(escapeMap);
+
+  // Internal list of HTML entities for unescaping.
+  var unescapeMap = invert(escapeMap);
+
+  // Function for unescaping strings from HTML interpolation.
+  var _unescape = createEscaper(unescapeMap);
+
+  // By default, Underscore uses ERB-style template delimiters. Change the
+  // following template settings to use alternative delimiters.
+  var templateSettings = _$1.templateSettings = {
+    evaluate: /<%([\s\S]+?)%>/g,
+    interpolate: /<%=([\s\S]+?)%>/g,
+    escape: /<%-([\s\S]+?)%>/g
+  };
+
+  // When customizing `_.templateSettings`, if you don't want to define an
+  // interpolation, evaluation or escaping regex, we need one that is
+  // guaranteed not to match.
+  var noMatch = /(.)^/;
+
+  // Certain characters need to be escaped so that they can be put into a
+  // string literal.
+  var escapes = {
+    "'": "'",
+    '\\': '\\',
+    '\r': 'r',
+    '\n': 'n',
+    '\u2028': 'u2028',
+    '\u2029': 'u2029'
+  };
+
+  var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
+
+  function escapeChar(match) {
+    return '\\' + escapes[match];
+  }
+
+  // In order to prevent third-party code injection through
+  // `_.templateSettings.variable`, we test it against the following regular
+  // expression. It is intentionally a bit more liberal than just matching valid
+  // identifiers, but still prevents possible loopholes through defaults or
+  // destructuring assignment.
+  var bareIdentifier = /^\s*(\w|\$)+\s*$/;
+
+  // JavaScript micro-templating, similar to John Resig's implementation.
+  // Underscore templating handles arbitrary delimiters, preserves whitespace,
+  // and correctly escapes quotes within interpolated code.
+  // NB: `oldSettings` only exists for backwards compatibility.
+  function template(text, settings, oldSettings) {
+    if (!settings && oldSettings) settings = oldSettings;
+    settings = defaults({}, settings, _$1.templateSettings);
+
+    // Combine delimiters into one regular expression via alternation.
+    var matcher = RegExp([
+      (settings.escape || noMatch).source,
+      (settings.interpolate || noMatch).source,
+      (settings.evaluate || noMatch).source
+    ].join('|') + '|$', 'g');
+
+    // Compile the template source, escaping string literals appropriately.
+    var index = 0;
+    var source = "__p+='";
+    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+      source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
+      index = offset + match.length;
+
+      if (escape) {
+        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+      } else if (interpolate) {
+        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+      } else if (evaluate) {
+        source += "';\n" + evaluate + "\n__p+='";
+      }
+
+      // Adobe VMs need the match returned to produce the correct offset.
+      return match;
+    });
+    source += "';\n";
+
+    var argument = settings.variable;
+    if (argument) {
+      // Insure against third-party code injection. (CVE-2021-23358)
+      if (!bareIdentifier.test(argument)) throw new Error(
+        'variable is not a bare identifier: ' + argument
+      );
+    } else {
+      // If a variable is not specified, place data values in local scope.
+      source = 'with(obj||{}){\n' + source + '}\n';
+      argument = 'obj';
+    }
+
+    source = "var __t,__p='',__j=Array.prototype.join," +
+      "print=function(){__p+=__j.call(arguments,'');};\n" +
+      source + 'return __p;\n';
+
+    var render;
+    try {
+      render = new Function(argument, '_', source);
+    } catch (e) {
+      e.source = source;
+      throw e;
+    }
+
+    var template = function(data) {
+      return render.call(this, data, _$1);
+    };
+
+    // Provide the compiled source as a convenience for precompilation.
+    template.source = 'function(' + argument + '){\n' + source + '}';
+
+    return template;
+  }
+
+  // Traverses the children of `obj` along `path`. If a child is a function, it
+  // is invoked with its parent as context. Returns the value of the final
+  // child, or `fallback` if any child is undefined.
+  function result(obj, path, fallback) {
+    path = toPath(path);
+    var length = path.length;
+    if (!length) {
+      return isFunction$1(fallback) ? fallback.call(obj) : fallback;
+    }
+    for (var i = 0; i < length; i++) {
+      var prop = obj == null ? void 0 : obj[path[i]];
+      if (prop === void 0) {
+        prop = fallback;
+        i = length; // Ensure we don't continue iterating.
+      }
+      obj = isFunction$1(prop) ? prop.call(obj) : prop;
+    }
+    return obj;
+  }
+
+  // Generate a unique integer id (unique within the entire client session).
+  // Useful for temporary DOM ids.
+  var idCounter = 0;
+  function uniqueId(prefix) {
+    var id = ++idCounter + '';
+    return prefix ? prefix + id : id;
+  }
+
+  // Start chaining a wrapped Underscore object.
+  function chain(obj) {
+    var instance = _$1(obj);
+    instance._chain = true;
+    return instance;
+  }
+
+  // Internal function to execute `sourceFunc` bound to `context` with optional
+  // `args`. Determines whether to execute a function as a constructor or as a
+  // normal function.
+  function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
+    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
+    var self = baseCreate(sourceFunc.prototype);
+    var result = sourceFunc.apply(self, args);
+    if (isObject(result)) return result;
+    return self;
+  }
+
+  // Partially apply a function by creating a version that has had some of its
+  // arguments pre-filled, without changing its dynamic `this` context. `_` acts
+  // as a placeholder by default, allowing any combination of arguments to be
+  // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
+  var partial = restArguments(function(func, boundArgs) {
+    var placeholder = partial.placeholder;
+    var bound = function() {
+      var position = 0, length = boundArgs.length;
+      var args = Array(length);
+      for (var i = 0; i < length; i++) {
+        args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
+      }
+      while (position < arguments.length) args.push(arguments[position++]);
+      return executeBound(func, bound, this, this, args);
+    };
+    return bound;
+  });
+
+  partial.placeholder = _$1;
+
+  // Create a function bound to a given object (assigning `this`, and arguments,
+  // optionally).
+  var bind = restArguments(function(func, context, args) {
+    if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');
+    var bound = restArguments(function(callArgs) {
+      return executeBound(func, bound, context, this, args.concat(callArgs));
+    });
+    return bound;
+  });
+
+  // Internal helper for collection methods to determine whether a collection
+  // should be iterated as an array or as an object.
+  // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
+  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
+  var isArrayLike = createSizePropertyCheck(getLength);
+
+  // Internal implementation of a recursive `flatten` function.
+  function flatten$1(input, depth, strict, output) {
+    output = output || [];
+    if (!depth && depth !== 0) {
+      depth = Infinity;
+    } else if (depth <= 0) {
+      return output.concat(input);
+    }
+    var idx = output.length;
+    for (var i = 0, length = getLength(input); i < length; i++) {
+      var value = input[i];
+      if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
+        // Flatten current level of array or arguments object.
+        if (depth > 1) {
+          flatten$1(value, depth - 1, strict, output);
+          idx = output.length;
+        } else {
+          var j = 0, len = value.length;
+          while (j < len) output[idx++] = value[j++];
+        }
+      } else if (!strict) {
+        output[idx++] = value;
+      }
+    }
+    return output;
+  }
+
+  // Bind a number of an object's methods to that object. Remaining arguments
+  // are the method names to be bound. Useful for ensuring that all callbacks
+  // defined on an object belong to it.
+  var bindAll = restArguments(function(obj, keys) {
+    keys = flatten$1(keys, false, false);
+    var index = keys.length;
+    if (index < 1) throw new Error('bindAll must be passed function names');
+    while (index--) {
+      var key = keys[index];
+      obj[key] = bind(obj[key], obj);
+    }
+    return obj;
+  });
+
+  // Memoize an expensive function by storing its results.
+  function memoize(func, hasher) {
+    var memoize = function(key) {
+      var cache = memoize.cache;
+      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+      if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);
+      return cache[address];
+    };
+    memoize.cache = {};
+    return memoize;
+  }
+
+  // Delays a function for the given number of milliseconds, and then calls
+  // it with the arguments supplied.
+  var delay = restArguments(function(func, wait, args) {
+    return setTimeout(function() {
+      return func.apply(null, args);
+    }, wait);
+  });
+
+  // Defers a function, scheduling it to run after the current call stack has
+  // cleared.
+  var defer = partial(delay, _$1, 1);
+
+  // Returns a function, that, when invoked, will only be triggered at most once
+  // during a given window of time. Normally, the throttled function will run
+  // as much as it can, without ever going more than once per `wait` duration;
+  // but if you'd like to disable the execution on the leading edge, pass
+  // `{leading: false}`. To disable execution on the trailing edge, ditto.
+  function throttle(func, wait, options) {
+    var timeout, context, args, result;
+    var previous = 0;
+    if (!options) options = {};
+
+    var later = function() {
+      previous = options.leading === false ? 0 : now();
+      timeout = null;
+      result = func.apply(context, args);
+      if (!timeout) context = args = null;
+    };
+
+    var throttled = function() {
+      var _now = now();
+      if (!previous && options.leading === false) previous = _now;
+      var remaining = wait - (_now - previous);
+      context = this;
+      args = arguments;
+      if (remaining <= 0 || remaining > wait) {
+        if (timeout) {
+          clearTimeout(timeout);
+          timeout = null;
+        }
+        previous = _now;
+        result = func.apply(context, args);
+        if (!timeout) context = args = null;
+      } else if (!timeout && options.trailing !== false) {
+        timeout = setTimeout(later, remaining);
+      }
+      return result;
+    };
+
+    throttled.cancel = function() {
+      clearTimeout(timeout);
+      previous = 0;
+      timeout = context = args = null;
+    };
+
+    return throttled;
+  }
+
+  // When a sequence of calls of the returned function ends, the argument
+  // function is triggered. The end of a sequence is defined by the `wait`
+  // parameter. If `immediate` is passed, the argument function will be
+  // triggered at the beginning of the sequence instead of at the end.
+  function debounce(func, wait, immediate) {
+    var timeout, previous, args, result, context;
+
+    var later = function() {
+      var passed = now() - previous;
+      if (wait > passed) {
+        timeout = setTimeout(later, wait - passed);
+      } else {
+        timeout = null;
+        if (!immediate) result = func.apply(context, args);
+        // This check is needed because `func` can recursively invoke `debounced`.
+        if (!timeout) args = context = null;
+      }
+    };
+
+    var debounced = restArguments(function(_args) {
+      context = this;
+      args = _args;
+      previous = now();
+      if (!timeout) {
+        timeout = setTimeout(later, wait);
+        if (immediate) result = func.apply(context, args);
+      }
+      return result;
+    });
+
+    debounced.cancel = function() {
+      clearTimeout(timeout);
+      timeout = args = context = null;
+    };
+
+    return debounced;
+  }
+
+  // Returns the first function passed as an argument to the second,
+  // allowing you to adjust arguments, run code before and after, and
+  // conditionally execute the original function.
+  function wrap(func, wrapper) {
+    return partial(wrapper, func);
+  }
+
+  // Returns a negated version of the passed-in predicate.
+  function negate(predicate) {
+    return function() {
+      return !predicate.apply(this, arguments);
+    };
+  }
+
+  // Returns a function that is the composition of a list of functions, each
+  // consuming the return value of the function that follows.
+  function compose() {
+    var args = arguments;
+    var start = args.length - 1;
+    return function() {
+      var i = start;
+      var result = args[start].apply(this, arguments);
+      while (i--) result = args[i].call(this, result);
+      return result;
+    };
+  }
+
+  // Returns a function that will only be executed on and after the Nth call.
+  function after(times, func) {
+    return function() {
+      if (--times < 1) {
+        return func.apply(this, arguments);
+      }
+    };
+  }
+
+  // Returns a function that will only be executed up to (but not including) the
+  // Nth call.
+  function before(times, func) {
+    var memo;
+    return function() {
+      if (--times > 0) {
+        memo = func.apply(this, arguments);
+      }
+      if (times <= 1) func = null;
+      return memo;
+    };
+  }
+
+  // Returns a function that will be executed at most one time, no matter how
+  // often you call it. Useful for lazy initialization.
+  var once = partial(before, 2);
+
+  // Returns the first key on an object that passes a truth test.
+  function findKey(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = keys(obj), key;
+    for (var i = 0, length = _keys.length; i < length; i++) {
+      key = _keys[i];
+      if (predicate(obj[key], key, obj)) return key;
+    }
+  }
+
+  // Internal function to generate `_.findIndex` and `_.findLastIndex`.
+  function createPredicateIndexFinder(dir) {
+    return function(array, predicate, context) {
+      predicate = cb(predicate, context);
+      var length = getLength(array);
+      var index = dir > 0 ? 0 : length - 1;
+      for (; index >= 0 && index < length; index += dir) {
+        if (predicate(array[index], index, array)) return index;
+      }
+      return -1;
+    };
+  }
+
+  // Returns the first index on an array-like that passes a truth test.
+  var findIndex = createPredicateIndexFinder(1);
+
+  // Returns the last index on an array-like that passes a truth test.
+  var findLastIndex = createPredicateIndexFinder(-1);
+
+  // Use a comparator function to figure out the smallest index at which
+  // an object should be inserted so as to maintain order. Uses binary search.
+  function sortedIndex(array, obj, iteratee, context) {
+    iteratee = cb(iteratee, context, 1);
+    var value = iteratee(obj);
+    var low = 0, high = getLength(array);
+    while (low < high) {
+      var mid = Math.floor((low + high) / 2);
+      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
+    }
+    return low;
+  }
+
+  // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.
+  function createIndexFinder(dir, predicateFind, sortedIndex) {
+    return function(array, item, idx) {
+      var i = 0, length = getLength(array);
+      if (typeof idx == 'number') {
+        if (dir > 0) {
+          i = idx >= 0 ? idx : Math.max(idx + length, i);
+        } else {
+          length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
+        }
+      } else if (sortedIndex && idx && length) {
+        idx = sortedIndex(array, item);
+        return array[idx] === item ? idx : -1;
+      }
+      if (item !== item) {
+        idx = predicateFind(slice.call(array, i, length), isNaN$1);
+        return idx >= 0 ? idx + i : -1;
+      }
+      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
+        if (array[idx] === item) return idx;
+      }
+      return -1;
+    };
+  }
+
+  // Return the position of the first occurrence of an item in an array,
+  // or -1 if the item is not included in the array.
+  // If the array is large and already in sort order, pass `true`
+  // for **isSorted** to use binary search.
+  var indexOf = createIndexFinder(1, findIndex, sortedIndex);
+
+  // Return the position of the last occurrence of an item in an array,
+  // or -1 if the item is not included in the array.
+  var lastIndexOf = createIndexFinder(-1, findLastIndex);
+
+  // Return the first value which passes a truth test.
+  function find(obj, predicate, context) {
+    var keyFinder = isArrayLike(obj) ? findIndex : findKey;
+    var key = keyFinder(obj, predicate, context);
+    if (key !== void 0 && key !== -1) return obj[key];
+  }
+
+  // Convenience version of a common use case of `_.find`: getting the first
+  // object containing specific `key:value` pairs.
+  function findWhere(obj, attrs) {
+    return find(obj, matcher(attrs));
+  }
+
+  // The cornerstone for collection functions, an `each`
+  // implementation, aka `forEach`.
+  // Handles raw objects in addition to array-likes. Treats all
+  // sparse array-likes as if they were dense.
+  function each(obj, iteratee, context) {
+    iteratee = optimizeCb(iteratee, context);
+    var i, length;
+    if (isArrayLike(obj)) {
+      for (i = 0, length = obj.length; i < length; i++) {
+        iteratee(obj[i], i, obj);
+      }
+    } else {
+      var _keys = keys(obj);
+      for (i = 0, length = _keys.length; i < length; i++) {
+        iteratee(obj[_keys[i]], _keys[i], obj);
+      }
+    }
+    return obj;
+  }
+
+  // Return the results of applying the iteratee to each element.
+  function map(obj, iteratee, context) {
+    iteratee = cb(iteratee, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length,
+        results = Array(length);
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      results[index] = iteratee(obj[currentKey], currentKey, obj);
+    }
+    return results;
+  }
+
+  // Internal helper to create a reducing function, iterating left or right.
+  function createReduce(dir) {
+    // Wrap code that reassigns argument variables in a separate function than
+    // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
+    var reducer = function(obj, iteratee, memo, initial) {
+      var _keys = !isArrayLike(obj) && keys(obj),
+          length = (_keys || obj).length,
+          index = dir > 0 ? 0 : length - 1;
+      if (!initial) {
+        memo = obj[_keys ? _keys[index] : index];
+        index += dir;
+      }
+      for (; index >= 0 && index < length; index += dir) {
+        var currentKey = _keys ? _keys[index] : index;
+        memo = iteratee(memo, obj[currentKey], currentKey, obj);
+      }
+      return memo;
+    };
+
+    return function(obj, iteratee, memo, context) {
+      var initial = arguments.length >= 3;
+      return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
+    };
+  }
+
+  // **Reduce** builds up a single result from a list of values, aka `inject`,
+  // or `foldl`.
+  var reduce = createReduce(1);
+
+  // The right-associative version of reduce, also known as `foldr`.
+  var reduceRight = createReduce(-1);
+
+  // Return all the elements that pass a truth test.
+  function filter(obj, predicate, context) {
+    var results = [];
+    predicate = cb(predicate, context);
+    each(obj, function(value, index, list) {
+      if (predicate(value, index, list)) results.push(value);
+    });
+    return results;
+  }
+
+  // Return all the elements for which a truth test fails.
+  function reject(obj, predicate, context) {
+    return filter(obj, negate(cb(predicate)), context);
+  }
+
+  // Determine whether all of the elements pass a truth test.
+  function every(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length;
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      if (!predicate(obj[currentKey], currentKey, obj)) return false;
+    }
+    return true;
+  }
+
+  // Determine if at least one element in the object passes a truth test.
+  function some(obj, predicate, context) {
+    predicate = cb(predicate, context);
+    var _keys = !isArrayLike(obj) && keys(obj),
+        length = (_keys || obj).length;
+    for (var index = 0; index < length; index++) {
+      var currentKey = _keys ? _keys[index] : index;
+      if (predicate(obj[currentKey], currentKey, obj)) return true;
+    }
+    return false;
+  }
+
+  // Determine if the array or object contains a given item (using `===`).
+  function contains(obj, item, fromIndex, guard) {
+    if (!isArrayLike(obj)) obj = values(obj);
+    if (typeof fromIndex != 'number' || guard) fromIndex = 0;
+    return indexOf(obj, item, fromIndex) >= 0;
+  }
+
+  // Invoke a method (with arguments) on every item in a collection.
+  var invoke = restArguments(function(obj, path, args) {
+    var contextPath, func;
+    if (isFunction$1(path)) {
+      func = path;
+    } else {
+      path = toPath(path);
+      contextPath = path.slice(0, -1);
+      path = path[path.length - 1];
+    }
+    return map(obj, function(context) {
+      var method = func;
+      if (!method) {
+        if (contextPath && contextPath.length) {
+          context = deepGet(context, contextPath);
+        }
+        if (context == null) return void 0;
+        method = context[path];
+      }
+      return method == null ? method : method.apply(context, args);
+    });
+  });
+
+  // Convenience version of a common use case of `_.map`: fetching a property.
+  function pluck(obj, key) {
+    return map(obj, property(key));
+  }
+
+  // Convenience version of a common use case of `_.filter`: selecting only
+  // objects containing specific `key:value` pairs.
+  function where(obj, attrs) {
+    return filter(obj, matcher(attrs));
+  }
+
+  // Return the maximum element (or element-based computation).
+  function max(obj, iteratee, context) {
+    var result = -Infinity, lastComputed = -Infinity,
+        value, computed;
+    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+      obj = isArrayLike(obj) ? obj : values(obj);
+      for (var i = 0, length = obj.length; i < length; i++) {
+        value = obj[i];
+        if (value != null && value > result) {
+          result = value;
+        }
+      }
+    } else {
+      iteratee = cb(iteratee, context);
+      each(obj, function(v, index, list) {
+        computed = iteratee(v, index, list);
+        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+          result = v;
+          lastComputed = computed;
+        }
+      });
+    }
+    return result;
+  }
+
+  // Return the minimum element (or element-based computation).
+  function min(obj, iteratee, context) {
+    var result = Infinity, lastComputed = Infinity,
+        value, computed;
+    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+      obj = isArrayLike(obj) ? obj : values(obj);
+      for (var i = 0, length = obj.length; i < length; i++) {
+        value = obj[i];
+        if (value != null && value < result) {
+          result = value;
+        }
+      }
+    } else {
+      iteratee = cb(iteratee, context);
+      each(obj, function(v, index, list) {
+        computed = iteratee(v, index, list);
+        if (computed < lastComputed || computed === Infinity && result === Infinity) {
+          result = v;
+          lastComputed = computed;
+        }
+      });
+    }
+    return result;
+  }
+
+  // Sample **n** random values from a collection using the modern version of the
+  // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+  // If **n** is not specified, returns a single random element.
+  // The internal `guard` argument allows it to work with `_.map`.
+  function sample(obj, n, guard) {
+    if (n == null || guard) {
+      if (!isArrayLike(obj)) obj = values(obj);
+      return obj[random(obj.length - 1)];
+    }
+    var sample = isArrayLike(obj) ? clone(obj) : values(obj);
+    var length = getLength(sample);
+    n = Math.max(Math.min(n, length), 0);
+    var last = length - 1;
+    for (var index = 0; index < n; index++) {
+      var rand = random(index, last);
+      var temp = sample[index];
+      sample[index] = sample[rand];
+      sample[rand] = temp;
+    }
+    return sample.slice(0, n);
+  }
+
+  // Shuffle a collection.
+  function shuffle(obj) {
+    return sample(obj, Infinity);
+  }
+
+  // Sort the object's values by a criterion produced by an iteratee.
+  function sortBy(obj, iteratee, context) {
+    var index = 0;
+    iteratee = cb(iteratee, context);
+    return pluck(map(obj, function(value, key, list) {
+      return {
+        value: value,
+        index: index++,
+        criteria: iteratee(value, key, list)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria;
+      var b = right.criteria;
+      if (a !== b) {
+        if (a > b || a === void 0) return 1;
+        if (a < b || b === void 0) return -1;
+      }
+      return left.index - right.index;
+    }), 'value');
+  }
+
+  // An internal function used for aggregate "group by" operations.
+  function group(behavior, partition) {
+    return function(obj, iteratee, context) {
+      var result = partition ? [[], []] : {};
+      iteratee = cb(iteratee, context);
+      each(obj, function(value, index) {
+        var key = iteratee(value, index, obj);
+        behavior(result, value, key);
+      });
+      return result;
+    };
+  }
+
+  // Groups the object's values by a criterion. Pass either a string attribute
+  // to group by, or a function that returns the criterion.
+  var groupBy = group(function(result, value, key) {
+    if (has$1(result, key)) result[key].push(value); else result[key] = [value];
+  });
+
+  // Indexes the object's values by a criterion, similar to `_.groupBy`, but for
+  // when you know that your index values will be unique.
+  var indexBy = group(function(result, value, key) {
+    result[key] = value;
+  });
+
+  // Counts instances of an object that group by a certain criterion. Pass
+  // either a string attribute to count by, or a function that returns the
+  // criterion.
+  var countBy = group(function(result, value, key) {
+    if (has$1(result, key)) result[key]++; else result[key] = 1;
+  });
+
+  // Split a collection into two arrays: one whose elements all pass the given
+  // truth test, and one whose elements all do not pass the truth test.
+  var partition = group(function(result, value, pass) {
+    result[pass ? 0 : 1].push(value);
+  }, true);
+
+  // Safely create a real, live array from anything iterable.
+  var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
+  function toArray(obj) {
+    if (!obj) return [];
+    if (isArray(obj)) return slice.call(obj);
+    if (isString(obj)) {
+      // Keep surrogate pair characters together.
+      return obj.match(reStrSymbol);
+    }
+    if (isArrayLike(obj)) return map(obj, identity);
+    return values(obj);
+  }
+
+  // Return the number of elements in a collection.
+  function size(obj) {
+    if (obj == null) return 0;
+    return isArrayLike(obj) ? obj.length : keys(obj).length;
+  }
+
+  // Internal `_.pick` helper function to determine whether `key` is an enumerable
+  // property name of `obj`.
+  function keyInObj(value, key, obj) {
+    return key in obj;
+  }
+
+  // Return a copy of the object only containing the allowed properties.
+  var pick = restArguments(function(obj, keys) {
+    var result = {}, iteratee = keys[0];
+    if (obj == null) return result;
+    if (isFunction$1(iteratee)) {
+      if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
+      keys = allKeys(obj);
+    } else {
+      iteratee = keyInObj;
+      keys = flatten$1(keys, false, false);
+      obj = Object(obj);
+    }
+    for (var i = 0, length = keys.length; i < length; i++) {
+      var key = keys[i];
+      var value = obj[key];
+      if (iteratee(value, key, obj)) result[key] = value;
+    }
+    return result;
+  });
+
+  // Return a copy of the object without the disallowed properties.
+  var omit = restArguments(function(obj, keys) {
+    var iteratee = keys[0], context;
+    if (isFunction$1(iteratee)) {
+      iteratee = negate(iteratee);
+      if (keys.length > 1) context = keys[1];
+    } else {
+      keys = map(flatten$1(keys, false, false), String);
+      iteratee = function(value, key) {
+        return !contains(keys, key);
+      };
+    }
+    return pick(obj, iteratee, context);
+  });
+
+  // Returns everything but the last entry of the array. Especially useful on
+  // the arguments object. Passing **n** will return all the values in
+  // the array, excluding the last N.
+  function initial(array, n, guard) {
+    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+  }
+
+  // Get the first element of an array. Passing **n** will return the first N
+  // values in the array. The **guard** check allows it to work with `_.map`.
+  function first(array, n, guard) {
+    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
+    if (n == null || guard) return array[0];
+    return initial(array, array.length - n);
+  }
+
+  // Returns everything but the first entry of the `array`. Especially useful on
+  // the `arguments` object. Passing an **n** will return the rest N values in the
+  // `array`.
+  function rest(array, n, guard) {
+    return slice.call(array, n == null || guard ? 1 : n);
+  }
+
+  // Get the last element of an array. Passing **n** will return the last N
+  // values in the array.
+  function last(array, n, guard) {
+    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
+    if (n == null || guard) return array[array.length - 1];
+    return rest(array, Math.max(0, array.length - n));
+  }
+
+  // Trim out all falsy values from an array.
+  function compact(array) {
+    return filter(array, Boolean);
+  }
+
+  // Flatten out an array, either recursively (by default), or up to `depth`.
+  // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
+  function flatten(array, depth) {
+    return flatten$1(array, depth, false);
+  }
+
+  // Take the difference between one array and a number of other arrays.
+  // Only the elements present in just the first array will remain.
+  var difference = restArguments(function(array, rest) {
+    rest = flatten$1(rest, true, true);
+    return filter(array, function(value){
+      return !contains(rest, value);
+    });
+  });
+
+  // Return a version of the array that does not contain the specified value(s).
+  var without = restArguments(function(array, otherArrays) {
+    return difference(array, otherArrays);
+  });
+
+  // Produce a duplicate-free version of the array. If the array has already
+  // been sorted, you have the option of using a faster algorithm.
+  // The faster algorithm will not work with an iteratee if the iteratee
+  // is not a one-to-one function, so providing an iteratee will disable
+  // the faster algorithm.
+  function uniq(array, isSorted, iteratee, context) {
+    if (!isBoolean(isSorted)) {
+      context = iteratee;
+      iteratee = isSorted;
+      isSorted = false;
+    }
+    if (iteratee != null) iteratee = cb(iteratee, context);
+    var result = [];
+    var seen = [];
+    for (var i = 0, length = getLength(array); i < length; i++) {
+      var value = array[i],
+          computed = iteratee ? iteratee(value, i, array) : value;
+      if (isSorted && !iteratee) {
+        if (!i || seen !== computed) result.push(value);
+        seen = computed;
+      } else if (iteratee) {
+        if (!contains(seen, computed)) {
+          seen.push(computed);
+          result.push(value);
+        }
+      } else if (!contains(result, value)) {
+        result.push(value);
+      }
+    }
+    return result;
+  }
+
+  // Produce an array that contains the union: each distinct element from all of
+  // the passed-in arrays.
+  var union = restArguments(function(arrays) {
+    return uniq(flatten$1(arrays, true, true));
+  });
+
+  // Produce an array that contains every item shared between all the
+  // passed-in arrays.
+  function intersection(array) {
+    var result = [];
+    var argsLength = arguments.length;
+    for (var i = 0, length = getLength(array); i < length; i++) {
+      var item = array[i];
+      if (contains(result, item)) continue;
+      var j;
+      for (j = 1; j < argsLength; j++) {
+        if (!contains(arguments[j], item)) break;
+      }
+      if (j === argsLength) result.push(item);
+    }
+    return result;
+  }
+
+  // Complement of zip. Unzip accepts an array of arrays and groups
+  // each array's elements on shared indices.
+  function unzip(array) {
+    var length = array && max(array, getLength).length || 0;
+    var result = Array(length);
+
+    for (var index = 0; index < length; index++) {
+      result[index] = pluck(array, index);
+    }
+    return result;
+  }
+
+  // Zip together multiple lists into a single array -- elements that share
+  // an index go together.
+  var zip = restArguments(unzip);
+
+  // Converts lists into objects. Pass either a single array of `[key, value]`
+  // pairs, or two parallel arrays of the same length -- one of keys, and one of
+  // the corresponding values. Passing by pairs is the reverse of `_.pairs`.
+  function object(list, values) {
+    var result = {};
+    for (var i = 0, length = getLength(list); i < length; i++) {
+      if (values) {
+        result[list[i]] = values[i];
+      } else {
+        result[list[i][0]] = list[i][1];
+      }
+    }
+    return result;
+  }
+
+  // Generate an integer Array containing an arithmetic progression. A port of
+  // the native Python `range()` function. See
+  // [the Python documentation](https://docs.python.org/library/functions.html#range).
+  function range(start, stop, step) {
+    if (stop == null) {
+      stop = start || 0;
+      start = 0;
+    }
+    if (!step) {
+      step = stop < start ? -1 : 1;
+    }
+
+    var length = Math.max(Math.ceil((stop - start) / step), 0);
+    var range = Array(length);
+
+    for (var idx = 0; idx < length; idx++, start += step) {
+      range[idx] = start;
+    }
+
+    return range;
+  }
+
+  // Chunk a single array into multiple arrays, each containing `count` or fewer
+  // items.
+  function chunk(array, count) {
+    if (count == null || count < 1) return [];
+    var result = [];
+    var i = 0, length = array.length;
+    while (i < length) {
+      result.push(slice.call(array, i, i += count));
+    }
+    return result;
+  }
+
+  // Helper function to continue chaining intermediate results.
+  function chainResult(instance, obj) {
+    return instance._chain ? _$1(obj).chain() : obj;
+  }
+
+  // Add your own custom functions to the Underscore object.
+  function mixin(obj) {
+    each(functions(obj), function(name) {
+      var func = _$1[name] = obj[name];
+      _$1.prototype[name] = function() {
+        var args = [this._wrapped];
+        push.apply(args, arguments);
+        return chainResult(this, func.apply(_$1, args));
+      };
+    });
+    return _$1;
+  }
+
+  // Add all mutator `Array` functions to the wrapper.
+  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+    var method = ArrayProto[name];
+    _$1.prototype[name] = function() {
+      var obj = this._wrapped;
+      if (obj != null) {
+        method.apply(obj, arguments);
+        if ((name === 'shift' || name === 'splice') && obj.length === 0) {
+          delete obj[0];
+        }
+      }
+      return chainResult(this, obj);
+    };
+  });
+
+  // Add all accessor `Array` functions to the wrapper.
+  each(['concat', 'join', 'slice'], function(name) {
+    var method = ArrayProto[name];
+    _$1.prototype[name] = function() {
+      var obj = this._wrapped;
+      if (obj != null) obj = method.apply(obj, arguments);
+      return chainResult(this, obj);
+    };
+  });
+
+  // Named Exports
+
+  var allExports = {
+    __proto__: null,
+    VERSION: VERSION,
+    restArguments: restArguments,
+    isObject: isObject,
+    isNull: isNull,
+    isUndefined: isUndefined,
+    isBoolean: isBoolean,
+    isElement: isElement,
+    isString: isString,
+    isNumber: isNumber,
+    isDate: isDate,
+    isRegExp: isRegExp,
+    isError: isError,
+    isSymbol: isSymbol,
+    isArrayBuffer: isArrayBuffer,
+    isDataView: isDataView$1,
+    isArray: isArray,
+    isFunction: isFunction$1,
+    isArguments: isArguments$1,
+    isFinite: isFinite$1,
+    isNaN: isNaN$1,
+    isTypedArray: isTypedArray$1,
+    isEmpty: isEmpty,
+    isMatch: isMatch,
+    isEqual: isEqual,
+    isMap: isMap,
+    isWeakMap: isWeakMap,
+    isSet: isSet,
+    isWeakSet: isWeakSet,
+    keys: keys,
+    allKeys: allKeys,
+    values: values,
+    pairs: pairs,
+    invert: invert,
+    functions: functions,
+    methods: functions,
+    extend: extend,
+    extendOwn: extendOwn,
+    assign: extendOwn,
+    defaults: defaults,
+    create: create,
+    clone: clone,
+    tap: tap,
+    get: get,
+    has: has,
+    mapObject: mapObject,
+    identity: identity,
+    constant: constant,
+    noop: noop,
+    toPath: toPath$1,
+    property: property,
+    propertyOf: propertyOf,
+    matcher: matcher,
+    matches: matcher,
+    times: times,
+    random: random,
+    now: now,
+    escape: _escape,
+    unescape: _unescape,
+    templateSettings: templateSettings,
+    template: template,
+    result: result,
+    uniqueId: uniqueId,
+    chain: chain,
+    iteratee: iteratee,
+    partial: partial,
+    bind: bind,
+    bindAll: bindAll,
+    memoize: memoize,
+    delay: delay,
+    defer: defer,
+    throttle: throttle,
+    debounce: debounce,
+    wrap: wrap,
+    negate: negate,
+    compose: compose,
+    after: after,
+    before: before,
+    once: once,
+    findKey: findKey,
+    findIndex: findIndex,
+    findLastIndex: findLastIndex,
+    sortedIndex: sortedIndex,
+    indexOf: indexOf,
+    lastIndexOf: lastIndexOf,
+    find: find,
+    detect: find,
+    findWhere: findWhere,
+    each: each,
+    forEach: each,
+    map: map,
+    collect: map,
+    reduce: reduce,
+    foldl: reduce,
+    inject: reduce,
+    reduceRight: reduceRight,
+    foldr: reduceRight,
+    filter: filter,
+    select: filter,
+    reject: reject,
+    every: every,
+    all: every,
+    some: some,
+    any: some,
+    contains: contains,
+    includes: contains,
+    include: contains,
+    invoke: invoke,
+    pluck: pluck,
+    where: where,
+    max: max,
+    min: min,
+    shuffle: shuffle,
+    sample: sample,
+    sortBy: sortBy,
+    groupBy: groupBy,
+    indexBy: indexBy,
+    countBy: countBy,
+    partition: partition,
+    toArray: toArray,
+    size: size,
+    pick: pick,
+    omit: omit,
+    first: first,
+    head: first,
+    take: first,
+    initial: initial,
+    last: last,
+    rest: rest,
+    tail: rest,
+    drop: rest,
+    compact: compact,
+    flatten: flatten,
+    without: without,
+    uniq: uniq,
+    unique: uniq,
+    union: union,
+    intersection: intersection,
+    difference: difference,
+    unzip: unzip,
+    transpose: unzip,
+    zip: zip,
+    object: object,
+    range: range,
+    chunk: chunk,
+    mixin: mixin,
+    'default': _$1
+  };
+
+  // Default Export
+
+  // Add all of the Underscore functions to the wrapper object.
+  var _ = mixin(allExports);
+  // Legacy Node.js API.
+  _._ = _;
+
+  return _;
+
+})));
+//# sourceMappingURL=underscore-umd.js.map
diff --git a/VimbaX/doc/VmbC_Function_Reference/_static/underscore.js b/VimbaX/doc/VmbC_Function_Reference/_static/underscore.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf177d4285ab55fbc16406a5ec827b80e7eecd53
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/_static/underscore.js
@@ -0,0 +1,6 @@
+!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){
+//     Underscore.js 1.13.1
+//     https://underscorejs.org
+//     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
+//     Underscore may be freely distributed under the MIT license.
+var n="1.13.1",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u<t;u++)e[u]=arguments[u+r];switch(r){case 0:return n.call(this,e);case 1:return n.call(this,arguments[0],e);case 2:return n.call(this,arguments[0],arguments[1],e)}var o=Array(r+1);for(u=0;u<r;u++)o[u]=arguments[u];return o[r]=e,n.apply(this,o)}}function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}function w(n){return void 0===n}function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}function x(n){var r="[object "+n+"]";return function(n){return a.call(n)===r}}var S=x("String"),O=x("Number"),M=x("Date"),E=x("RegExp"),B=x("Error"),N=x("Symbol"),I=x("ArrayBuffer"),T=x("Function"),k=r.document&&r.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof k&&(T=function(n){return"function"==typeof n||!1});var D=T,R=x("Object"),F=l&&R(new DataView(new ArrayBuffer(8))),V="undefined"!=typeof Map&&R(new Map),P=x("DataView");var q=F?function(n){return null!=n&&D(n.getInt8)&&I(n.buffer)}:P,U=s||x("Array");function W(n,r){return null!=n&&f.call(n,r)}var z=x("Arguments");!function(){z(arguments)||(z=function(n){return W(n,"callee")})}();var L=z;function $(n){return O(n)&&y(n)}function C(n){return function(){return n}}function K(n){return function(r){var t=n(r);return"number"==typeof t&&t>=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]]=!0;return{contains:function(n){return r[n]},push:function(t){return r[t]=!0,n.push(t)}}}(r);var t=b.length,u=n.constructor,o=D(u)&&u.prototype||e,i="constructor";for(W(n,i)&&!r.contains(i)&&r.push(i);t--;)(i=b[t])in n&&n[i]!==o[i]&&!r.contains(i)&&r.push(i)}function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in n)W(n,t)&&r.push(t);return g&&Z(n,r),r}function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wrapped=n):new tn(n)}function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}tn.VERSION=n,tn.prototype.value=function(){return this._wrapped},tn.prototype.valueOf=tn.prototype.toJSON=tn.prototype.value,tn.prototype.toString=function(){return String(this._wrapped)};var un="[object DataView]";function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var o=typeof n;return("function"===o||"object"===o||"object"==typeof r)&&function n(r,t,e,o){r instanceof tn&&(r=r._wrapped);t instanceof tn&&(t=t._wrapped);var i=a.call(r);if(i!==a.call(t))return!1;if(F&&"[object Object]"==i&&q(r)){if(!q(t))return!1;i=un}switch(i){case"[object RegExp]":case"[object String]":return""+r==""+t;case"[object Number]":return+r!=+r?+t!=+t:0==+r?1/+r==1/t:+r==+t;case"[object Date]":case"[object Boolean]":return+r==+t;case"[object Symbol]":return u.valueOf.call(r)===u.valueOf.call(t);case"[object ArrayBuffer]":case un:return n(en(r),en(t),e,o)}var f="[object Array]"===i;if(!f&&X(r)){if(G(r)!==G(t))return!1;if(r.buffer===t.buffer&&r.byteOffset===t.byteOffset)return!0;f=!0}if(!f){if("object"!=typeof r||"object"!=typeof t)return!1;var c=r.constructor,l=t.constructor;if(c!==l&&!(D(c)&&c instanceof c&&D(l)&&l instanceof l)&&"constructor"in r&&"constructor"in t)return!1}o=o||[];var s=(e=e||[]).length;for(;s--;)if(e[s]===r)return o[s]===t;if(e.push(r),o.push(t),f){if((s=r.length)!==t.length)return!1;for(;s--;)if(!on(r[s],t[s],e,o))return!1}else{var p,v=nn(r);if(s=v.length,nn(t).length!==s)return!1;for(;s--;)if(p=v[s],!W(t,p)||!on(r[p],t[p],e,o))return!1}return e.pop(),o.pop(),!0}(n,r,t,e)}function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);return g&&Z(n,r),r}function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=an(t);if(Y(e))return!1;for(var u=0;u<r;u++)if(!D(t[n[u]]))return!1;return n!==hn||!D(t[cn])}}var cn="forEach",ln="has",sn=["clear","delete"],pn=["get",ln,"set"],vn=sn.concat(cn,pn),hn=sn.concat(pn),yn=["add"].concat(sn,cn,ln),dn=V?fn(vn):x("Map"),gn=V?fn(hn):x("WeakMap"),bn=V?fn(yn):x("Set"),mn=x("WeakSet");function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Object(t)),e<2||null==t)return t;for(var u=1;u<e;u++)for(var o=arguments[u],i=n(o),a=i.length,f=0;f<a;f++){var c=i[f];r&&void 0!==t[c]||(t[c]=o[c])}return t}}var xn=An(an),Sn=An(nn),On=An(an,!0);function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.prototype=n;var t=new r;return r.prototype=null,t}function En(n){return _(n)?U(n)?n.slice():xn({},n):n}function Bn(n){return U(n)?n:[n]}function Nn(n){return tn.toPath(n)}function In(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function Tn(n,r,t){var e=In(n,Nn(r));return w(e)?t:e}function kn(n){return n}function Dn(n){return n=Sn({},n),function(r){return rn(r,n)}}function Rn(n){return n=Nn(n),function(r){return In(r,n)}}function Fn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:return function(t){return n.call(r,t)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return function(){return n.apply(r,arguments)}}function Vn(n,r,t){return null==n?kn:D(n)?Fn(n,r,t):_(n)&&!U(n)?Dn(n):Rn(n)}function Pn(n,r){return Vn(n,r,1/0)}function qn(n,r,t){return tn.iteratee!==Pn?tn.iteratee(n,r):Vn(n,r,t)}function Un(){}function Wn(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}tn.toPath=Bn,tn.iteratee=Pn;var zn=Date.now||function(){return(new Date).getTime()};function Ln(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")",e=RegExp(t),u=RegExp(t,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,r):n}}var $n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a<o;a++)i[a]=r[a]===t?arguments[u++]:r[a];for(;u<arguments.length;)i.push(arguments[u++]);return nr(n,e,this,this,i)};return e}));rr.placeholder=tn;var tr=j((function(n,r,t){if(!D(n))throw new TypeError("Bind must be called on a function");var e=j((function(u){return nr(n,e,r,this,t.concat(u))}));return e})),er=K(Y);function ur(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}else r=1/0;for(var u=e.length,o=0,i=Y(n);o<i;o++){var a=n[o];if(er(a)&&(U(a)||L(a)))if(r>1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else t||(e[u++]=a)}return e}var or=j((function(n,r){var t=(r=ur(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=tr(n[e],n)}return n}));var ir=j((function(n,r,t){return setTimeout((function(){return n.apply(null,t)}),r)})),ar=rr(ir,tn,1);function fr(n){return function(){return!n.apply(this,arguments)}}function cr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function pr(n){return function(r,t,e){t=qn(t,e);for(var u=Y(r),o=n>0?0:u-1;o>=0&&o<u;o+=n)if(t(r[o],o,r))return o;return-1}}var vr=pr(1),hr=pr(-1);function yr(n,r,t,e){for(var u=(t=qn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function dr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==typeof o)n>0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o<f;o+=n)if(e[o]===u)return o;return-1}}var gr=dr(1,vr,yr),br=dr(-1,hr);function mr(n,r,t){var e=(er(n)?vr:sr)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function jr(n,r,t){var e,u;if(r=Fn(r,t),er(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=nn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function _r(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function wr(n){var r=function(r,t,e,u){var o=!er(r)&&nn(r),i=(o||r).length,a=n>0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a<i;a+=n){var f=o?o[a]:a;e=t(e,r[f],f,r)}return e};return function(n,t,e,u){var o=arguments.length>=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function Mr(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function Er(n,r,t,e){return er(n)||(n=jn(n)),("number"!=typeof t||e)&&(t=0),gr(n,r,t)>=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e>o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=Wn(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function kr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=qn(e,u),jr(t,(function(r,u){var i=e(r,u,t);n(o,r,i)})),o}}var Dr=kr((function(n,r,t){W(n,t)?n[t].push(r):n[t]=[r]})),Rr=kr((function(n,r,t){n[t]=r})),Fr=kr((function(n,r,t){W(n,t)?n[t]++:n[t]=1})),Vr=kr((function(n,r,t){n[t?0:1].push(r)}),!0),Pr=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function qr(n,r,t){return r in t}var Ur=j((function(n,r){var t={},e=r[0];if(null==n)return t;D(e)?(r.length>1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t})),Wr=j((function(n,r){var t,e=r[0];return D(e)?(e=fr(e),r.length>1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?Er(o,c)||(o.push(c),u.push(f)):Er(u,f)||u.push(f)}return u}var Gr=j((function(n){return Jr(ur(n,!0,!0))}));function Hr(n){for(var r=n&&Ir(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e]=Nr(n,e);return t}var Qr=j(Hr);function Xr(n,r){return n._chain?tn(r).chain():r}function Yr(n){return jr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototype[r]=function(){var n=[this._wrapped];return o.apply(n,arguments),Xr(this,t.apply(tn,n))}})),tn}jr(["pop","push","reverse","shift","sort","splice","unshift"],(function(n){var r=t[n];tn.prototype[n]=function(){var t=this._wrapped;return null!=t&&(r.apply(t,arguments),"shift"!==n&&"splice"!==n||0!==t.length||delete t[0]),Xr(this,t)}})),jr(["concat","join","slice"],(function(n){var r=t[n];tn.prototype[n]=function(){var n=this._wrapped;return null!=n&&(n=r.apply(n,arguments)),Xr(this,n)}}));var Zr=Yr({__proto__:null,VERSION:n,restArguments:j,isObject:_,isNull:function(n){return null===n},isUndefined:w,isBoolean:A,isElement:function(n){return!(!n||1!==n.nodeType)},isString:S,isNumber:O,isDate:M,isRegExp:E,isError:B,isSymbol:N,isArrayBuffer:I,isDataView:q,isArray:U,isFunction:D,isArguments:L,isFinite:function(n){return!N(n)&&d(n)&&!isNaN(parseFloat(n))},isNaN:$,isTypedArray:X,isEmpty:function(n){if(null==n)return!0;var r=Y(n);return"number"==typeof r&&(U(n)||S(n)||L(n))?0===r:0===Y(nn(n))},isMatch:rn,isEqual:function(n,r){return on(n,r)},isMap:dn,isWeakMap:gn,isSet:bn,isWeakSet:mn,keys:nn,allKeys:an,values:jn,pairs:function(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:_n,functions:wn,methods:wn,extend:xn,extendOwn:Sn,assign:Sn,defaults:On,create:function(n,r){var t=Mn(n);return r&&Sn(t,r),t},clone:En,tap:function(n,r){return r(n),n},get:Tn,has:function(n,r){for(var t=(r=Nn(r)).length,e=0;e<t;e++){var u=r[e];if(!W(n,u))return!1;n=n[u]}return!!t},mapObject:function(n,r,t){r=qn(r,t);for(var e=nn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},identity:kn,constant:C,noop:Un,toPath:Bn,property:Rn,propertyOf:function(n){return null==n?Un:function(r){return Tn(n,r)}},matcher:Dn,matches:Dn,times:function(n,r,t){var e=Array(Math.max(0,n));r=Fn(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:Wn,now:zn,escape:Cn,unescape:Kn,templateSettings:Jn,template:function(n,r,t){!r&&t&&(r=t),r=On({},r,tn.templateSettings);var e=RegExp([(r.escape||Gn).source,(r.interpolate||Gn).source,(r.evaluate||Gn).source].join("|")+"|$","g"),u=0,o="__p+='";n.replace(e,(function(r,t,e,i,a){return o+=n.slice(u,a).replace(Qn,Xn),u=a+r.length,t?o+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?o+="'+\n((__t=("+e+"))==null?'':__t)+\n'":i&&(o+="';\n"+i+"\n__p+='"),r})),o+="';\n";var i,a=r.variable;if(a){if(!Yn.test(a))throw new Error("variable is not a bare identifier: "+a)}else o="with(obj||{}){\n"+o+"}\n",a="obj";o="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{i=new Function(a,"_",o)}catch(n){throw n.source=o,n}var f=function(n){return i.call(this,n,tn)};return f.source="function("+a+"){\n"+o+"}",f},result:function(n,r,t){var e=(r=Nn(r)).length;if(!e)return D(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=D(o)?o.call(n):o}return n},uniqueId:function(n){var r=++Zn+"";return n?n+r:r},chain:function(n){var r=tn(n);return r._chain=!0,r},iteratee:Pn,partial:rr,bind:tr,bindAll:or,memoize:function(n,r){var t=function(e){var u=t.cache,o=""+(r?r.apply(this,arguments):e);return W(u,o)||(u[o]=n.apply(this,arguments)),u[o]};return t.cache={},t},delay:ir,defer:ar,throttle:function(n,r,t){var e,u,o,i,a=0;t||(t={});var f=function(){a=!1===t.leading?0:zn(),e=null,i=n.apply(u,o),e||(u=o=null)},c=function(){var c=zn();a||!1!==t.leading||(a=c);var l=r-(c-a);return u=this,o=arguments,l<=0||l>r?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e<o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))<i||u===1/0&&o===1/0)&&(o=n,i=u)}));return o},shuffle:function(n){return Tr(n,1/0)},sample:Tr,sortBy:function(n,r,t){var e=0;return r=qn(r,t),Nr(_r(n,(function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}})).sort((function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(t>e||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index})),"value")},groupBy:Dr,indexBy:Rr,countBy:Fr,partition:Vr,toArray:function(n){return n?U(n)?i.call(n):S(n)?n.match(Pr):er(n)?_r(n,kn):jn(n):[]},size:function(n){return null==n?0:er(n)?n.length:nn(n).length},pick:Ur,omit:Wr,first:Lr,head:Lr,take:Lr,initial:zr,last:function(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[n.length-1]:$r(n,Math.max(0,n.length-r))},rest:$r,tail:$r,drop:$r,compact:function(n){return Sr(n,Boolean)},flatten:function(n,r){return ur(n,r,!1)},without:Kr,uniq:Jr,unique:Jr,union:Gr,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=Y(n);e<u;e++){var o=n[e];if(!Er(r,o)){var i;for(i=1;i<t&&Er(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:Cr,unzip:Hr,transpose:Hr,zip:Qr,object:function(n,r){for(var t={},e=0,u=Y(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(i.call(n,e,e+=r));return t},mixin:Yr,default:tn});return Zr._=Zr,Zr}));
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/cAPIReference.html b/VimbaX/doc/VmbC_Function_Reference/cAPIReference.html
new file mode 100644
index 0000000000000000000000000000000000000000..03eaddf4438c2af38e79c91b6e5000479e1205a6
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/cAPIReference.html
@@ -0,0 +1,4798 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>VmbC C API Function Reference &mdash; VmbC 1.0.2 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="prev" title="VmbC API Function Reference" href="index.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> VmbC
+          </a>
+              <div class="version">
+                1.0.2
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">VmbC C API Function Reference</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#overview">Overview</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#api-version">API Version</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#api-initialization">API Initialization</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#transport-layer-enumeration-information">Transport Layer Enumeration &amp; Information</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#interface-enumeration-information">Interface Enumeration &amp; Information</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#camera-enumeration-information">Camera Enumeration &amp; Information</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#general-feature-functions">General Feature Functions</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#integer-feature-access">Integer Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#float-feature-access">Float Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#bool-feature-access">Bool Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#enum-feature-access">Enum Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#string-feature-access">String Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#command-feature-access">Command Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#raw-feature-access">Raw Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#chunk-data-access">Chunk Data Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#feature-invalidation">Feature Invalidation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#image-preparation-and-acquisition">Image preparation and acquisition</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#direct-access">Direct Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#load-save-settings">Load &amp; Save Settings</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#common-types-constants">Common Types &amp; Constants</a></li>
+</ul>
+</li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">VmbC</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>VmbC C API Function Reference</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vmbc-c-api-function-reference">
+<h1>VmbC C API Function Reference<a class="headerlink" href="#vmbc-c-api-function-reference" title="Permalink to this headline"></a></h1>
+<section id="overview">
+<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbVersionQuery()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbStartup()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbShutdown()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbTransportLayersList()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbInterfacesList()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCamerasList()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCameraInfoQuery()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCameraOpen()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCameraClose()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeaturesList()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureInfoQuery()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureAccessQuery()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureListSelected()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureIntGet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureIntSet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureIntRangeQuery()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureIntIncrementQuery()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureIntValidValueSetQuery()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureFloatGet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureFloatSet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureFloatRangeQuery()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureEnumGet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureEnumSet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureEnumRangeQuery()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureEnumIsAvailable()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureEnumAsInt()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureEnumAsString()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureEnumEntryGet()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureStringGet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureStringSet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureStringMaxlengthQuery()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureBoolGet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureBoolSet()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureCommandRun()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureCommandIsDone()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureRawGet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureRawSet()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureRawLengthQuery()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureInvalidationRegister()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFeatureInvalidationUnregister()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFrameAnnounce()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFrameRevoke()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbFrameRevokeAll()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCaptureStart()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCaptureEnd()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCaptureFrameQueue()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCaptureFrameWait()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCaptureQueueFlush()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbMemoryRead()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbMemoryWrite()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbRegistersRead()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbRegistersWrite()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCameraSettingsSave()</span></code>
+<code class="xref c c-func docutils literal notranslate"><span class="pre">VmbCameraSettingsLoad()</span></code></p>
+<p><code class="xref c c-func docutils literal notranslate"><span class="pre">VmbChunkDataAccess()</span></code></p>
+</section>
+<section id="api-version">
+<h2>API Version<a class="headerlink" href="#api-version" title="Permalink to this headline"></a></h2>
+<dl class="c struct">
+<dt class="sig sig-object c" id="c.VmbVersionInfo">
+<span class="target" id="structVmbVersionInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbVersionInfo</span></span></span><a class="headerlink" href="#c.VmbVersionInfo" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Version information. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbVersionInfo.major">
+<span class="target" id="structVmbVersionInfo_1a34a27a54a2493a9d83a0b266c8ed90dd"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">major</span></span></span><a class="headerlink" href="#c.VmbVersionInfo.major" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Major version number. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbVersionInfo.minor">
+<span class="target" id="structVmbVersionInfo_1a536ccd98d967e893383e6ce24432cb9f"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">minor</span></span></span><a class="headerlink" href="#c.VmbVersionInfo.minor" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Minor version number. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbVersionInfo.patch">
+<span class="target" id="structVmbVersionInfo_1a939b801973e05f81de03dd1fbc486f55"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">patch</span></span></span><a class="headerlink" href="#c.VmbVersionInfo.patch" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Patch version number. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbVersionInfo_t">
+<span class="target" id="VmbCommonTypes_8h_1a9cc294f8c37e395da2cf15d19190fef8"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbVersionInfo" title="VmbVersionInfo"><span class="n"><span class="pre">VmbVersionInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbVersionInfo_t</span></span></span><a class="headerlink" href="#c.VmbVersionInfo_t" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Version_1ga095f6915021cbd2595cc126074b69671"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbVersionQuery</span> <span class="pre">(VmbVersionInfo_t</span> <span class="pre">*versionInfo,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofVersionInfo)</span></span></dt>
+<dd><p>Retrieve the version number of VmbC. </p>
+<p>This function can be called at anytime, even before the API is initialized. All other version numbers may be queried via feature access.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>versionInfo</strong> – <strong>[out]</strong> Pointer to the struct where version information resides </p></li>
+<li><p><strong>sizeofVersionInfo</strong> – <strong>[in]</strong> Size of structure in bytes</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback.</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">versionInfo</span></code> is null. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="api-initialization">
+<h2>API Initialization<a class="headerlink" href="#api-initialization" title="Permalink to this headline"></a></h2>
+<dl class="c struct">
+<dt class="sig sig-object c" id="c.VmbCameraInfo">
+<span class="target" id="structVmbCameraInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbCameraInfo</span></span></span><a class="headerlink" href="#c.VmbCameraInfo" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Camera information. </p>
+<p>Holds read-only information about a camera. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.cameraIdString">
+<span class="target" id="structVmbCameraInfo_1abaaff803bd593e5ec7e5a1711d2f86bc"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraIdString</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.cameraIdString" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Identifier of the camera. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.cameraIdExtended">
+<span class="target" id="structVmbCameraInfo_1a4ce8aeaa6602df59e829b1ddb7fe7e4d"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraIdExtended</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.cameraIdExtended" title="Permalink to this definition"></a><br /></dt>
+<dd><p>globally unique identifier for the camera </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.cameraName">
+<span class="target" id="structVmbCameraInfo_1a10a51f5abdf8445a14dcdeeb36a4f61b"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraName</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.cameraName" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The display name of the camera. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.modelName">
+<span class="target" id="structVmbCameraInfo_1a2f85dbfe811c10613cb0481a623280d7"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">modelName</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.modelName" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Model name. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.serialString">
+<span class="target" id="structVmbCameraInfo_1ac724c560124fe166778fe559622a0b84"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">serialString</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.serialString" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Serial number. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.transportLayerHandle">
+<span class="target" id="structVmbCameraInfo_1a317ada59d63ef4630060a4ab1b719f8f"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerHandle</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.transportLayerHandle" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the related transport layer for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.interfaceHandle">
+<span class="target" id="structVmbCameraInfo_1a2fbe7ed5eec82271ba67109022fc5ac7"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">interfaceHandle</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.interfaceHandle" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the related interface for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.localDeviceHandle">
+<span class="target" id="structVmbCameraInfo_1a54735e37e55bbadfa386c701a4b6241b"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">localDeviceHandle</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.localDeviceHandle" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the related GenTL local device. NULL if the camera is not opened. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.streamHandles">
+<span class="target" id="structVmbCameraInfo_1aa758a46b402b06b0e3c3175d4ba8092e"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">streamHandles</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.streamHandles" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handles of the streams provided by the camera. NULL if the camera is not opened. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.streamCount">
+<span class="target" id="structVmbCameraInfo_1af136c70badac27cec7f4e06ae821a6cd"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">streamCount</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.streamCount" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Number of stream handles in the streamHandles array. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbCameraInfo.permittedAccess">
+<span class="target" id="structVmbCameraInfo_1ade9ea0657be84e40393a6af7e9024cf5"></span><a class="reference internal" href="#c.VmbAccessMode_t" title="VmbAccessMode_t"><span class="n"><span class="pre">VmbAccessMode_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">permittedAccess</span></span></span><a class="headerlink" href="#c.VmbCameraInfo.permittedAccess" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Permitted access modes, see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1aa0d1156f6eb619730081886bd2f4a951"><span class="std std-ref">VmbAccessModeType</span></a>. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbCameraInfo_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1ab948547f0a1e34097c98c9151f6eb68e"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbCameraInfo" title="VmbCameraInfo"><span class="n"><span class="pre">VmbCameraInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbCameraInfo_t</span></span></span><a class="headerlink" href="#c.VmbCameraInfo_t" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbStartup</span> <span class="pre">(const</span> <span class="pre">VmbFilePathChar_t</span> <span class="pre">*pathConfiguration)</span></span></dt>
+<dd><p>Initializes the VmbC API. </p>
+<p>Note: This function must be called before any VmbC function other than <a class="reference internal" href="#group__Version_1ga095f6915021cbd2595cc126074b69671"><span class="std std-ref">VmbVersionQuery()</span></a> is run.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pathConfiguration</strong> – <strong>[in]</strong> A string containing a semicolon (Windows) or colon (other os) separated list of paths. The paths contain directories to search for .cti files, paths to .cti files and optionally the path to a configuration xml file. If null is passed the parameter is the cti files found in the paths the GENICAM_GENTL{32|64}_PATH environment variable are considered</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorAlready</strong> – This function was called before and call to <a class="reference internal" href="#group__Init_1ga3adc3b7c9181e8821c6892d8e35f40ee"><span class="std std-ref">VmbShutdown</span></a> has been executed on a non-callback thread</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a callback or <a class="reference internal" href="#group__Init_1ga3adc3b7c9181e8821c6892d8e35f40ee"><span class="std std-ref">VmbShutdown</span></a> is currently running</p></li>
+<li><p><strong>VmbErrorXml</strong> – If parsing the settings xml is unsuccessful; a missing default xml file does not result in this error.</p></li>
+<li><p><strong>VmbErrorTLNotFound</strong> – A transport layer that was marked as required was not found.</p></li>
+<li><p><strong>VmbErrorNoTL</strong> – No transport layer was found on the system; note that some of the transport layers may have been filtered out via the settings file.</p></li>
+<li><p><strong>VmbErrorIO</strong> – A log file should be written according to the settings xml file, but this log file could not be opened.</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">pathConfiguration</span></code> contains only separator and whitespace chars. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Init_1ga3adc3b7c9181e8821c6892d8e35f40ee"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">void</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbShutdown</span> <span class="pre">(void)</span></span></dt>
+<dd><p>Perform a shutdown of the API. </p>
+<p>This frees some resources and deallocates all physical resources if applicable.</p>
+<p>The call is silently ignored, if executed from a callback. </p>
+</dd></dl>
+
+</section>
+<section id="transport-layer-enumeration-information">
+<h2>Transport Layer Enumeration &amp; Information<a class="headerlink" href="#transport-layer-enumeration-information" title="Permalink to this headline"></a></h2>
+<dl class="c struct">
+<dt class="sig sig-object c" id="c.VmbTransportLayerInfo">
+<span class="target" id="structVmbTransportLayerInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerInfo</span></span></span><a class="headerlink" href="#c.VmbTransportLayerInfo" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Transport layer information. </p>
+<p>Holds read-only information about a transport layer. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbTransportLayerInfo.transportLayerIdString">
+<span class="target" id="structVmbTransportLayerInfo_1a6f7e0a491e29c92453380298b6d08e68"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerIdString</span></span></span><a class="headerlink" href="#c.VmbTransportLayerInfo.transportLayerIdString" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unique id of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbTransportLayerInfo.transportLayerName">
+<span class="target" id="structVmbTransportLayerInfo_1a26b4eec68f4ca3517df698867801719e"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerName</span></span></span><a class="headerlink" href="#c.VmbTransportLayerInfo.transportLayerName" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Name of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbTransportLayerInfo.transportLayerModelName">
+<span class="target" id="structVmbTransportLayerInfo_1a289c08c21caf1fcc513bb49187b004b8"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerModelName</span></span></span><a class="headerlink" href="#c.VmbTransportLayerInfo.transportLayerModelName" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Model name of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbTransportLayerInfo.transportLayerVendor">
+<span class="target" id="structVmbTransportLayerInfo_1acac270513c7802c92b1c426f01d90e76"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerVendor</span></span></span><a class="headerlink" href="#c.VmbTransportLayerInfo.transportLayerVendor" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Vendor of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbTransportLayerInfo.transportLayerVersion">
+<span class="target" id="structVmbTransportLayerInfo_1a6de53fdc3d988b7480ec82e6a38da2c6"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerVersion</span></span></span><a class="headerlink" href="#c.VmbTransportLayerInfo.transportLayerVersion" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Version of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbTransportLayerInfo.transportLayerPath">
+<span class="target" id="structVmbTransportLayerInfo_1af9c09034fbc6b2af9839ebfe8a7e280c"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerPath</span></span></span><a class="headerlink" href="#c.VmbTransportLayerInfo.transportLayerPath" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Full path of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbTransportLayerInfo.transportLayerHandle">
+<span class="target" id="structVmbTransportLayerInfo_1a51c2eb9351de2ac2f93cc4e1097a0180"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerHandle</span></span></span><a class="headerlink" href="#c.VmbTransportLayerInfo.transportLayerHandle" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the transport layer for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbTransportLayerInfo.transportLayerType">
+<span class="target" id="structVmbTransportLayerInfo_1a0b79fd5622221aeed57ddd1e073cc34d"></span><a class="reference internal" href="#c.VmbTransportLayerType_t" title="VmbTransportLayerType_t"><span class="n"><span class="pre">VmbTransportLayerType_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerType</span></span></span><a class="headerlink" href="#c.VmbTransportLayerInfo.transportLayerType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The type of the transport layer. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbTransportLayerInfo_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1ae1a4c161eea59140be81d940f1fc3941"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbTransportLayerInfo" title="VmbTransportLayerInfo"><span class="n"><span class="pre">VmbTransportLayerInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerInfo_t</span></span></span><a class="headerlink" href="#c.VmbTransportLayerInfo_t" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__TransportLayer_1gabc5b2c212a7e04c16d7f42e4b8f65c7a"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbTransportLayersList</span> <span class="pre">(VmbTransportLayerInfo_t</span> <span class="pre">*transportLayerInfo,</span> <span class="pre">VmbUint32_t</span> <span class="pre">listLength,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*numFound,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofTransportLayerInfo)</span></span></dt>
+<dd><p>List all the transport layers that are used by the API. </p>
+<p>Note: This function is usually called twice: once with an empty array to query the length of the list, and then again with an array of the correct length.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>transportLayerInfo</strong> – <strong>[inout]</strong> Array of VmbTransportLayerInfo_t, allocated by the caller. The transport layer list is copied here. May be null. </p></li>
+<li><p><strong>listLength</strong> – <strong>[in]</strong> Number of entries in the caller’s transportLayerInfo array. </p></li>
+<li><p><strong>numFound</strong> – <strong>[inout]</strong> Number of transport layers found. May be more than listLength. </p></li>
+<li><p><strong>sizeofTransportLayerInfo</strong> – <strong>[in]</strong> Size of one VmbTransportLayerInfo_t entry (ignored if <code class="docutils literal notranslate"><span class="pre">transportLayerInfo</span></code> is null).</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInternalFault</strong> – An internal fault occurred</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – One of the transport layers does not provide the required information</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">numFound</span></code> is null</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – The given list length was insufficient to hold all available entries </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="interface-enumeration-information">
+<h2>Interface Enumeration &amp; Information<a class="headerlink" href="#interface-enumeration-information" title="Permalink to this headline"></a></h2>
+<dl class="c struct">
+<dt class="sig sig-object c" id="c.VmbInterfaceInfo">
+<span class="target" id="structVmbInterfaceInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInterfaceInfo</span></span></span><a class="headerlink" href="#c.VmbInterfaceInfo" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Interface information. </p>
+<p>Holds read-only information about an interface. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbInterfaceInfo.interfaceIdString">
+<span class="target" id="structVmbInterfaceInfo_1a47bbeaa473a4700a9d806365005a8691"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">interfaceIdString</span></span></span><a class="headerlink" href="#c.VmbInterfaceInfo.interfaceIdString" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Identifier of the interface. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbInterfaceInfo.interfaceName">
+<span class="target" id="structVmbInterfaceInfo_1aa02e95a6c0bd019f1e2323c8b93c5f54"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">interfaceName</span></span></span><a class="headerlink" href="#c.VmbInterfaceInfo.interfaceName" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Interface name, given by the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbInterfaceInfo.interfaceHandle">
+<span class="target" id="structVmbInterfaceInfo_1a9c7cbbe0b7ca6fbfb31000b096fa68d5"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">interfaceHandle</span></span></span><a class="headerlink" href="#c.VmbInterfaceInfo.interfaceHandle" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the interface for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbInterfaceInfo.transportLayerHandle">
+<span class="target" id="structVmbInterfaceInfo_1a88efd459cc32b3309d89c3c0f55fa417"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerHandle</span></span></span><a class="headerlink" href="#c.VmbInterfaceInfo.transportLayerHandle" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle of the related transport layer for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbInterfaceInfo.interfaceType">
+<span class="target" id="structVmbInterfaceInfo_1a626f06ba8366ea5c31ec9288fa7d95d3"></span><a class="reference internal" href="#c.VmbTransportLayerType_t" title="VmbTransportLayerType_t"><span class="n"><span class="pre">VmbTransportLayerType_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">interfaceType</span></span></span><a class="headerlink" href="#c.VmbInterfaceInfo.interfaceType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The technology of the interface. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbInterfaceInfo_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1af8bce4bacba54f9a115dda31af6b0f5f"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbInterfaceInfo" title="VmbInterfaceInfo"><span class="n"><span class="pre">VmbInterfaceInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInterfaceInfo_t</span></span></span><a class="headerlink" href="#c.VmbInterfaceInfo_t" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Interface_1gaff72d38f33e5efc6f9f80b65b6f9e029"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbInterfacesList</span> <span class="pre">(VmbInterfaceInfo_t</span> <span class="pre">*interfaceInfo,</span> <span class="pre">VmbUint32_t</span> <span class="pre">listLength,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*numFound,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofInterfaceInfo)</span></span></dt>
+<dd><p>List all the interfaces that are currently visible to the API. </p>
+<p>Note: All the interfaces known via GenICam transport layers are listed by this command and filled into the provided array. Interfaces may correspond to adapter cards or frame grabber cards. This function is usually called twice: once with an empty array to query the length of the list, and then again with an array of the correct length.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>interfaceInfo</strong> – <strong>[inout]</strong> Array of VmbInterfaceInfo_t, allocated by the caller. The interface list is copied here. May be null.</p></li>
+<li><p><strong>listLength</strong> – <strong>[in]</strong> Number of entries in the callers interfaceInfo array</p></li>
+<li><p><strong>numFound</strong> – <strong>[inout]</strong> Number of interfaces found. Can be more than listLength</p></li>
+<li><p><strong>sizeofInterfaceInfo</strong> – <strong>[in]</strong> Size of one VmbInterfaceInfo_t entry</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">numFound</span></code> is null</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – The given list length was insufficient to hold all available entries </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="camera-enumeration-information">
+<h2>Camera Enumeration &amp; Information<a class="headerlink" href="#camera-enumeration-information" title="Permalink to this headline"></a></h2>
+<dl class="c struct">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbCameraInfo</span></span></span><br /></dt>
+<dd><p>Camera information. </p>
+<p>Holds read-only information about a camera. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1abaaff803bd593e5ec7e5a1711d2f86bc"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraIdString</span></span></span><br /></dt>
+<dd><p>Identifier of the camera. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a4ce8aeaa6602df59e829b1ddb7fe7e4d"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraIdExtended</span></span></span><br /></dt>
+<dd><p>globally unique identifier for the camera </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a10a51f5abdf8445a14dcdeeb36a4f61b"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraName</span></span></span><br /></dt>
+<dd><p>The display name of the camera. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a2f85dbfe811c10613cb0481a623280d7"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">modelName</span></span></span><br /></dt>
+<dd><p>Model name. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1ac724c560124fe166778fe559622a0b84"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">serialString</span></span></span><br /></dt>
+<dd><p>Serial number. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a317ada59d63ef4630060a4ab1b719f8f"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerHandle</span></span></span><br /></dt>
+<dd><p>Handle of the related transport layer for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a2fbe7ed5eec82271ba67109022fc5ac7"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">interfaceHandle</span></span></span><br /></dt>
+<dd><p>Handle of the related interface for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a54735e37e55bbadfa386c701a4b6241b"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">localDeviceHandle</span></span></span><br /></dt>
+<dd><p>Handle of the related GenTL local device. NULL if the camera is not opened. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1aa758a46b402b06b0e3c3175d4ba8092e"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">streamHandles</span></span></span><br /></dt>
+<dd><p>Handles of the streams provided by the camera. NULL if the camera is not opened. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1af136c70badac27cec7f4e06ae821a6cd"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">streamCount</span></span></span><br /></dt>
+<dd><p>Number of stream handles in the streamHandles array. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1ade9ea0657be84e40393a6af7e9024cf5"></span><a class="reference internal" href="#c.VmbAccessMode_t" title="VmbAccessMode_t"><span class="n"><span class="pre">VmbAccessMode_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">permittedAccess</span></span></span><br /></dt>
+<dd><p>Permitted access modes, see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1aa0d1156f6eb619730081886bd2f4a951"><span class="std std-ref">VmbAccessModeType</span></a>. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1ab948547f0a1e34097c98c9151f6eb68e"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbCameraInfo" title="VmbCameraInfo"><span class="n"><span class="pre">VmbCameraInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbCameraInfo_t</span></span></span><br /></dt>
+<dd></dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__CameraInfo_1ga7e2fc291a27b13c3e071211476c5089b"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbCamerasList</span> <span class="pre">(VmbCameraInfo_t</span> <span class="pre">*cameraInfo,</span> <span class="pre">VmbUint32_t</span> <span class="pre">listLength,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*numFound,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofCameraInfo)</span></span></dt>
+<dd><p>List all the cameras that are currently visible to the API.</p>
+<p>Note: This function is usually called twice: once with an empty array to query the length of the list, and then again with an array of the correct length. If camera lists change between the calls, numFound may deviate from the query return.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>cameraInfo</strong> – <strong>[inout]</strong> Array of VmbCameraInfo_t, allocated by the caller. The camera list is copied here. May be null.</p></li>
+<li><p><strong>listLength</strong> – <strong>[in]</strong> Number of entries in the callers cameraInfo array.</p></li>
+<li><p><strong>numFound</strong> – <strong>[inout]</strong> Number of cameras found. Can be more than listLength.</p></li>
+<li><p><strong>sizeofCameraInfo</strong> – <strong>[in]</strong> Size of one VmbCameraInfo_t entry (if <code class="docutils literal notranslate"><span class="pre">cameraInfo</span></code> is null, this parameter is ignored).</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">numFound</span></code> is null</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version and <code class="docutils literal notranslate"><span class="pre">cameraInfo</span></code> is not null</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – The given list length was insufficient to hold all available entries </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__CameraInfo_1gad6e2632d0cc4c9f7def89e839f681fbf"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbCameraInfoQueryByHandle</span> <span class="pre">(VmbHandle_t</span> <span class="pre">cameraHandle,</span> <span class="pre">VmbCameraInfo_t</span> <span class="pre">*info,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofCameraInfo)</span></span></dt>
+<dd><p>Retrieve information about a single camera given its handle. </p>
+<p>Note: Some information is only filled for opened cameras.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>cameraHandle</strong> – <strong>[in]</strong> The handle of the camera; both remote and local device handles are permitted</p></li>
+<li><p><strong>info</strong> – <strong>[inout]</strong> Structure where information will be copied</p></li>
+<li><p><strong>sizeofCameraInfo</strong> – <strong>[in]</strong> Size of the structure</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">info</span></code> is null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The handle does not correspond to a camera </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__CameraInfo_1ga812c1829ed6fae75c246f34cd94a96df"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbCameraInfoQuery</span> <span class="pre">(const</span> <span class="pre">char</span> <span class="pre">*idString,</span> <span class="pre">VmbCameraInfo_t</span> <span class="pre">*info,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofCameraInfo)</span></span></dt>
+<dd><p>Retrieve information about a single camera given the ID of the camera. </p>
+<p>Note: Some information is only filled for opened cameras.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>idString</strong> – <strong>[in]</strong> ID of the camera</p></li>
+<li><p><strong>info</strong> – <strong>[inout]</strong> Structure where information will be copied</p></li>
+<li><p><strong>sizeofCameraInfo</strong> – <strong>[in]</strong> Size of the structure</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">idString</span></code> or <code class="docutils literal notranslate"><span class="pre">info</span></code> are null or <code class="docutils literal notranslate"><span class="pre">idString</span></code> is the empty string</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – No camera with the given id is found</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this API version </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__CameraInfo_1gaaff15baa63bc7975dfdabb94c83c918b"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbCameraOpen</span> <span class="pre">(const</span> <span class="pre">char</span> <span class="pre">*idString,</span> <span class="pre">VmbAccessMode_t</span> <span class="pre">accessMode,</span> <span class="pre">VmbHandle_t</span> <span class="pre">*cameraHandle)</span></span></dt>
+<dd><p>Open the specified camera. </p>
+<p>
+A camera may be opened in a specific access mode, which determines the level of control you have on a camera. Examples for idString:</p>
+<p>“DEV_81237473991” for an ID given by a transport layer, “169.254.12.13” for an IP address, “000F314C4BE5” for a MAC address or “DEV_1234567890” for an ID as reported by Vmb</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>idString</strong> – <strong>[in]</strong> ID of the camera. </p></li>
+<li><p><strong>accessMode</strong> – <strong>[in]</strong> The desired access mode. </p></li>
+<li><p><strong>cameraHandle</strong> – <strong>[out]</strong> The remote device handle of the camera, if opened successfully.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInUse</strong> – The camera with the given ID is already opened</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from frame callback or chunk access callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">idString</span></code> or <code class="docutils literal notranslate"><span class="pre">cameraHandle</span></code> are null</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – A camera with the given id was found, but could not be opened</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The designated camera cannot be found </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__CameraInfo_1ga6a7ec1503fbf35c937c3a7cebefeb1b4"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbCameraClose</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">cameraHandle)</span></span></dt>
+<dd><p>Close the specified camera. </p>
+<p>Depending on the access mode this camera was opened with, events are killed, callbacks are unregistered, and camera control is released.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>cameraHandle</strong> – <strong>[in]</strong> A valid camera handle</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInUse</strong> – The camera is currently in use with <a class="reference internal" href="#group__ChunkData_1gae988d459f02508e5351fa74a77fa727e"><span class="std std-ref">VmbChunkDataAccess</span></a></p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The handle does not correspond to an open camera</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from frame callback or chunk access callback </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="general-feature-functions">
+<h2>General Feature Functions<a class="headerlink" href="#general-feature-functions" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__GeneralFeatures_1ga25cebea66eca22b4446ce905d341c47e"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeaturesList</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">VmbFeatureInfo_t</span> <span class="pre">*featureInfoList,</span> <span class="pre">VmbUint32_t</span> <span class="pre">listLength,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*numFound,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofFeatureInfo)</span></span></dt>
+<dd><p>List all the features for this entity. </p>
+<p>This function lists all implemented features, whether they are currently available or not. The list of features does not change as long as the entity is connected.</p>
+<p>This function is usually called twice: once with an empty list to query the length of the list, and then again with a list of the correct length.</p>
+<p>If <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139ae6de77b7e851d99131afe669e0ec6df8"><span class="std std-ref">VmbErrorMoreData</span></a> is returned and <code class="docutils literal notranslate"><span class="pre">numFound</span></code> is non-null, the total number of features has been written to <code class="docutils literal notranslate"><span class="pre">numFound</span></code>.</p>
+<p>If there are more elements in <code class="docutils literal notranslate"><span class="pre">featureInfoList</span></code> than features available, the remaining elements are filled with zero-initialized <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> structs.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>featureInfoList</strong> – <strong>[out]</strong> An array of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> to be filled by the API. May be null if <code class="docutils literal notranslate"><span class="pre">numFund</span></code> is used for size query. </p></li>
+<li><p><strong>listLength</strong> – <strong>[in]</strong> Number of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> elements provided </p></li>
+<li><p><strong>numFound</strong> – <strong>[out]</strong> Number of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> elements found. May be null if <code class="docutils literal notranslate"><span class="pre">featureInfoList</span></code> is not null. </p></li>
+<li><p><strong>sizeofFeatureInfo</strong> – <strong>[in]</strong> Size of a <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> entry</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> is not valid for this version of the API</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – Both <code class="docutils literal notranslate"><span class="pre">featureInfoList</span></code> and <code class="docutils literal notranslate"><span class="pre">numFound</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – The given list length was insufficient to hold all available entries </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__GeneralFeatures_1ga04fb690359722ffc88d99fe1aa2ac346"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureInfoQuery</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbFeatureInfo_t</span> <span class="pre">*featureInfo,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofFeatureInfo)</span></span></dt>
+<dd><p>Query information about the constant properties of a feature. </p>
+<p>Users provide a pointer to <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a>, which is then set to the internal representation.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>featureInfo</strong> – <strong>[out]</strong> The feature info to query </p></li>
+<li><p><strong>sizeofFeatureInfo</strong> – <strong>[in]</strong> Size of the structure</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> is not valid for this version of the API</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">featureInfo</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – A feature with the given name does not exist.</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__GeneralFeatures_1ga8e280586067b26bcb918536985b61e78"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureListSelected</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbFeatureInfo_t</span> <span class="pre">*featureInfoList,</span> <span class="pre">VmbUint32_t</span> <span class="pre">listLength,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*numFound,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofFeatureInfo)</span></span></dt>
+<dd><p>List all the features selected by a given feature for this module. </p>
+<p>This function lists all selected features, whether they are currently available or not. Features with selected features (“selectors”) have no direct impact on the camera, but only influence the register address that selected features point to. The list of features does not change while the camera/interface is connected. This function is usually called twice: once with an empty array to query the length of the list, and then again with an array of the correct length.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>featureInfoList</strong> – <strong>[out]</strong> An array of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> to be filled by the API. May be null if <code class="docutils literal notranslate"><span class="pre">numFound</span></code> is used for size query. </p></li>
+<li><p><strong>listLength</strong> – <strong>[in]</strong> Number of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> elements provided </p></li>
+<li><p><strong>numFound</strong> – <strong>[out]</strong> Number of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> elements found. May be null if <code class="docutils literal notranslate"><span class="pre">featureInfoList</span></code> is not null. </p></li>
+<li><p><strong>sizeofFeatureInfo</strong> – <strong>[in]</strong> Size of a <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> entry</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> is null or both <code class="docutils literal notranslate"><span class="pre">featureInfoList</span></code> and <code class="docutils literal notranslate"><span class="pre">numFound</span></code> are null</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"><span class="std std-ref">VmbFeatureInfo_t</span></a> is not valid for this version of the API</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – The given list length was insufficient to hold all available entries </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__GeneralFeatures_1ga003bcad157cbab8b57fd2519f0f4174c"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureAccessQuery</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbBool_t</span> <span class="pre">*isReadable,</span> <span class="pre">VmbBool_t</span> <span class="pre">*isWriteable)</span></span></dt>
+<dd><p>Return the dynamic read and write capabilities of this feature. </p>
+<p>The access mode of a feature may change. For example, if “PacketSize” is locked while image data is streamed, it is only readable.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features. </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature. </p></li>
+<li><p><strong>isReadable</strong> – <strong>[out]</strong> Indicates if this feature is readable. May be null. </p></li>
+<li><p><strong>isWriteable</strong> – <strong>[out]</strong> Indicates if this feature is writable. May be null.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> is null or both <code class="docutils literal notranslate"><span class="pre">isReadable</span></code> and <code class="docutils literal notranslate"><span class="pre">isWriteable</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="integer-feature-access">
+<h2>Integer Feature Access<a class="headerlink" href="#integer-feature-access" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__IntAccess_1ga53467a94a0f3222f9f12b04aa14a4cc6"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureIntGet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbInt64_t</span> <span class="pre">*value)</span></span></dt>
+<dd><p>Get the value of an integer feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>value</strong> – <strong>[out]</strong> Value to get</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">value</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Integer</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__IntAccess_1gaf087631e05835850b65cfee0e96228fa"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureIntSet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbInt64_t</span> <span class="pre">value)</span></span></dt>
+<dd><p>Set the value of an integer feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>value</strong> – <strong>[in]</strong> Value to set</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from feature callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">name</span></code> is null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Integer</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – The feature is unavailable or not writable</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently</p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – If value is either out of bounds or not an increment of the minimum </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__IntAccess_1ga0af6dceea32b42b26aa35cad311b6d84"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureIntRangeQuery</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbInt64_t</span> <span class="pre">*min,</span> <span class="pre">VmbInt64_t</span> <span class="pre">*max)</span></span></dt>
+<dd><p>Query the range of an integer feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>min</strong> – <strong>[out]</strong> Minimum value to be returned. May be null. </p></li>
+<li><p><strong>max</strong> – <strong>[out]</strong> Maximum value to be returned. May be null.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">name</span></code> is null or both <code class="docutils literal notranslate"><span class="pre">min</span></code> and <code class="docutils literal notranslate"><span class="pre">max</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature name is not Integer</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – The range information is unavailable or not writable </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__IntAccess_1ga541cecdec56682a4d373aa69761d3aa9"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureIntIncrementQuery</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbInt64_t</span> <span class="pre">*value)</span></span></dt>
+<dd><p>Query the increment of an integer feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>value</strong> – <strong>[out]</strong> Value of the increment to get.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">value</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Integer</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – The information is unavailable or cannot be read </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__IntAccess_1gaf886d7e34167a4598ef47f1c2e440155"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureIntValidValueSetQuery</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbInt64_t</span> <span class="pre">*buffer,</span> <span class="pre">VmbUint32_t</span> <span class="pre">bufferSize,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*setSize)</span></span></dt>
+<dd><p>Retrieves info about the valid value set of an integer feature. </p>
+<p>Retrieves information about the set of valid values of an integer feature. If null is passed as buffer, only the size of the set is determined and written to bufferFilledCount; Otherwise the largest possible number of elements of the valid value set is copied to buffer.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> The handle for the entity the feature information is retrieved from </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> The name of the feature to retrieve the info for; if null is passed <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a599184e0f6f52cbf1ecb77c263e6a7d5"><span class="std std-ref">VmbErrorBadParameter</span></a> is returned </p></li>
+<li><p><strong>buffer</strong> – <strong>[in]</strong> The array to copy the valid values to or null if only the size of the set is requested </p></li>
+<li><p><strong>bufferSize</strong> – <strong>[in]</strong> The size of buffer; if buffer is null, the value is ignored </p></li>
+<li><p><strong>setSize</strong> – <strong>[out]</strong> The total number of elements in the set; the value is set, if <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139ae6de77b7e851d99131afe669e0ec6df8"><span class="std std-ref">VmbErrorMoreData</span></a> is returned</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> is null or both <code class="docutils literal notranslate"><span class="pre">buffer</span></code> and <code class="docutils literal notranslate"><span class="pre">bufferFilledCount</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of the feature is not Integer</p></li>
+<li><p><strong>VmbErrorValidValueSetNotPresent</strong> – The feature does not provide a valid value set</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – Some of data was retrieved successfully, but the size of buffer is insufficient to store all elements</p></li>
+<li><p><strong>VmbErrorIncomplete</strong> – The module the handle refers to is in a state where it cannot complete the request</p></li>
+<li><p><strong>VmbErrorOther</strong> – Some other issue occurred </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="float-feature-access">
+<h2>Float Feature Access<a class="headerlink" href="#float-feature-access" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__FloatAccess_1gafc7f66fd2b41ab1c5befbc30590c466e"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureFloatGet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">double</span> <span class="pre">*value)</span></span></dt>
+<dd><p>Get the value of a float feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>value</strong> – <strong>[out]</strong> Value to get</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">value</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Float</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__FloatAccess_1gaa90bfc8e713d78fabc0e80cd7dcf6ec1"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureFloatSet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">double</span> <span class="pre">value)</span></span></dt>
+<dd><p>Set the value of a float feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>value</strong> – <strong>[in]</strong> Value to set</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from feature callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> is null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Float</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently</p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – If value is not within valid bounds </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__FloatAccess_1gade87be887da83416187d712ad2c60bf7"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureFloatRangeQuery</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">double</span> <span class="pre">*min,</span> <span class="pre">double</span> <span class="pre">*max)</span></span></dt>
+<dd><p>Query the range of a float feature. </p>
+<p>Only one of the values may be queried if the other parameter is set to null, but if both parameters are null, an error is returned.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>min</strong> – <strong>[out]</strong> Minimum value to be returned. May be null. </p></li>
+<li><p><strong>max</strong> – <strong>[out]</strong> Maximum value to be returned. May be null.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> is null or both <code class="docutils literal notranslate"><span class="pre">min</span></code> and <code class="docutils literal notranslate"><span class="pre">max</span></code> are null</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Float </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__FloatAccess_1ga0d000a3de90f1004377603a0c63b8ba3"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureFloatIncrementQuery</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbBool_t</span> <span class="pre">*hasIncrement,</span> <span class="pre">double</span> <span class="pre">*value)</span></span></dt>
+<dd><p>Query the increment of a float feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>hasIncrement</strong> – <strong>[out]</strong> <code class="docutils literal notranslate"><span class="pre">true</span></code> if this float feature has an increment. </p></li>
+<li><p><strong>value</strong> – <strong>[out]</strong> Value of the increment to get.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> is null or both <code class="docutils literal notranslate"><span class="pre">value</span></code> and <code class="docutils literal notranslate"><span class="pre">hasIncrement</span></code> are null</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Float </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="bool-feature-access">
+<h2>Bool Feature Access<a class="headerlink" href="#bool-feature-access" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__BoolAccess_1gab237f4632def4d236e663b7b6e2e436c"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureBoolGet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbBool_t</span> <span class="pre">*value)</span></span></dt>
+<dd><p>Get the value of a boolean feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the boolean feature </p></li>
+<li><p><strong>value</strong> – <strong>[out]</strong> Value to be read</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">value</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – If feature is not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Boolean</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__BoolAccess_1ga046c8964787cd09859e4284e7a4bbf6b"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureBoolSet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbBool_t</span> <span class="pre">value)</span></span></dt>
+<dd><p>Set the value of a boolean feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the boolean feature </p></li>
+<li><p><strong>value</strong> – <strong>[in]</strong> Value to write</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> is null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – If the feature is not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Boolean</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently</p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – If value is not within valid bounds</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from feature callback </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="enum-feature-access">
+<h2>Enum Feature Access<a class="headerlink" href="#enum-feature-access" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__EnumAccess_1ga5865eaebc41255cc42f1b4e55e4cec74"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureEnumGet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">**value)</span></span></dt>
+<dd><p>Get the value of an enumeration feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>value</strong> – <strong>[out]</strong> The current enumeration value. The returned value is a reference to the API value</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">value</span></code> are null</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature featureName is not Enumeration</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature is not available</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__EnumAccess_1ga28e646dbf2da4c710fb8d726f5f9b79e"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureEnumSet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*value)</span></span></dt>
+<dd><p>Set the value of an enumeration feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>value</strong> – <strong>[in]</strong> Value to set</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from feature callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">value</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Enumeration</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature is not available</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – <code class="docutils literal notranslate"><span class="pre">value</span></code> is not a enum entry for the feature or the existing enum entry is currently not available </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__EnumAccess_1gac7d4dae9837354e1cfbf11e170930f03"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureEnumRangeQuery</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">**nameArray,</span> <span class="pre">VmbUint32_t</span> <span class="pre">arrayLength,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*numFound)</span></span></dt>
+<dd><p>Query the value range of an enumeration feature. </p>
+<p>All elements not filled with the names of enum entries by the function are set to null.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>nameArray</strong> – <strong>[out]</strong> An array of enumeration value names; may be null if <code class="docutils literal notranslate"><span class="pre">numFound</span></code> is used for size query </p></li>
+<li><p><strong>arrayLength</strong> – <strong>[in]</strong> Number of elements in the array </p></li>
+<li><p><strong>numFound</strong> – <strong>[out]</strong> Number of elements found; may be null if <code class="docutils literal notranslate"><span class="pre">nameArray</span></code> is not null</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> is null or both <code class="docutils literal notranslate"><span class="pre">nameArray</span></code> and <code class="docutils literal notranslate"><span class="pre">numFound</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not implemented</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Enumeration</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – The given array length was insufficient to hold all available entries </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__EnumAccess_1gaa25c06d402514f2955a1d776f23b9790"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureEnumIsAvailable</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*value,</span> <span class="pre">VmbBool_t</span> <span class="pre">*isAvailable)</span></span></dt>
+<dd><p>Check if a certain value of an enumeration is available. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>value</strong> – <strong>[in]</strong> Value to check </p></li>
+<li><p><strong>isAvailable</strong> – <strong>[out]</strong> Indicates if the given enumeration value is available</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code>, <code class="docutils literal notranslate"><span class="pre">value</span></code> or <code class="docutils literal notranslate"><span class="pre">isAvailable</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Enumeration</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not implemented</p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – There is no enum entry with string representation of <code class="docutils literal notranslate"><span class="pre">value</span></code> for the given enum feature</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__EnumAccess_1gac65e9ab1b45173b4f1c4a603e1c3ff13"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureEnumAsInt</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*value,</span> <span class="pre">VmbInt64_t</span> <span class="pre">*intVal)</span></span></dt>
+<dd><p>Get the integer value for a given enumeration string value. </p>
+<p>Converts a name of an enum member into an int value (“Mono12Packed” to 0x10C0006)</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>value</strong> – <strong>[in]</strong> The enumeration value to get the integer value for </p></li>
+<li><p><strong>intVal</strong> – <strong>[out]</strong> The integer value for this enumeration entry</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">name</span></code>, <code class="docutils literal notranslate"><span class="pre">value</span></code> or <code class="docutils literal notranslate"><span class="pre">intVal</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – No feature with the given name was found</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not implemented</p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – <code class="docutils literal notranslate"><span class="pre">value</span></code> is not the name of a enum entry for the feature</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Enumeration </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__EnumAccess_1ga77e491824bbbb167599eed693d49b37d"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureEnumAsString</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbInt64_t</span> <span class="pre">intValue,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">**stringValue)</span></span></dt>
+<dd><p>Get the enumeration string value for a given integer value. </p>
+<p>Converts an int value to a name of an enum member (e.g. 0x10C0006 to “Mono12Packed”)</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>intValue</strong> – <strong>[in]</strong> The numeric value </p></li>
+<li><p><strong>stringValue</strong> – <strong>[out]</strong> The string value for the numeric value</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">stringValue</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – No feature with the given name was found</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – No feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not implemented</p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – <code class="docutils literal notranslate"><span class="pre">intValue</span></code> is not the int value of an enum entry</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Enumeration </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__EnumAccess_1gadc1e10914675ce6cd5c370eb64218e12"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureEnumEntryGet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*featureName,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*entryName,</span> <span class="pre">VmbFeatureEnumEntry_t</span> <span class="pre">*featureEnumEntry,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofFeatureEnumEntry)</span></span></dt>
+<dd><p>Get infos about an entry of an enumeration feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>featureName</strong> – <strong>[in]</strong> Name of the feature </p></li>
+<li><p><strong>entryName</strong> – <strong>[in]</strong> Name of the enum entry of that feature </p></li>
+<li><p><strong>featureEnumEntry</strong> – <strong>[out]</strong> Infos about that entry returned by the API </p></li>
+<li><p><strong>sizeofFeatureEnumEntry</strong> – <strong>[in]</strong> Size of the structure</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – Size of VmbFeatureEnumEntry_t is not compatible with the API version</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">featureName</span></code>, <code class="docutils literal notranslate"><span class="pre">entryName</span></code> or <code class="docutils literal notranslate"><span class="pre">featureEnumEntry</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not implemented</p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – There is no enum entry with a string representation of <code class="docutils literal notranslate"><span class="pre">entryName</span></code> </p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature featureName is not Enumeration </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c struct">
+<dt class="sig sig-object c" id="c.VmbFeatureEnumEntry">
+<span class="target" id="structVmbFeatureEnumEntry"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureEnumEntry</span></span></span><a class="headerlink" href="#c.VmbFeatureEnumEntry" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Info about possible entries of an enumeration feature. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureEnumEntry.name">
+<span class="target" id="structVmbFeatureEnumEntry_1ab7ea2db6d4dbdee8e409585fcc9daebf"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">name</span></span></span><a class="headerlink" href="#c.VmbFeatureEnumEntry.name" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Name used in the API. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureEnumEntry.displayName">
+<span class="target" id="structVmbFeatureEnumEntry_1ae3ec279078159a547337faff44176e30"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">displayName</span></span></span><a class="headerlink" href="#c.VmbFeatureEnumEntry.displayName" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Enumeration entry name to be used in GUIs. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureEnumEntry.tooltip">
+<span class="target" id="structVmbFeatureEnumEntry_1a19683960df3457641cda740ecc07ab36"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">tooltip</span></span></span><a class="headerlink" href="#c.VmbFeatureEnumEntry.tooltip" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Short description, e.g. for a tooltip. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureEnumEntry.description">
+<span class="target" id="structVmbFeatureEnumEntry_1a3ba2cd8dfdf100617b006a9f51366bec"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">description</span></span></span><a class="headerlink" href="#c.VmbFeatureEnumEntry.description" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Longer description. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureEnumEntry.intValue">
+<span class="target" id="structVmbFeatureEnumEntry_1aa5d9fee1a684c3d184113b030f0b704c"></span><a class="reference internal" href="#c.VmbInt64_t" title="VmbInt64_t"><span class="n"><span class="pre">VmbInt64_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">intValue</span></span></span><a class="headerlink" href="#c.VmbFeatureEnumEntry.intValue" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Integer value of this enumeration entry. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureEnumEntry.sfncNamespace">
+<span class="target" id="structVmbFeatureEnumEntry_1ac1b4143df80aea790ae424f0607c9534"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">sfncNamespace</span></span></span><a class="headerlink" href="#c.VmbFeatureEnumEntry.sfncNamespace" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Namespace this feature resides in. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureEnumEntry.visibility">
+<span class="target" id="structVmbFeatureEnumEntry_1a3fbb849aa981c5a18e4d32eedbaf720d"></span><a class="reference internal" href="#c.VmbFeatureVisibility_t" title="VmbFeatureVisibility_t"><span class="n"><span class="pre">VmbFeatureVisibility_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">visibility</span></span></span><a class="headerlink" href="#c.VmbFeatureEnumEntry.visibility" title="Permalink to this definition"></a><br /></dt>
+<dd><p>GUI visibility. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFeatureEnumEntry_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1acef6e50a236d55dd67b42b0cc1ed7d02"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFeatureEnumEntry" title="VmbFeatureEnumEntry"><span class="n"><span class="pre">VmbFeatureEnumEntry</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureEnumEntry_t</span></span></span><a class="headerlink" href="#c.VmbFeatureEnumEntry_t" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+</section>
+<section id="string-feature-access">
+<h2>String Feature Access<a class="headerlink" href="#string-feature-access" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__StringAccess_1ga95a58ccbc3fdc567284ca1b5c43c377f"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureStringGet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">char</span> <span class="pre">*buffer,</span> <span class="pre">VmbUint32_t</span> <span class="pre">bufferSize,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*sizeFilled)</span></span></dt>
+<dd><p>Get the value of a string feature. </p>
+<p>This function is usually called twice: once with an empty buffer to query the length of the string, and then again with a buffer of the correct length.</p>
+<p>The value written to <code class="docutils literal notranslate"><span class="pre">sizeFilled</span></code> includes the terminating 0 character of the string.</p>
+<p>If a <code class="docutils literal notranslate"><span class="pre">buffer</span></code> is provided and there its insufficient to hold all the data, the longest possible prefix fitting the buffer is copied to <code class="docutils literal notranslate"><span class="pre">buffer</span></code>; the last element of <code class="docutils literal notranslate"><span class="pre">buffer</span></code> is set to 0 case.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the string feature </p></li>
+<li><p><strong>buffer</strong> – <strong>[out]</strong> String buffer to fill. May be null if <code class="docutils literal notranslate"><span class="pre">sizeFilled</span></code> is used for size query. </p></li>
+<li><p><strong>bufferSize</strong> – <strong>[in]</strong> Size of the input buffer </p></li>
+<li><p><strong>sizeFilled</strong> – <strong>[out]</strong> Size actually filled. May be null if <code class="docutils literal notranslate"><span class="pre">buffer</span></code> is not null.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> is null, both <code class="docutils literal notranslate"><span class="pre">buffer</span></code> and <code class="docutils literal notranslate"><span class="pre">sizeFilled</span></code> are null or <code class="docutils literal notranslate"><span class="pre">buffer</span></code> is non-null and bufferSize is 0</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not String</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – The given buffer size was too small </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating the type of error, if any.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__StringAccess_1ga49acda79263c8fbb82e484fb87626830"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureStringSet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*value)</span></span></dt>
+<dd><p>Set the value of a string feature. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the string feature </p></li>
+<li><p><strong>value</strong> – <strong>[in]</strong> Value to set</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from feature callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">value</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not String</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorInvalidValue</strong> – If length of value exceeded the maximum length</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__StringAccess_1ga77714f07d58b37af1f05fb5592fe006b"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureStringMaxlengthQuery</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*maxLength)</span></span></dt>
+<dd><p>Get the maximum length of a string feature. </p>
+<p>The length reported does not include the terminating 0 char.</p>
+<p>Note: For some features the maximum size is not fixed and may change.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the string feature </p></li>
+<li><p><strong>maxLength</strong> – <strong>[out]</strong> Maximum length of this string feature</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">maxLength</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not String</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="command-feature-access">
+<h2>Command Feature Access<a class="headerlink" href="#command-feature-access" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__CmdAccess_1gab4c8af9e1fc39e870ed79ef100dd3bf9"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureCommandRun</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name)</span></span></dt>
+<dd><p>Run a feature command. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the command feature</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a feature callback or chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> is null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – Feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Command</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__CmdAccess_1ga41ec1ac4840cdbcdf73db17b163ca640"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureCommandIsDone</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbBool_t</span> <span class="pre">*isDone)</span></span></dt>
+<dd><p>Check if a feature command is done. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the command feature </p></li>
+<li><p><strong>isDone</strong> – <strong>[out]</strong> State of the command.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">isDone</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – Feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Command</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="raw-feature-access">
+<h2>Raw Feature Access<a class="headerlink" href="#raw-feature-access" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__RawAccess_1gadde9235bd7ff2c9a169e355a1f10a4b2"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureRawGet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">char</span> <span class="pre">*buffer,</span> <span class="pre">VmbUint32_t</span> <span class="pre">bufferSize,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*sizeFilled)</span></span></dt>
+<dd><p>Read the memory contents of an area given by a feature name. </p>
+<p>This feature type corresponds to a top-level “Register” feature in GenICam. Data transfer is split up by the transport layer if the feature length is too large. You can get the size of the memory area addressed by the feature name by <a class="reference internal" href="#group__RawAccess_1ga008957c5bb4387cdf61c48e206623eb6"><span class="std std-ref">VmbFeatureRawLengthQuery()</span></a>.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the raw feature </p></li>
+<li><p><strong>buffer</strong> – <strong>[out]</strong> Buffer to fill </p></li>
+<li><p><strong>bufferSize</strong> – <strong>[in]</strong> Size of the buffer to be filled </p></li>
+<li><p><strong>sizeFilled</strong> – <strong>[out]</strong> Number of bytes actually filled</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code>, <code class="docutils literal notranslate"><span class="pre">buffer</span></code> or <code class="docutils literal notranslate"><span class="pre">sizeFilled</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – Feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Register</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__RawAccess_1ga25149004bddbe70f69872491793684c7"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureRawSet</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*buffer,</span> <span class="pre">VmbUint32_t</span> <span class="pre">bufferSize)</span></span></dt>
+<dd><p>Write to a memory area given by a feature name. </p>
+<p>This feature type corresponds to a first-level “Register” node in the XML file. Data transfer is split up by the transport layer if the feature length is too large. You can get the size of the memory area addressed by the feature name by <a class="reference internal" href="#group__RawAccess_1ga008957c5bb4387cdf61c48e206623eb6"><span class="std std-ref">VmbFeatureRawLengthQuery()</span></a>.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the raw feature </p></li>
+<li><p><strong>buffer</strong> – <strong>[in]</strong> Data buffer to use </p></li>
+<li><p><strong>bufferSize</strong> – <strong>[in]</strong> Size of the buffer</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from feature callback or a chunk access callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">buffer</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – Feature was not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Register</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__RawAccess_1ga008957c5bb4387cdf61c48e206623eb6"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureRawLengthQuery</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*length)</span></span></dt>
+<dd><p>Get the length of a raw feature for memory transfers. </p>
+<p>This feature type corresponds to a first-level “Register” node in the XML file.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that exposes features </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the raw feature </p></li>
+<li><p><strong>length</strong> – <strong>[out]</strong> Length of the raw feature area (in bytes)</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">length</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – Feature not found</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – The type of feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not Register</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature isn’t implemented</p></li>
+<li><p><strong>VmbErrorNotAvailable</strong> – The feature isn’t available currently </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="chunk-data-access">
+<h2>Chunk Data Access<a class="headerlink" href="#chunk-data-access" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__ChunkData_1gae988d459f02508e5351fa74a77fa727e"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbChunkDataAccess</span> <span class="pre">(const</span> <span class="pre">VmbFrame_t</span> <span class="pre">*frame,</span> <span class="pre">VmbChunkAccessCallback</span> <span class="pre">chunkAccessCallback,</span> <span class="pre">void</span> <span class="pre">*userContext)</span></span></dt>
+<dd><p>Access chunk data for a frame. </p>
+<p>This function can only succeed if the given frame has been filled by the API.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>frame</strong> – <strong>[in]</strong> A pointer to a filled frame that is announced </p></li>
+<li><p><strong>chunkAccessCallback</strong> – <strong>[in]</strong> A callback to access the chunk data from </p></li>
+<li><p><strong>userContext</strong> – <strong>[in]</strong> A pointer to pass to the callback</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback or a feature callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">frame</span></code> or <code class="docutils literal notranslate"><span class="pre">chunkAccessCallback</span></code> are null</p></li>
+<li><p><strong>VmbErrorInUse</strong> – The frame state does not allow for retrieval of chunk data (e.g. the frame could have been reenqueued before the chunk access could happen).</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The frame is currently not announced for a stream</p></li>
+<li><p><strong>VmbErrorDeviceNotOpen</strong> – If the device the frame was received from is no longer open</p></li>
+<li><p><strong>VmbErrorNoChunkData</strong> – <code class="docutils literal notranslate"><span class="pre">frame</span></code> does not contain chunk data</p></li>
+<li><p><strong>VmbErrorParsingChunkData</strong> – The chunk data does not adhere to the expected format</p></li>
+<li><p><strong>VmbErrorUserCallbackException</strong> – The callback threw an exception</p></li>
+<li><p><strong>VmbErrorFeaturesUnavailable</strong> – The feature description for the remote device is unavailable</p></li>
+<li><p><strong>VmbErrorCustom</strong> – The minimum a user defined error code returned by the callback </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a1065de7704c3ac5ebdc595b641fe6ad4"></span><span class="sig-name descname"><span class="pre">VmbError_t(VMB_CALL</span> <span class="pre">*</span> <span class="pre">VmbChunkAccessCallback</span> <span class="pre">)(VmbHandle_t</span> <span class="pre">featureAccessHandle,</span> <span class="pre">void</span> <span class="pre">*userContext)</span></span></dt>
+<dd><p>Function pointer type to access chunk data. </p>
+<p>This function should complete as quickly as possible, since it blocks other updates on the remote device.</p>
+<p>This function should not throw exceptions, even if VmbC is used from C++. Any exception thrown will only result in an error code indicating that an exception was thrown.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Param featureAccessHandle</dt>
+<dd class="field-odd"><p><strong>[in]</strong> A special handle that can be used for accessing features; the handle is only valid during the call of the function. </p>
+</dd>
+<dt class="field-even">Param userContext</dt>
+<dd class="field-even"><p><strong>[in]</strong> The value the user passed to <a class="reference internal" href="#group__ChunkData_1gae988d459f02508e5351fa74a77fa727e"><span class="std std-ref">VmbChunkDataAccess</span></a>.</p>
+</dd>
+<dt class="field-odd">Return</dt>
+<dd class="field-odd"><p>An error to be returned from <a class="reference internal" href="#group__ChunkData_1gae988d459f02508e5351fa74a77fa727e"><span class="std std-ref">VmbChunkDataAccess</span></a> in the absence of other errors; A custom exit code &gt;= <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a9ad210fe4d1d090508ff016367d530fb"><span class="std std-ref">VmbErrorCustom</span></a> can be returned to indicate a failure via <a class="reference internal" href="#group__ChunkData_1gae988d459f02508e5351fa74a77fa727e"><span class="std std-ref">VmbChunkDataAccess</span></a> return code </p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="feature-invalidation">
+<h2>Feature Invalidation<a class="headerlink" href="#feature-invalidation" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__FeatureInvalidation_1ga04e8a6c386ae5795e95c983faf3873a6"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureInvalidationRegister</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbInvalidationCallback</span> <span class="pre">callback,</span> <span class="pre">void</span> <span class="pre">*userContext)</span></span></dt>
+<dd><p>Register a VmbInvalidationCallback callback for feature invalidation signaling. </p>
+<p>Any feature change, either of its value or of its access state, may be tracked by registering an invalidation callback. Registering multiple callbacks for one feature invalidation event is possible because only the combination of handle, name, and callback is used as key. If the same combination of handle, name, and callback is registered a second time, the callback remains registered and the context is overwritten with <code class="docutils literal notranslate"><span class="pre">userContext</span></code>.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that emits events </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the event </p></li>
+<li><p><strong>callback</strong> – <strong>[in]</strong> Callback to be run when invalidation occurs </p></li>
+<li><p><strong>userContext</strong> – <strong>[in]</strong> User context passed to function</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">callback</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – No feature with <code class="docutils literal notranslate"><span class="pre">name</span></code> was found for the module associated with <code class="docutils literal notranslate"><span class="pre">handle</span></code> </p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not implemented</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__FeatureInvalidation_1gadcce25b156fabad63e8324b056c7f69f"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFeatureInvalidationUnregister</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">VmbInvalidationCallback</span> <span class="pre">callback)</span></span></dt>
+<dd><p>Unregister a previously registered feature invalidation callback. </p>
+<p>Since multiple callbacks may be registered for a feature invalidation event, a combination of handle, name, and callback is needed for unregistering, too.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that emits events </p></li>
+<li><p><strong>name</strong> – <strong>[in]</strong> Name of the event </p></li>
+<li><p><strong>callback</strong> – <strong>[in]</strong> Callback to be removed</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">name</span></code> or <code class="docutils literal notranslate"><span class="pre">callback</span></code> are null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – No feature with <code class="docutils literal notranslate"><span class="pre">name</span></code> was found for the module associated with <code class="docutils literal notranslate"><span class="pre">handle</span></code> or there was no listener to unregister</p></li>
+<li><p><strong>VmbErrorNotImplemented</strong> – The feature <code class="docutils literal notranslate"><span class="pre">name</span></code> is not implemented</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a414c98f3ebbfc3cb3e65e6719dcff480"></span><span class="sig-name descname"><span class="pre">void(VMB_CALL</span> <span class="pre">*</span> <span class="pre">VmbInvalidationCallback</span> <span class="pre">)(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">void</span> <span class="pre">*userContext)</span></span></dt>
+<dd><p>Invalidation callback type for a function that gets called in a separate thread and has been registered with <a class="reference internal" href="#group__FeatureInvalidation_1ga04e8a6c386ae5795e95c983faf3873a6"><span class="std std-ref">VmbFeatureInvalidationRegister()</span></a>. </p>
+<p>While the callback is run, all feature data is atomic. After the callback finishes, the feature data may be updated with new values.</p>
+<p>Do not spend too much time in this thread; it prevents the feature values from being updated from any other thread or the lower-level drivers.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Param handle</dt>
+<dd class="field-odd"><p><strong>[in]</strong> Handle for an entity that exposes features </p>
+</dd>
+<dt class="field-even">Param name</dt>
+<dd class="field-even"><p><strong>[in]</strong> Name of the feature </p>
+</dd>
+<dt class="field-odd">Param userContext</dt>
+<dd class="field-odd"><p><strong>[in]</strong> Pointer to the user context, see <a class="reference internal" href="#group__FeatureInvalidation_1ga04e8a6c386ae5795e95c983faf3873a6"><span class="std std-ref">VmbFeatureInvalidationRegister</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="image-preparation-and-acquisition">
+<h2>Image preparation and acquisition<a class="headerlink" href="#image-preparation-and-acquisition" title="Permalink to this headline"></a></h2>
+<dl class="c struct">
+<dt class="sig sig-object c" id="c.VmbFrame">
+<span class="target" id="structVmbFrame"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrame</span></span></span><a class="headerlink" href="#c.VmbFrame" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame delivered by the camera. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-in">In</p>
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.buffer">
+<span class="target" id="structVmbFrame_1aad6043634732325e11b2bb4a88c8cf28"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">buffer</span></span></span><a class="headerlink" href="#c.VmbFrame.buffer" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Comprises image and potentially chunk data. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.bufferSize">
+<span class="target" id="structVmbFrame_1ae414da43614ab456e3ea0b27cd490827"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">bufferSize</span></span></span><a class="headerlink" href="#c.VmbFrame.bufferSize" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The size of the data buffer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.context">
+<span class="target" id="structVmbFrame_1acf5b032440dd5da997cdd353331517a4"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">context</span></span></span><span class="p"><span class="pre">[</span></span><span class="m"><span class="pre">4</span></span><span class="p"><span class="pre">]</span></span><a class="headerlink" href="#c.VmbFrame.context" title="Permalink to this definition"></a><br /></dt>
+<dd><p>4 void pointers that can be employed by the user (e.g. for storing handles) </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.receiveStatus">
+<span class="target" id="structVmbFrame_1a2b7da7f4d43d1a666e307a95eff75894"></span><a class="reference internal" href="#c.VmbFrameStatus_t" title="VmbFrameStatus_t"><span class="n"><span class="pre">VmbFrameStatus_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">receiveStatus</span></span></span><a class="headerlink" href="#c.VmbFrame.receiveStatus" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The resulting status of the receive operation. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.frameID">
+<span class="target" id="structVmbFrame_1acf8edd02ec2ac3e0894277a7de3eb11e"></span><a class="reference internal" href="#c.VmbUint64_t" title="VmbUint64_t"><span class="n"><span class="pre">VmbUint64_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">frameID</span></span></span><a class="headerlink" href="#c.VmbFrame.frameID" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unique ID of this frame in this stream. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.timestamp">
+<span class="target" id="structVmbFrame_1a582e5f0ff30509371370d02cfee77b12"></span><a class="reference internal" href="#c.VmbUint64_t" title="VmbUint64_t"><span class="n"><span class="pre">VmbUint64_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">timestamp</span></span></span><a class="headerlink" href="#c.VmbFrame.timestamp" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The timestamp set by the camera. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.imageData">
+<span class="target" id="structVmbFrame_1ac22a2a3781084f8a84e0ec2545082842"></span><a class="reference internal" href="#c.VmbUint8_t" title="VmbUint8_t"><span class="n"><span class="pre">VmbUint8_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">imageData</span></span></span><a class="headerlink" href="#c.VmbFrame.imageData" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The start of the image data, if present, or null. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.receiveFlags">
+<span class="target" id="structVmbFrame_1a03fefaf716f75a6c67af54791e304602"></span><a class="reference internal" href="#c.VmbFrameFlags_t" title="VmbFrameFlags_t"><span class="n"><span class="pre">VmbFrameFlags_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">receiveFlags</span></span></span><a class="headerlink" href="#c.VmbFrame.receiveFlags" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Flags indicating which additional frame information is available. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.pixelFormat">
+<span class="target" id="structVmbFrame_1a16e647cf1beba6b0f66cc1a7c6892f34"></span><a class="reference internal" href="#c.VmbPixelFormat_t" title="VmbPixelFormat_t"><span class="n"><span class="pre">VmbPixelFormat_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">pixelFormat</span></span></span><a class="headerlink" href="#c.VmbFrame.pixelFormat" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel format of the image. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.width">
+<span class="target" id="structVmbFrame_1a75f1209cc47de628b6cc3e848ddd30b6"></span><a class="reference internal" href="#c.VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">width</span></span></span><a class="headerlink" href="#c.VmbFrame.width" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Width of an image. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.height">
+<span class="target" id="structVmbFrame_1a3b862560c995e974708c53941be05cbd"></span><a class="reference internal" href="#c.VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">height</span></span></span><a class="headerlink" href="#c.VmbFrame.height" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Height of an image. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.offsetX">
+<span class="target" id="structVmbFrame_1a5c78cb4e7471257e2be5268a628aaa5c"></span><a class="reference internal" href="#c.VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">offsetX</span></span></span><a class="headerlink" href="#c.VmbFrame.offsetX" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Horizontal offset of an image. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.offsetY">
+<span class="target" id="structVmbFrame_1aaebdc7a43d5d255c23dca5da3df7e656"></span><a class="reference internal" href="#c.VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">offsetY</span></span></span><a class="headerlink" href="#c.VmbFrame.offsetY" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Vertical offset of an image. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.payloadType">
+<span class="target" id="structVmbFrame_1aa525dff28c846426bbda92011b96739b"></span><a class="reference internal" href="#c.VmbPayloadType_t" title="VmbPayloadType_t"><span class="n"><span class="pre">VmbPayloadType_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">payloadType</span></span></span><a class="headerlink" href="#c.VmbFrame.payloadType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The type of payload. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFrame.chunkDataPresent">
+<span class="target" id="structVmbFrame_1a6af5700e735a429d74439d166b079a3e"></span><a class="reference internal" href="#c.VmbBool_t" title="VmbBool_t"><span class="n"><span class="pre">VmbBool_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">chunkDataPresent</span></span></span><a class="headerlink" href="#c.VmbFrame.chunkDataPresent" title="Permalink to this definition"></a><br /></dt>
+<dd><p>True if the transport layer reported chunk data to be present in the buffer. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFrame_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1a875563f52bc13d30598741248ea80812"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFrame" title="VmbFrame"><span class="n"><span class="pre">VmbFrame</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrame_t</span></span></span><a class="headerlink" href="#c.VmbFrame_t" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Capture_1ga2baa414c2a8f9046c6dfa2bbe16185d0"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbPayloadSizeGet</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*payloadSize)</span></span></dt>
+<dd><p>Get the necessary payload size for buffer allocation. </p>
+<p>Returns the payload size necessary for buffer allocation as queried from the Camera. If the stream module provides a PayloadSize feature, this value will be returned instead. If a camera handle is passed, the payload size refers to the stream with index 0.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Camera or stream handle </p></li>
+<li><p><strong>payloadSize</strong> – <strong>[out]</strong> Payload Size</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">payloadSize</span></code> is null </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Capture_1gaee139d04da418e0551fb08f55dd85d7b"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFrameAnnounce</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">VmbFrame_t</span> <span class="pre">*frame,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofFrame)</span></span></dt>
+<dd><p>Announce frames to the API that may be queued for frame capturing later. </p>
+<p>Allows some preparation for frames like DMA preparation depending on the transport layer. The order in which the frames are announced is not taken into consideration by the API. If frame.buffer is null, the allocation is done by the transport layer.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Camera or stream handle </p></li>
+<li><p><strong>frame</strong> – <strong>[in]</strong> Frame buffer to announce </p></li>
+<li><p><strong>sizeofFrame</strong> – <strong>[in]</strong> Size of the frame structure</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – The given struct size is not valid for this version of the API</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a frame callback or a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given camera handle is not valid</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – <code class="docutils literal notranslate"><span class="pre">frame</span></code> is null</p></li>
+<li><p><strong>VmbErrorAlready</strong> – The frame has already been announced</p></li>
+<li><p><strong>VmbErrorBusy</strong> – The underlying transport layer does not support announcing frames during acquisition</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – The given buffer size is invalid (usually 0) </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Capture_1gaf4c88f8b9076ecb09a4257f41a1f5ed0"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFrameRevoke</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">VmbFrame_t</span> <span class="pre">*frame)</span></span></dt>
+<dd><p>Revoke a frame from the API. </p>
+<p>The referenced frame is removed from the pool of frames for capturing images.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for a camera or stream </p></li>
+<li><p><strong>frame</strong> – <strong>[in]</strong> Frame buffer to be removed from the list of announced frames</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a frame callback or a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – The given frame pointer is not valid</p></li>
+<li><p><strong>VmbErrorBusy</strong> – The underlying transport layer does not support revoking frames during acquisition</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The given frame could not be found for the stream</p></li>
+<li><p><strong>VmbErrorInUse</strong> – The frame is currently still in use (e.g. in a running frame callback) </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Capture_1ga48c9c9792d2aaca605d274d5501fcb9f"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbFrameRevokeAll</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle)</span></span></dt>
+<dd><p>Revoke all frames assigned to a certain stream or camera. </p>
+<p>In case of an failure some of the frames may have been revoked. To prevent this it is recommended to call <a class="reference internal" href="#group__Capture_1ga0a0ddf0d7c6321f9bc2f49e829a75acf"><span class="std std-ref">VmbCaptureQueueFlush</span></a> for the same handle before invoking this function.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for a stream or camera</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a frame callback or a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – <code class="docutils literal notranslate"><span class="pre">handle</span></code> is not valid</p></li>
+<li><p><strong>VmbErrorInUse</strong> – One of the frames of the stream is still in use </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Capture_1gad930f14013c81ebf9accaa2e33a2eca6"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbCaptureStart</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle)</span></span></dt>
+<dd><p>Prepare the API for incoming frames. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for a camera or a stream</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a frame callback or a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid; this includes the camera no longer being open</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – The buffer size of the announced frames is insufficient</p></li>
+<li><p><strong>VmbErrorInsufficientBufferCount</strong> – The operation requires more buffers to be announced; see the StreamAnnounceBufferMinimum stream feature</p></li>
+<li><p><strong>VmbErrorAlready</strong> – Capturing was already started </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Capture_1ga1d477d6cd758717d1379457ed0c3789e"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbCaptureEnd</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle)</span></span></dt>
+<dd><p>Stop the API from being able to receive frames. </p>
+<p>Consequences of <a class="reference internal" href="#group__Capture_1ga1d477d6cd758717d1379457ed0c3789e"><span class="std std-ref">VmbCaptureEnd()</span></a>: The frame callback will not be called anymore</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>This function waits for the completion of the last callback for the current capture. If the callback does not return in finite time, this function may not return in finite time either.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for a stream or camera</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a frame callback or a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – <code class="docutils literal notranslate"><span class="pre">handle</span></code> is not valid </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Capture_1ga21e639881606a401365b24e6d3103664"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbCaptureFrameQueue</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">VmbFrame_t</span> <span class="pre">*frame,</span> <span class="pre">VmbFrameCallback</span> <span class="pre">callback)</span></span></dt>
+<dd><p>Queue frames that may be filled during frame capturing. </p>
+<p>The given frame is put into a queue that will be filled sequentially. The order in which the frames are filled is determined by the order in which they are queued. If the frame was announced with <a class="reference internal" href="#group__Capture_1gaee139d04da418e0551fb08f55dd85d7b"><span class="std std-ref">VmbFrameAnnounce()</span></a> before, the application has to ensure that the frame is also revoked by calling <a class="reference internal" href="#group__Capture_1gaf4c88f8b9076ecb09a4257f41a1f5ed0"><span class="std std-ref">VmbFrameRevoke()</span></a> or <a class="reference internal" href="#group__Capture_1ga48c9c9792d2aaca605d274d5501fcb9f"><span class="std std-ref">VmbFrameRevokeAll()</span></a> when cleaning up.</p>
+<div class="admonition warning">
+<p class="admonition-title">Warning</p>
+<p><code class="docutils literal notranslate"><span class="pre">callback</span></code> should to return in finite time. Otherwise <a class="reference internal" href="#group__Capture_1ga1d477d6cd758717d1379457ed0c3789e"><span class="std std-ref">VmbCaptureEnd</span></a> and operations resulting in the stream being closed may not return.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle of a camera or stream </p></li>
+<li><p><strong>frame</strong> – <strong>[in]</strong> Pointer to an already announced frame </p></li>
+<li><p><strong>callback</strong> – <strong>[in]</strong> Callback to be run when the frame is complete. Null is OK.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – The call was successful</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">frame</span></code> is null</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – No stream related to <code class="docutils literal notranslate"><span class="pre">handle</span></code> could be found</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInternalFault</strong> – The buffer or bufferSize members of <code class="docutils literal notranslate"><span class="pre">frame</span></code> have been set to null or zero respectively</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The frame is not a frame announced for the given stream</p></li>
+<li><p><strong>VmbErrorAlready</strong> – The frame is currently queued </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Capture_1gaab717c843618bb68d60c40d1782a701d"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbCaptureFrameWait</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">VmbFrame_t</span> <span class="pre">*frame,</span> <span class="pre">VmbUint32_t</span> <span class="pre">timeout)</span></span></dt>
+<dd><p>Wait for a queued frame to be filled (or dequeued). </p>
+<p>The frame needs to be queued and not filled for the function to complete successfully.</p>
+<p>If a camera handle is passed, the first stream of the camera is used.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle of a camera or stream </p></li>
+<li><p><strong>frame</strong> – <strong>[in]</strong> Pointer to an already announced and queued frame </p></li>
+<li><p><strong>timeout</strong> – <strong>[in]</strong> Timeout (in milliseconds)</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">frame</span></code> or the buffer of <code class="docutils literal notranslate"><span class="pre">frame</span></code> are null or the the buffer size of <code class="docutils literal notranslate"><span class="pre">frame</span></code> is 0</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – No stream related to <code class="docutils literal notranslate"><span class="pre">handle</span></code> could be found</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The frame is not one currently queued for the stream</p></li>
+<li><p><strong>VmbErrorAlready</strong> – The frame has already been dequeued or VmbCaptureFrameWait has been called already for this frame</p></li>
+<li><p><strong>VmbErrorInUse</strong> – If the frame was queued with a frame callback</p></li>
+<li><p><strong>VmbErrorTimeout</strong> – Call timed out</p></li>
+<li><p><strong>VmbErrorIncomplete</strong> – Capture is not active when the function is called </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__Capture_1ga0a0ddf0d7c6321f9bc2f49e829a75acf"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbCaptureQueueFlush</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle)</span></span></dt>
+<dd><p>Flush the capture queue. </p>
+<p>Control of all the currently queued frames will be returned to the user, leaving no frames in the capture queue. After this call, no frame notification will occur until frames are queued again</p>
+<p>Frames need to be revoked separately, if desired.</p>
+<p>This function can only succeeds, if no capture is currently active. If <a class="reference internal" href="#group__Capture_1gad930f14013c81ebf9accaa2e33a2eca6"><span class="std std-ref">VmbCaptureStart</span></a> has been called for the stream, but no successful call to <a class="reference internal" href="#group__Capture_1ga1d477d6cd758717d1379457ed0c3789e"><span class="std std-ref">VmbCaptureEnd</span></a> happened, the function fails with error code <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139afb2f7a7ee79cffe51d8cb67de537e94f"><span class="std std-ref">VmbErrorInUse</span></a>.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> The handle of the camera or stream to flush.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – No stream related to <code class="docutils literal notranslate"><span class="pre">handle</span></code> could be found.</p></li>
+<li><p><strong>VmbErrorInUse</strong> – There is currently an active capture </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="direct-access">
+<h2>Direct Access<a class="headerlink" href="#direct-access" title="Permalink to this headline"></a></h2>
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__DirectAccess_1ga2dcc658c4faafaab4dfff68ff618824d"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbMemoryRead</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">VmbUint64_t</span> <span class="pre">address,</span> <span class="pre">VmbUint32_t</span> <span class="pre">bufferSize,</span> <span class="pre">char</span> <span class="pre">*dataBuffer,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*sizeComplete)</span></span></dt>
+<dd><p>Read an array of bytes. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that allows memory access </p></li>
+<li><p><strong>address</strong> – <strong>[in]</strong> Address to be used for this read operation </p></li>
+<li><p><strong>bufferSize</strong> – <strong>[in]</strong> Size of the data buffer to read </p></li>
+<li><p><strong>dataBuffer</strong> – <strong>[out]</strong> Buffer to be filled </p></li>
+<li><p><strong>sizeComplete</strong> – <strong>[out]</strong> Size of the data actually read</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__DirectAccess_1ga88d1b30d3f97b32344a37075f8f37350"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbMemoryWrite</span> <span class="pre">(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">VmbUint64_t</span> <span class="pre">address,</span> <span class="pre">VmbUint32_t</span> <span class="pre">bufferSize,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*dataBuffer,</span> <span class="pre">VmbUint32_t</span> <span class="pre">*sizeComplete)</span></span></dt>
+<dd><p>Write an array of bytes. </p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that allows memory access </p></li>
+<li><p><strong>address</strong> – <strong>[in]</strong> Address to be used for this read operation </p></li>
+<li><p><strong>bufferSize</strong> – <strong>[in]</strong> Size of the data buffer to write </p></li>
+<li><p><strong>dataBuffer</strong> – <strong>[in]</strong> Data to write </p></li>
+<li><p><strong>sizeComplete</strong> – <strong>[out]</strong> Number of bytes successfully written; if an error occurs this is less than bufferSize</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorMoreData</strong> – Not all data were written; see sizeComplete value for the number of bytes written </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="load-save-settings">
+<h2>Load &amp; Save Settings<a class="headerlink" href="#load-save-settings" title="Permalink to this headline"></a></h2>
+<dl class="c struct">
+<dt class="sig sig-object c" id="c.VmbFeaturePersistSettings">
+<span class="target" id="structVmbFeaturePersistSettings"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistSettings</span></span></span><a class="headerlink" href="#c.VmbFeaturePersistSettings" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Parameters determining the operation mode of <a class="reference internal" href="#group__LoadSaveSettings_1ga7326c5908bf4699a2975289a1bd99c30"><span class="std std-ref">VmbSettingsSave</span></a> and <a class="reference internal" href="#group__LoadSaveSettings_1ga618d6ddc00a05f9a476e95148800d7b5"><span class="std std-ref">VmbSettingsLoad</span></a>. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-in">In</p>
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeaturePersistSettings.persistType">
+<span class="target" id="structVmbFeaturePersistSettings_1a69b37ca86fd7e5ba9ef89975385f39a0"></span><a class="reference internal" href="#c.VmbFeaturePersist_t" title="VmbFeaturePersist_t"><span class="n"><span class="pre">VmbFeaturePersist_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">persistType</span></span></span><a class="headerlink" href="#c.VmbFeaturePersistSettings.persistType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type of features that are to be saved. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeaturePersistSettings.modulePersistFlags">
+<span class="target" id="structVmbFeaturePersistSettings_1a9604b6c00134a362ec8de4927d1e07a3"></span><a class="reference internal" href="#c.VmbModulePersistFlags_t" title="VmbModulePersistFlags_t"><span class="n"><span class="pre">VmbModulePersistFlags_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">modulePersistFlags</span></span></span><a class="headerlink" href="#c.VmbFeaturePersistSettings.modulePersistFlags" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Flags specifying the modules to persist/load. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeaturePersistSettings.maxIterations">
+<span class="target" id="structVmbFeaturePersistSettings_1a29b31568a79c3f86e4c1814dd00f1f46"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">maxIterations</span></span></span><a class="headerlink" href="#c.VmbFeaturePersistSettings.maxIterations" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Number of iterations when loading settings. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeaturePersistSettings.loggingLevel">
+<span class="target" id="structVmbFeaturePersistSettings_1aefd09a24146d872cf50dfaf4ef9fd2c2"></span><a class="reference internal" href="#c.VmbLogLevel_t" title="VmbLogLevel_t"><span class="n"><span class="pre">VmbLogLevel_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">loggingLevel</span></span></span><a class="headerlink" href="#c.VmbFeaturePersistSettings.loggingLevel" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Determines level of detail for load/save settings logging. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFeaturePersistSettings_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1aa1459f69a5b0f766b3c51e7aaa6b0ded"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFeaturePersistSettings" title="VmbFeaturePersistSettings"><span class="n"><span class="pre">VmbFeaturePersistSettings</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistSettings_t</span></span></span><a class="headerlink" href="#c.VmbFeaturePersistSettings_t" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__LoadSaveSettings_1ga7326c5908bf4699a2975289a1bd99c30"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbSettingsSave</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">VmbFilePathChar_t</span> <span class="pre">*filePath,</span> <span class="pre">const</span> <span class="pre">VmbFeaturePersistSettings_t</span> <span class="pre">*settings,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofSettings)</span></span></dt>
+<dd><p>Write the current features related to a module to a xml file. </p>
+<p>Camera must be opened beforehand and function needs corresponding handle. With given filename parameter path and name of XML file can be determined. Additionally behaviour of function can be set with providing ‘persistent struct’.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle for an entity that allows register access </p></li>
+<li><p><strong>filePath</strong> – <strong>[in]</strong> The path to the file to save the settings to; relative paths are relative to the current working directory </p></li>
+<li><p><strong>settings</strong> – <strong>[in]</strong> Settings struct; if null the default settings are used (persist features except LUT for the remote device, maximum 5 iterations, logging only errors) </p></li>
+<li><p><strong>sizeofSettings</strong> – <strong>[in]</strong> Size of settings struct</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">filePath</span></code> is or the settings struct is invalid</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – If sizeofSettings the struct size does not match the size of the struct expected by the API</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The provided handle is insufficient to identify all the modules that should be saved</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorIO</strong> – There was an issue writing the file. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c function">
+<dt class="sig sig-object c">
+<span class="target" id="group__LoadSaveSettings_1ga618d6ddc00a05f9a476e95148800d7b5"></span><span class="sig-name descname"><span class="pre">IMEXPORTC</span> <span class="pre">VmbError_t</span> <span class="pre">VMB_CALL</span> <span class="pre">VmbSettingsLoad</span> <span class="pre">(VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">VmbFilePathChar_t</span> <span class="pre">*filePath,</span> <span class="pre">const</span> <span class="pre">VmbFeaturePersistSettings_t</span> <span class="pre">*settings,</span> <span class="pre">VmbUint32_t</span> <span class="pre">sizeofSettings)</span></span></dt>
+<dd><p>Load all feature values from xml file to device-related modules. </p>
+<p>The modules must be opened beforehand. If the handle is non-null it must be a valid handle other than the Vmb API handle. Additionally behaviour of function can be set with providing <code class="docutils literal notranslate"><span class="pre">settings</span></code> . Note that even in case of an failure some or all of the features may have been set for some of the modules.</p>
+<p>The error code <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a5b458eb5bb7f0ad29681b6cbdefae94a"><span class="std std-ref">VmbErrorRetriesExceeded</span></a> only indicates that the number of retries was insufficient to restore the features. Even if the features could not be restored for one of the modules, restoring the features is not aborted but the process continues for other modules, if present.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>handle</strong> – <strong>[in]</strong> Handle related to the modules to write the values to; may be null to indicate that modules should be identified based on the information provided in the input file</p></li>
+<li><p><strong>filePath</strong> – <strong>[in]</strong> The path to the file to load the settings from; relative paths are relative to the current working directory </p></li>
+<li><p><strong>settings</strong> – <strong>[in]</strong> Settings struct; pass null to use the default settings. If the <code class="docutils literal notranslate"><span class="pre">maxIterations</span></code> field is 0, the number of iterations is determined by the value loaded from the xml file </p></li>
+<li><p><strong>sizeofSettings</strong> – <strong>[in]</strong> Size of the settings struct</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return values</dt>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>VmbErrorSuccess</strong> – If no error</p></li>
+<li><p><strong>VmbErrorApiNotStarted</strong> – <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command</p></li>
+<li><p><strong>VmbErrorInvalidCall</strong> – If called from a chunk access callback</p></li>
+<li><p><strong>VmbErrorStructSize</strong> – If sizeofSettings the struct size does not match the size of the struct expected by the API</p></li>
+<li><p><strong>VmbErrorWrongType</strong> – <code class="docutils literal notranslate"><span class="pre">handle</span></code> is neither null nor a transport layer, interface, local device, remote device or stream handle</p></li>
+<li><p><strong>VmbErrorBadHandle</strong> – The given handle is not valid</p></li>
+<li><p><strong>VmbErrorAmbiguous</strong> – The modules to restore the settings for cannot be uniquely identified based on the information available</p></li>
+<li><p><strong>VmbErrorNotFound</strong> – The provided handle is insufficient to identify all the modules that should be restored</p></li>
+<li><p><strong>VmbErrorRetriesExceeded</strong> – Some or all of the features could not be restored with the max iterations specified</p></li>
+<li><p><strong>VmbErrorInvalidAccess</strong> – Operation is invalid with the current access mode</p></li>
+<li><p><strong>VmbErrorBadParameter</strong> – If <code class="docutils literal notranslate"><span class="pre">filePath</span></code> is null or the settings struct is invalid</p></li>
+<li><p><strong>VmbErrorIO</strong> – There was an issue with reading the file. </p></li>
+</ul>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An error code indicating success or the type of error that occurred.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="common-types-constants">
+<h2>Common Types &amp; Constants<a class="headerlink" href="#common-types-constants" title="Permalink to this headline"></a></h2>
+<p>Main header file for the common types of the APIs. </p>
+<p>This file describes all necessary definitions for types used within the Vmb APIs. These type definitions are designed to be portable from other languages and other operating systems. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-basic-types">Basic Types</p>
+<dl class="c macro">
+<dt class="sig sig-object c" id="c.VMB_FILE_PATH_LITERAL">
+<span class="target" id="VmbCommonTypes_8h_1ab8f88512ef6299f0fa40de901a63576b"></span><span class="sig-name descname"><span class="n"><span class="pre">VMB_FILE_PATH_LITERAL</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">value</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.VMB_FILE_PATH_LITERAL" title="Permalink to this definition"></a><br /></dt>
+<dd><p>macro for converting a c string literal into a system dependent string literal </p>
+<p>Adds L as prefix on Windows and is replaced by the unmodified value on other operating systems.</p>
+<p><div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">const</span> <span class="n">VmbFilePathChar_t</span><span class="o">*</span> <span class="n">path</span> <span class="o">=</span> <span class="n">VMB_FILE_PATH_LITERAL</span><span class="p">(</span><span class="s2">&quot;./some/path/tl.cti&quot;</span><span class="p">);</span>
+</pre></div>
+</div>
+ </p>
+</dd></dl>
+
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbBoolVal">
+<span class="target" id="VmbCommonTypes_8h_1aad1cb306db6258b339095f42664f843e"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbBoolVal</span></span></span><a class="headerlink" href="#c.VmbBoolVal" title="Permalink to this definition"></a><br /></dt>
+<dd><p>enum for bool values. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbBoolVal.VmbBoolTrue">
+<span class="target" id="VmbCommonTypes_8h_1aad1cb306db6258b339095f42664f843eafa2a02c8235e82fcb3821b27e59fad53"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbBoolTrue</span></span></span><a class="headerlink" href="#c.VmbBoolVal.VmbBoolTrue" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbBoolVal.VmbBoolFalse">
+<span class="target" id="VmbCommonTypes_8h_1aad1cb306db6258b339095f42664f843eac5a74ac28d0fbfa278e91c479ce03d2b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbBoolFalse</span></span></span><a class="headerlink" href="#c.VmbBoolVal.VmbBoolFalse" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbInt8_t">
+<span class="target" id="VmbCommonTypes_8h_1a42f6a99388c0dd7dd7ffdc558baa8394"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">signed</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInt8_t</span></span></span><a class="headerlink" href="#c.VmbInt8_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>8-bit signed integer. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbUint8_t">
+<span class="target" id="VmbCommonTypes_8h_1a80934d8646eab9c9457a145bd5223eef"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbUint8_t</span></span></span><a class="headerlink" href="#c.VmbUint8_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>8-bit unsigned integer. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbInt16_t">
+<span class="target" id="VmbCommonTypes_8h_1a735b4d6b9485020f4654af95aeac53b7"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">short</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInt16_t</span></span></span><a class="headerlink" href="#c.VmbInt16_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>16-bit signed integer. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbUint16_t">
+<span class="target" id="VmbCommonTypes_8h_1afc865d505147a585b38d909c6904dcad"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">short</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbUint16_t</span></span></span><a class="headerlink" href="#c.VmbUint16_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>16-bit unsigned integer. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbInt32_t">
+<span class="target" id="VmbCommonTypes_8h_1adccfd3d34e7df49c07df911acc0091a4"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInt32_t</span></span></span><a class="headerlink" href="#c.VmbInt32_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>32-bit signed integer. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbUint32_t">
+<span class="target" id="VmbCommonTypes_8h_1a8cffaedbf283752f99f538a9189836ab"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbUint32_t</span></span></span><a class="headerlink" href="#c.VmbUint32_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>32-bit unsigned integer. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbInt64_t">
+<span class="target" id="VmbCommonTypes_8h_1ad79e9c3be077678c59cc7cca122e748d"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInt64_t</span></span></span><a class="headerlink" href="#c.VmbInt64_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>64-bit signed integer. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbUint64_t">
+<span class="target" id="VmbCommonTypes_8h_1a01862dbc8142f7584542d1ba6bc17334"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="kt"><span class="pre">long</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbUint64_t</span></span></span><a class="headerlink" href="#c.VmbUint64_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>64-bit unsigned integer. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbHandle_t">
+<span class="target" id="VmbCommonTypes_8h_1a7da33444556912ae2a73509f40d7927e"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">VmbHandle_t</span></span></span><a class="headerlink" href="#c.VmbHandle_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Handle, e.g. for a camera. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbBool_t">
+<span class="target" id="VmbCommonTypes_8h_1a21241df9eb1895a27d6308417497de55"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbBool_t</span></span></span><a class="headerlink" href="#c.VmbBool_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Boolean type (equivalent to char). </p>
+<p>For values see <a class="reference internal" href="#VmbCommonTypes_8h_1aad1cb306db6258b339095f42664f843e"><span class="std std-ref">VmbBoolVal</span></a> </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCommonTypes_8h_1a91c7a871e4c8520864063614b0e51755"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbBoolVal" title="VmbBoolVal"><span class="n"><span class="pre">VmbBoolVal</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbBoolVal</span></span></span><br /></dt>
+<dd><p>enum for bool values. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbUchar_t">
+<span class="target" id="VmbCommonTypes_8h_1aaa43c6964e3498ef7fa44903f71c8f6a"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">unsigned</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbUchar_t</span></span></span><a class="headerlink" href="#c.VmbUchar_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>char type. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFilePathChar_t">
+<span class="target" id="VmbCommonTypes_8h_1a91139f3928988b88ef018b95d20ca607"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFilePathChar_t</span></span></span><a class="headerlink" href="#c.VmbFilePathChar_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Character type used for file paths </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-error-codes">Error Codes</p>
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbErrorType">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorType</span></span></span><a class="headerlink" href="#c.VmbErrorType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Error codes, returned by most functions. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorSuccess">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aabe8c56182da474e5abbb9497fea7520"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorSuccess</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorSuccess" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No error. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorInternalFault">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a61461aa045659f526d584fafa57ec3aa"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInternalFault</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorInternalFault" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unexpected fault in VmbC or driver. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorApiNotStarted">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a4548fd3f2187830d8376e4903062ecbb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorApiNotStarted</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorApiNotStarted" title="Permalink to this definition"></a><br /></dt>
+<dd><p><a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup()</span></a> was not called before the current command </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorNotFound">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aa1b09ab2f63fc50164d6fda0b7a48f07"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNotFound</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorNotFound" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The designated instance (camera, feature etc.) cannot be found. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorBadHandle">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a32980ed74f89ce865bba0a3196dd4c71"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorBadHandle</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorBadHandle" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The given handle is not valid. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorDeviceNotOpen">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a911900574957ca4c175e0257ec5a94a2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorDeviceNotOpen</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorDeviceNotOpen" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Device was not opened for usage. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorInvalidAccess">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a51a21244c7de830864f7fc208d5f2e50"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInvalidAccess</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorInvalidAccess" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Operation is invalid with the current access mode. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorBadParameter">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a599184e0f6f52cbf1ecb77c263e6a7d5"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorBadParameter</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorBadParameter" title="Permalink to this definition"></a><br /></dt>
+<dd><p>One of the parameters is invalid (usually an illegal pointer) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorStructSize">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aa87e5ceefc3100864b9b76959162c72d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorStructSize</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorStructSize" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The given struct size is not valid for this version of the API. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorMoreData">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139ae6de77b7e851d99131afe669e0ec6df8"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorMoreData</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorMoreData" title="Permalink to this definition"></a><br /></dt>
+<dd><p>More data available in a string/list than space is provided. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorWrongType">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a4b60e7d1e1ed8777f6af85ae3c845d85"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorWrongType</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorWrongType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Wrong feature type for this access function. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorInvalidValue">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a3b74a5b652e1f7cbb06dac3b34c998d4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInvalidValue</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorInvalidValue" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The value is not valid; either out of bounds or not an increment of the minimum. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorTimeout">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a035f5caaff715780f6a960d9fe73a599"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorTimeout</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorTimeout" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Timeout during wait. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorOther">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a7a5f6f7ea6c7c2c07c7cc608fe3bb2c9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorOther</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorOther" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Other error. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorResources">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a9af862a0ad254c79c7cedb617883985e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorResources</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorResources" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Resources not available (e.g. memory) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorInvalidCall">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a0be62f5df39209c4eedff61b4d840d70"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInvalidCall</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorInvalidCall" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Call is invalid in the current context (e.g. callback) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorNoTL">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a8bf5806518165ead304335dc224acdbb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNoTL</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorNoTL" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No transport layers are found. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorNotImplemented">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a4f63ce4028066e8e6471497b11cc1cc4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNotImplemented</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorNotImplemented" title="Permalink to this definition"></a><br /></dt>
+<dd><p>API feature is not implemented. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorNotSupported">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139af811cbff18ce8a7f50bb26d3ef4bb84e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNotSupported</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorNotSupported" title="Permalink to this definition"></a><br /></dt>
+<dd><p>API feature is not supported. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorIncomplete">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139ae16c860ef921bbc1e0eac46efce66c82"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorIncomplete</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorIncomplete" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The current operation was not completed (e.g. a multiple registers read or write) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorIO">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139af5ce974e1d39d003edd9c37ccba76b2d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorIO</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorIO" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Low level IO error in transport layer. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorValidValueSetNotPresent">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a4025f49bba15c7685de2983326e77f61"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorValidValueSetNotPresent</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorValidValueSetNotPresent" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The valid value set could not be retrieved, since the feature does not provide this property. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorGenTLUnspecified">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aec177d9d067a789f1fa651060a192bc0"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorGenTLUnspecified</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorGenTLUnspecified" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unspecified GenTL runtime error. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorUnspecified">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139afb5e8c539512aa8447517756645a72d7"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorUnspecified</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorUnspecified" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unspecified runtime error. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorBusy">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aafefeead6df901ddb68382c3af129152"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorBusy</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorBusy" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The responsible module/entity is busy executing actions. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorNoData">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a1ae31baa012dc1270bcc91d95db06b43"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNoData</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorNoData" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The function has no data to work on. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorParsingChunkData">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a6bd8e33ee852a9f91830982a7f7903a6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorParsingChunkData</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorParsingChunkData" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An error occurred parsing a buffer containing chunk data. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorInUse">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139afb2f7a7ee79cffe51d8cb67de537e94f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInUse</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorInUse" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Something is already in use. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorUnknown">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139ab0197555b22eb61593c733285782e570"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorUnknown</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorUnknown" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Error condition unknown. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorXml">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a38a24719eda2804e4f2a182f69f24d78"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorXml</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorXml" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Error parsing XML. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorNotAvailable">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a04996bac7a586d5914e8686fd2c02cee"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNotAvailable</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorNotAvailable" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Something is not available. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorNotInitialized">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a9613f47fe4033efb8cab371d1985e7a4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNotInitialized</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorNotInitialized" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Something is not initialized. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorInvalidAddress">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a50f87791b3f0f8fb988f6692e5826fa2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInvalidAddress</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorInvalidAddress" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The given address is out of range or invalid for internal reasons. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorAlready">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a8b62e2286a53367e759d70263eedd197"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorAlready</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorAlready" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Something has already been done. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorNoChunkData">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139aa6254ca3143df554374cb63f5edbc396"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorNoChunkData</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorNoChunkData" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A frame expected to contain chunk data does not contain chunk data. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorUserCallbackException">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a8efe193898c242b39fbbfe2233af3526"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorUserCallbackException</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorUserCallbackException" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A callback provided by the user threw an exception. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorFeaturesUnavailable">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a95932374ad0498546c90a7bd86d16431"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorFeaturesUnavailable</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorFeaturesUnavailable" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The XML for the module is currently not loaded; the module could be in the wrong state or the XML could not be retrieved or could not be parsed properly. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorTLNotFound">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a419ed0bd3ab3066eca35ae32943a8662"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorTLNotFound</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorTLNotFound" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A required transport layer could not be found or loaded. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorAmbiguous">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a5ce3ac47e4383781a82adf861e839b87"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorAmbiguous</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorAmbiguous" title="Permalink to this definition"></a><br /></dt>
+<dd><p>An entity cannot be uniquely identified based on the information provided. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorRetriesExceeded">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a5b458eb5bb7f0ad29681b6cbdefae94a"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorRetriesExceeded</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorRetriesExceeded" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Something could not be accomplished with a given number of retries. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorInsufficientBufferCount">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a00f1d75a5d7a05d68e55e0c041612246"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorInsufficientBufferCount</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorInsufficientBufferCount" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The operation requires more buffers. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbErrorType.VmbErrorCustom">
+<span class="target" id="VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a9ad210fe4d1d090508ff016367d530fb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorCustom</span></span></span><a class="headerlink" href="#c.VmbErrorType.VmbErrorCustom" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The minimum error code to use for user defined error codes to avoid conflict with existing error codes. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCommonTypes_8h_1ac408d03344fc16cddb93bfac80b258ed"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbErrorType" title="VmbErrorType"><span class="n"><span class="pre">VmbErrorType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbErrorType</span></span></span><br /></dt>
+<dd><p>Error codes, returned by most functions. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbError_t">
+<span class="target" id="VmbCommonTypes_8h_1a329cae4432206a18bb3fd9e0e35e850f"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbInt32_t" title="VmbInt32_t"><span class="n"><span class="pre">VmbInt32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbError_t</span></span></span><a class="headerlink" href="#c.VmbError_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for an error returned by API methods; for values see <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139"><span class="std std-ref">VmbErrorType</span></a>. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-version">Version</p>
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCommonTypes_8h_1a9cc294f8c37e395da2cf15d19190fef8"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbVersionInfo" title="VmbVersionInfo"><span class="n"><span class="pre">VmbVersionInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbVersionInfo_t</span></span></span><br /></dt>
+<dd><p>Version information. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-pixel-information">Pixel information</p>
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbPixelType">
+<span class="target" id="VmbCommonTypes_8h_1a7b317aec453be5d97578b1ac046cc8d9"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelType</span></span></span><a class="headerlink" href="#c.VmbPixelType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Indicates if pixel is monochrome or RGB. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelType.VmbPixelMono">
+<span class="target" id="VmbCommonTypes_8h_1a7b317aec453be5d97578b1ac046cc8d9a594ef645901180350f04badd74fd947d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelMono</span></span></span><a class="headerlink" href="#c.VmbPixelType.VmbPixelMono" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome pixel. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelType.VmbPixelColor">
+<span class="target" id="VmbCommonTypes_8h_1a7b317aec453be5d97578b1ac046cc8d9a8bb20a6d42737278b7c02a45d17a4d06"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelColor</span></span></span><a class="headerlink" href="#c.VmbPixelType.VmbPixelColor" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel bearing color information. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbPixelOccupyType">
+<span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupyType</span></span></span><a class="headerlink" href="#c.VmbPixelOccupyType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Indicates number of bits for a pixel. Needed for building values of <a class="reference internal" href="#VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0b"><span class="std std-ref">VmbPixelFormatType</span></a>. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelOccupyType.VmbPixelOccupy8Bit">
+<span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5a634a1b9103990b59b19c6ed48e67bc0d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy8Bit</span></span></span><a class="headerlink" href="#c.VmbPixelOccupyType.VmbPixelOccupy8Bit" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 8 bits. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelOccupyType.VmbPixelOccupy10Bit">
+<span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5a817bc910eda6039188454fe692152b4d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy10Bit</span></span></span><a class="headerlink" href="#c.VmbPixelOccupyType.VmbPixelOccupy10Bit" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 10 bits. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelOccupyType.VmbPixelOccupy12Bit">
+<span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5a2f21090b3e2010e98538fc0fb9110f9d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy12Bit</span></span></span><a class="headerlink" href="#c.VmbPixelOccupyType.VmbPixelOccupy12Bit" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 12 bits. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelOccupyType.VmbPixelOccupy14Bit">
+<span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5a941e6226ca788e23c7cc5e959b4f3a05"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy14Bit</span></span></span><a class="headerlink" href="#c.VmbPixelOccupyType.VmbPixelOccupy14Bit" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 14 bits. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelOccupyType.VmbPixelOccupy16Bit">
+<span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5ae40aae1273cc23a64027a8c6fb42e13a"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy16Bit</span></span></span><a class="headerlink" href="#c.VmbPixelOccupyType.VmbPixelOccupy16Bit" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 16 bits. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelOccupyType.VmbPixelOccupy24Bit">
+<span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5afd69ad6af6edadf70ebadd4d7f37a145"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy24Bit</span></span></span><a class="headerlink" href="#c.VmbPixelOccupyType.VmbPixelOccupy24Bit" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 24 bits. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelOccupyType.VmbPixelOccupy32Bit">
+<span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5a4ac563107ec52efe7b92305baa731fe4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy32Bit</span></span></span><a class="headerlink" href="#c.VmbPixelOccupyType.VmbPixelOccupy32Bit" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 32 bits. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelOccupyType.VmbPixelOccupy48Bit">
+<span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5abfe0690725c8d4c831c862d8551e241a"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy48Bit</span></span></span><a class="headerlink" href="#c.VmbPixelOccupyType.VmbPixelOccupy48Bit" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 48 bits. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelOccupyType.VmbPixelOccupy64Bit">
+<span class="target" id="VmbCommonTypes_8h_1a6d711c2edc7be6d0afcae93fa45b05b5ad7ab115929b300452f13be973613a00c"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupy64Bit</span></span></span><a class="headerlink" href="#c.VmbPixelOccupyType.VmbPixelOccupy64Bit" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel effectively occupies 64 bits. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0b"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatType</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Pixel format types. As far as possible, the Pixel Format Naming Convention (PFNC) has been followed, allowing a few deviations. If data spans more than one byte, it is always LSB aligned, except if stated differently. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatMono8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bac5dcf7182ae5ebc2297475f2c51c2807"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatMono8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 8 bits (PFNC: Mono8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatMono10">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba867fb11cc96272ba267d8c5f9e3f7a91"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono10</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatMono10" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 10 bits in 16 bits (PFNC: Mono10) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatMono10p">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba870283912d1b27128c816f3a983e4bdd"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono10p</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatMono10p" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 10 bits in 16 bits (PFNC: Mono10p) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatMono12">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba7a7a671bfef223ec4e317cafbb43bd4c"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono12</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatMono12" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 12 bits in 16 bits (PFNC: Mono12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatMono12Packed">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bafee9644f097a32598e00c92b469da83d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono12Packed</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatMono12Packed" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 2x12 bits in 24 bits (GEV:Mono12Packed) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatMono12p">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba08fffd39fadd837de83d3f8a1f51732e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono12p</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatMono12p" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 2x12 bits in 24 bits (PFNC: MonoPacked) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatMono14">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba94f0fcefc2299dc5a37ca34abf72a2bb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono14</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatMono14" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 14 bits in 16 bits (PFNC: Mono14) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatMono16">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae8c2a7e9a3158d2bd26ee1888f8323c9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatMono16</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatMono16" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Monochrome, 16 bits (PFNC: Mono16) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGR8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba12b2b38f392c1864d826d0a5b6cd4393"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGR8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 8 bits, starting with GR line (PFNC: BayerGR8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerRG8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba740089fbea08cd548437ce5ea8c09b5c"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerRG8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 8 bits, starting with RG line (PFNC: BayerRG8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGB8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba2db1897b3b0c3514eaa292012351f18b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGB8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 8 bits, starting with GB line (PFNC: BayerGB8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerBG8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bacecb15736fa95a4d9c0d9fd77970f34f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerBG8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 8 bits, starting with BG line (PFNC: BayerBG8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGR10">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baa5c8f01a0405a8586f76d4214eeb62cf"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR10</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGR10" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits in 16 bits, starting with GR line (PFNC: BayerGR10) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerRG10">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae86a6ecc2004ae90c900632e1a7b58ef"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG10</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerRG10" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits in 16 bits, starting with RG line (PFNC: BayerRG10) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGB10">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba10a0e16e8db6caa5ec8227a99b15e11b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB10</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGB10" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits in 16 bits, starting with GB line (PFNC: BayerGB10) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerBG10">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bab53fe343db7628bf37a351854aaf8c7b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG10</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerBG10" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits in 16 bits, starting with BG line (PFNC: BayerBG10) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGR12">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba1407cf252432ec98313bab07b812c3ad"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR12</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGR12" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits in 16 bits, starting with GR line (PFNC: BayerGR12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerRG12">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baa5ca00782ba61470f32cd9adbc3eac80"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG12</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerRG12" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits in 16 bits, starting with RG line (PFNC: BayerRG12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGB12">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba769a8fa9749e877096db87252a60dc46"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB12</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGB12" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits in 16 bits, starting with GB line (PFNC: BayerGB12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerBG12">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0babaec79651c4b93751469b5140c1cd61d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG12</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerBG12" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits in 16 bits, starting with BG line (PFNC: BayerBG12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGR12Packed">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae77ac92566f31831280796011fa63ec2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR12Packed</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGR12Packed" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 2x12 bits in 24 bits, starting with GR line (GEV:BayerGR12Packed) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerRG12Packed">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bab46bd6cf365b613162b318b8d07580b0"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG12Packed</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerRG12Packed" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 2x12 bits in 24 bits, starting with RG line (GEV:BayerRG12Packed) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGB12Packed">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0babf1f159cf0130700174210449820b927"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB12Packed</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGB12Packed" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 2x12 bits in 24 bits, starting with GB line (GEV:BayerGB12Packed) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerBG12Packed">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba229135a55a31bc0ecd131ade1b5e2482"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG12Packed</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerBG12Packed" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 2x12 bits in 24 bits, starting with BG line (GEV:BayerBG12Packed) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGR10p">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba532b95c86dabacb28006053c2c028361"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR10p</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGR10p" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits continuous packed, starting with GR line (PFNC: BayerGR10p) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerRG10p">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba259b1f09cb729756fbeafcf82e945be4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG10p</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerRG10p" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits continuous packed, starting with RG line (PFNC: BayerRG10p) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGB10p">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba09686edc6d77bc5e6b7f871068e85cf3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB10p</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGB10p" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits continuous packed, starting with GB line (PFNC: BayerGB10p) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerBG10p">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baa8cf7f7265cdbcbec53ec75c0c04f294"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG10p</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerBG10p" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 10 bits continuous packed, starting with BG line (PFNC: BayerBG10p) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGR12p">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bac8c8eb720985a41ae157e2e0b9c1d785"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR12p</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGR12p" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits continuous packed, starting with GR line (PFNC: BayerGR12p) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerRG12p">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba09fa010b93a60420bb6cd4437b504a2f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG12p</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerRG12p" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits continuous packed, starting with RG line (PFNC: BayerRG12p) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGB12p">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba121d0de1d646eedeb8cdec8856bb90ed"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB12p</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGB12p" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits continuous packed, starting with GB line (PFNC: BayerGB12p) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerBG12p">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba4001d087ef848a49004f5b9b4294cde6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG12p</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerBG12p" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 12 bits continuous packed, starting with BG line (PFNC: BayerBG12p) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGR16">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baff2883d18e0b5039546ce2d418adcac1"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGR16</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGR16" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 16 bits, starting with GR line (PFNC: BayerGR16) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerRG16">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bab5f6156667550a133da465c250d84961"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerRG16</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerRG16" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 16 bits, starting with RG line (PFNC: BayerRG16) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerGB16">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baa4e5965ba7f836a8d40d9da9fd8d75d5"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerGB16</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerGB16" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 16 bits, starting with GB line (PFNC: BayerGB16) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBayerBG16">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba6f1b96cabda57087edb50b46b9528b45"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBayerBG16</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBayerBG16" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Bayer-color, 16 bits, starting with BG line (PFNC: BayerBG16) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatRgb8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba064ad701f2dc23623175b3029ac41178"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgb8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatRgb8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 8 bits x 3 (PFNC: RGB8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBgr8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bab8ea1ccd8a76258b2da300e81dc35685"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgr8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBgr8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>BGR, 8 bits x 3 (PFNC: BGR8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatRgb10">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bab6e6b0e83341c4e9cde7254d05ce2121"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgb10</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatRgb10" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBgr10">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae6e755f3403d02ef37264877355b12c1"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgr10</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBgr10" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatRgb12">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba6d3466ba1e7290989c5f4071da837edb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgb12</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatRgb12" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBgr12">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bac728027fe96775761cf1930dcdeb60a2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgr12</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBgr12" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 12 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatRgb14">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bac366e2cf4bea2b7bc44ecea949808f13"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgb14</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatRgb14" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 14 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBgr14">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba83e3c3486e273e29b183bcfa74f2321f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgr14</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBgr14" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 14 bits in 16 bits x 3 (PFNC: RGB12) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatRgb16">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad0a1c659b006df5cc89052cf529ba8a3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgb16</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatRgb16" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 16 bits x 3 (PFNC: RGB16) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBgr16">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae2181bd9918df08f174d32b80864a41e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgr16</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBgr16" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGB, 16 bits x 3 (PFNC: RGB16) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatArgb8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad99a067ff913336296b51663e8260bd6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatArgb8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatArgb8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>ARGB, 8 bits x 4 (PFNC: RGBa8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatRgba8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba9da1b11d45cdae17460094013b3f519d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgba8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatRgba8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBgra8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad0428fef221599d29cab4e7c3763b613"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgra8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBgra8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>BGRA, 8 bits x 4 (PFNC: BGRa8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatRgba10">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad7602fe7fc49f2f59e1828c95026cee2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgba10</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatRgba10" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBgra10">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba83f71f8ed9d9dbd007e5c1738b03ebe3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgra10</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBgra10" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatRgba12">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba79929532df0ca523b8ee4523b3e0f9db"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgba12</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatRgba12" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBgra12">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba93d1da7ee91e1e877d9cf5cc15205efd"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgra12</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBgra12" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatRgba14">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baaab9849c9242a15245d2bc550c389365"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgba14</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatRgba14" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBgra14">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba4126807d63279f4df2342aca1ec46ced"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgra14</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBgra14" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatRgba16">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba31d3bbc9c29847790bc243f0e4720878"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatRgba16</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatRgba16" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatBgra16">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baa11c5353a787ce32910c0b9d54699086"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatBgra16</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatBgra16" title="Permalink to this definition"></a><br /></dt>
+<dd><p>RGBA, 8 bits x 4, legacy name. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYuv411">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba8904a44d3ad8e1e3e1358857dd94e95f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYuv411</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYuv411" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YUV 4:1:1 with 8 bits (PFNC: YUV411_8_UYYVYY, GEV:YUV411Packed) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYuv422">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba54360b011cd32e827535cc293b8951fe"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYuv422</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYuv422" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YUV 4:2:2 with 8 bits (PFNC: YUV422_8_UYVY, GEV:YUV422Packed) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYuv444">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba8f9dfd75646ae059ad3a0fb01780e69e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYuv444</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYuv444" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YUV 4:4:4 with 8 bits (PFNC: YUV8_UYV, GEV:YUV444Packed) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYuv422_8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba10d40afb0428bea18de1300ddf95b6c0"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYuv422_8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYuv422_8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YUV 4:2:2 with 8 bits Channel order YUYV (PFNC: YUV422_8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr8_CbYCr">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba08ff6e627210662956efba5f8b601d14"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr8_CbYCr</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr8_CbYCr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:4:4 with 8 bits (PFNC: YCbCr8_CbYCr) - identical to VmbPixelFormatYuv444. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr422_8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bae1885c2bb61ae3a8d1b64971b3bb8b49"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr422_8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr422_8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:2:2 8-bit YCbYCr (PFNC: YCbCr422_8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr411_8_CbYYCrYY">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba437e87e3ba60fc8d99355647c65ae6a6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr411_8_CbYYCrYY</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr411_8_CbYYCrYY" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:1:1 with 8 bits (PFNC: YCbCr411_8_CbYYCrYY) - identical to VmbPixelFormatYuv411. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr601_8_CbYCr">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba14c6664d2674be1d349b5b0371ad3dc4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr601_8_CbYCr</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr601_8_CbYCr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr601 4:4:4 8-bit CbYCrt (PFNC: YCbCr601_8_CbYCr) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba54b961fe9bffad74b9cdc7a5604c0ceb"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr601_422_8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr601 4:2:2 8-bit YCbYCr (PFNC: YCbCr601_422_8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr601_411_8_CbYYCrYY">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad85548615ddfc14a409732235e588b01"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr601_411_8_CbYYCrYY</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr601_411_8_CbYYCrYY" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr601 4:1:1 8-bit CbYYCrYY (PFNC: YCbCr601_411_8_CbYYCrYY) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr709_8_CbYCr">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba15b649b55c41f85e7618afd91c4079e6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr709_8_CbYCr</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr709_8_CbYCr" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr709 4:4:4 8-bit CbYCr (PFNC: YCbCr709_8_CbYCr) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba89083023a9f84f5aca91fc3fe0020198"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr709_422_8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr709 4:2:2 8-bit YCbYCr (PFNC: YCbCr709_422_8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr709_411_8_CbYYCrYY">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bac806e22187d7c1c32b3c2c47e3ed8dc1"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr709_411_8_CbYYCrYY</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr709_411_8_CbYYCrYY" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr709 4:1:1 8-bit CbYYCrYY (PFNC: YCbCr709_411_8_CbYYCrYY) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr422_8_CbYCrY">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba9c5436f11c68632b45306a27a583d077"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr422_8_CbYCrY</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr422_8_CbYCrY" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:2:2 with 8 bits (PFNC: YCbCr422_8_CbYCrY) - identical to VmbPixelFormatYuv422. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8_CbYCrY">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba0859af9982a44da67028d78435640c83"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr601_422_8_CbYCrY</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8_CbYCrY" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr601 4:2:2 8-bit CbYCrY (PFNC: YCbCr601_422_8_CbYCrY) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8_CbYCrY">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba85da6670eba6c6815415342317c2ce56"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr709_422_8_CbYCrY</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8_CbYCrY" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr709 4:2:2 8-bit CbYCrY (PFNC: YCbCr709_422_8_CbYCrY) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr411_8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0baea829f36cce127ae9f2215c7f28d4784"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr411_8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr411_8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:1:1 8-bit YYCbYYCr (PFNC: YCbCr411_8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatYCbCr8">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0ba42736647bc50f478d4e32ff0bb6de504"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatYCbCr8</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatYCbCr8" title="Permalink to this definition"></a><br /></dt>
+<dd><p>YCbCr 4:4:4 8-bit YCbCr (PFNC: YCbCr8) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPixelFormatType.VmbPixelFormatLast">
+<span class="target" id="VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0bad55d82aa1452463f13fb12c764096d42"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatLast</span></span></span><a class="headerlink" href="#c.VmbPixelFormatType.VmbPixelFormatLast" title="Permalink to this definition"></a><br /></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCommonTypes_8h_1a77f858b4dc62c340deca6432e124afb5"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbPixelType" title="VmbPixelType"><span class="n"><span class="pre">VmbPixelType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelType</span></span></span><br /></dt>
+<dd><p>Indicates if pixel is monochrome or RGB. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCommonTypes_8h_1aa1a0a8173c03ec66761b04be2f1167c7"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbPixelOccupyType" title="VmbPixelOccupyType"><span class="n"><span class="pre">VmbPixelOccupyType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelOccupyType</span></span></span><br /></dt>
+<dd><p>Indicates number of bits for a pixel. Needed for building values of <a class="reference internal" href="#VmbCommonTypes_8h_1a8566a40ee924c3f3b297bf87b56ed8e3"><span class="std std-ref">VmbPixelFormatType</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCommonTypes_8h_1a8566a40ee924c3f3b297bf87b56ed8e3"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbPixelFormatType" title="VmbPixelFormatType"><span class="n"><span class="pre">VmbPixelFormatType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormatType</span></span></span><br /></dt>
+<dd><p>Pixel format types. As far as possible, the Pixel Format Naming Convention (PFNC) has been followed, allowing a few deviations. If data spans more than one byte, it is always LSB aligned, except if stated differently. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbPixelFormat_t">
+<span class="target" id="VmbCommonTypes_8h_1a01fb00de99410cb65203ae86adec5573"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPixelFormat_t</span></span></span><a class="headerlink" href="#c.VmbPixelFormat_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for the pixel format; for values see <a class="reference internal" href="#VmbCommonTypes_8h_1a874d2466e4ee27bc396bea5bed7c8c0b"><span class="std std-ref">VmbPixelFormatType</span></a>. </p>
+</dd></dl>
+
+</div>
+<dl class="c struct">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbVersionInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbVersionInfo</span></span></span><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCommonTypes.h&gt;</em></div>
+<p>Version information. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbVersionInfo_1a34a27a54a2493a9d83a0b266c8ed90dd"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">major</span></span></span><br /></dt>
+<dd><p>Major version number. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbVersionInfo_1a536ccd98d967e893383e6ce24432cb9f"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">minor</span></span></span><br /></dt>
+<dd><p>Minor version number. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbVersionInfo_1a939b801973e05f81de03dd1fbc486f55"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">patch</span></span></span><br /></dt>
+<dd><p>Patch version number. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<p>File containing constants used in the Vmb C API. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-defines">Defines</p>
+<dl class="c macro">
+<dt class="sig sig-object c" id="c.VMB_PATH_SEPARATOR_CHAR">
+<span class="target" id="VmbConstants_8h_1a08725ef1889b2d77267fe5996856318c"></span><span class="sig-name descname"><span class="n"><span class="pre">VMB_PATH_SEPARATOR_CHAR</span></span></span><a class="headerlink" href="#c.VMB_PATH_SEPARATOR_CHAR" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the character used to separate file paths in the parameter of <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup</span></a> </p>
+</dd></dl>
+
+<dl class="c macro">
+<dt class="sig sig-object c" id="c.VMB_PATH_SEPARATOR_STRING">
+<span class="target" id="VmbConstants_8h_1a2d44ce9384014c230f4083a8877d2605"></span><span class="sig-name descname"><span class="n"><span class="pre">VMB_PATH_SEPARATOR_STRING</span></span></span><a class="headerlink" href="#c.VMB_PATH_SEPARATOR_STRING" title="Permalink to this definition"></a><br /></dt>
+<dd><p>the string used to separate file paths in the parameter of <a class="reference internal" href="#group__Init_1gace3a3b10e68d4a80975782a05d4be4f2"><span class="std std-ref">VmbStartup</span></a> </p>
+</dd></dl>
+
+<dl class="c macro">
+<dt class="sig sig-object c" id="c.VMB_SFNC_NAMESPACE_CUSTOM">
+<span class="target" id="group__SfncNamespaces_1gadcd754d97a2ef5b083548bfdf658d0e4"></span><span class="sig-name descname"><span class="n"><span class="pre">VMB_SFNC_NAMESPACE_CUSTOM</span></span></span><a class="headerlink" href="#c.VMB_SFNC_NAMESPACE_CUSTOM" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The C string identifying the namespace of features not defined in the SFNC standard. </p>
+</dd></dl>
+
+<dl class="c macro">
+<dt class="sig sig-object c" id="c.VMB_SFNC_NAMESPACE_STANDARD">
+<span class="target" id="group__SfncNamespaces_1ga5b723a183e519710f0c69d49467177f7"></span><span class="sig-name descname"><span class="n"><span class="pre">VMB_SFNC_NAMESPACE_STANDARD</span></span></span><a class="headerlink" href="#c.VMB_SFNC_NAMESPACE_STANDARD" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The C string identifying the namespace of features defined in the SFNC standard. </p>
+</dd></dl>
+
+</div>
+<p>Struct definitions for the VmbC API. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-transport-layer">Transport layer</p>
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerType</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Camera or transport layer type (for instance U3V or GEV). </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeUnknown">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600ace3ce8a341c5d89d039576c96960d9e9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeUnknown</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeUnknown" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Interface is not known to this version of the API. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeGEV">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a0bf640b032f663e4c2f47e244e0ee52f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeGEV</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeGEV" title="Permalink to this definition"></a><br /></dt>
+<dd><p>GigE Vision. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeCL">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a42975bc028013abcc8af3a89fbc8558a"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeCL</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeCL" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Camera Link. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeIIDC">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a61f78427883eb1df84e7274e220f9457"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeIIDC</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeIIDC" title="Permalink to this definition"></a><br /></dt>
+<dd><p>IIDC 1394. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeUVC">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a6dbf194a52a16b338922c0de2cdca067"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeUVC</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeUVC" title="Permalink to this definition"></a><br /></dt>
+<dd><p>USB video class. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeCXP">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a93e17ba9ade873fdfe7b6d240716e673"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeCXP</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeCXP" title="Permalink to this definition"></a><br /></dt>
+<dd><p>CoaXPress. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeCLHS">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a8b49ca3115ee97a5172753fd6c29a61b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeCLHS</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeCLHS" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Camera Link HS. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeU3V">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600ad781c65b23b2af2a2fb47fb147d5481e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeU3V</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeU3V" title="Permalink to this definition"></a><br /></dt>
+<dd><p>USB3 Vision Standard. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeEthernet">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a569f18e16e6ab48d16c42619c0c3e6f3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeEthernet</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeEthernet" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Generic Ethernet. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypePCI">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a9c9b70cfd32284d1c2a5fd369c9da52a"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypePCI</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypePCI" title="Permalink to this definition"></a><br /></dt>
+<dd><p>PCI / PCIe. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeCustom">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a795f7f6dff31c28684503e29695e214d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeCustom</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeCustom" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Non standard. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType.VmbTransportLayerTypeMixed">
+<span class="target" id="VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600a463590e1892752076239e767620ff96e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerTypeMixed</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType.VmbTransportLayerTypeMixed" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Mixed (transport layer only) </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1ae375472152326254d432dffa7a0091ea"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbTransportLayerType" title="VmbTransportLayerType"><span class="n"><span class="pre">VmbTransportLayerType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerType</span></span></span><br /></dt>
+<dd><p>Camera or transport layer type (for instance U3V or GEV). </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbTransportLayerType_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1abc7e651fec35fdde3cf78134b7f77ef6"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerType_t</span></span></span><a class="headerlink" href="#c.VmbTransportLayerType_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for an Interface; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a39ad4af124ba898397ada65e5a8fb600"><span class="std std-ref">VmbTransportLayerType</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1ae1a4c161eea59140be81d940f1fc3941"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbTransportLayerInfo" title="VmbTransportLayerInfo"><span class="n"><span class="pre">VmbTransportLayerInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerInfo_t</span></span></span><br /></dt>
+<dd><p>Transport layer information. </p>
+<p>Holds read-only information about a transport layer. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-interface">Interface</p>
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1af8bce4bacba54f9a115dda31af6b0f5f"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbInterfaceInfo" title="VmbInterfaceInfo"><span class="n"><span class="pre">VmbInterfaceInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInterfaceInfo_t</span></span></span><br /></dt>
+<dd><p>Interface information. </p>
+<p>Holds read-only information about an interface. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-camera">Camera</p>
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbAccessModeType">
+<span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeType</span></span></span><a class="headerlink" href="#c.VmbAccessModeType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Access mode for cameras. </p>
+<p>Used in VmbCameraInfo_t as flags, so multiple modes can be announced, while in <a class="reference internal" href="#group__CameraInfo_1gaaff15baa63bc7975dfdabb94c83c918b"><span class="std std-ref">VmbCameraOpen()</span></a>, no combination must be used. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbAccessModeType.VmbAccessModeNone">
+<span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536a07fbe0ccca56fe17617d2585c589532b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeNone</span></span></span><a class="headerlink" href="#c.VmbAccessModeType.VmbAccessModeNone" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No access. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbAccessModeType.VmbAccessModeFull">
+<span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536ae99d9c5f70a65ffe32b60b4f36e676fd"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeFull</span></span></span><a class="headerlink" href="#c.VmbAccessModeType.VmbAccessModeFull" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Read and write access. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbAccessModeType.VmbAccessModeRead">
+<span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536a2319677b6c957feab0c4db8de4471e8f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeRead</span></span></span><a class="headerlink" href="#c.VmbAccessModeType.VmbAccessModeRead" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Read-only access. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbAccessModeType.VmbAccessModeUnknown">
+<span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536a75aa52e5b1b2a5d4029fdf2b4235e769"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeUnknown</span></span></span><a class="headerlink" href="#c.VmbAccessModeType.VmbAccessModeUnknown" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Access type unknown. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbAccessModeType.VmbAccessModeExclusive">
+<span class="target" id="VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536a9f22c90006a5d67f3d5b915d752a39e9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeExclusive</span></span></span><a class="headerlink" href="#c.VmbAccessModeType.VmbAccessModeExclusive" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Read and write access without permitting access for other consumers. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1aa0d1156f6eb619730081886bd2f4a951"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbAccessModeType" title="VmbAccessModeType"><span class="n"><span class="pre">VmbAccessModeType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessModeType</span></span></span><br /></dt>
+<dd><p>Access mode for cameras. </p>
+<p>Used in VmbCameraInfo_t as flags, so multiple modes can be announced, while in <a class="reference internal" href="#group__CameraInfo_1gaaff15baa63bc7975dfdabb94c83c918b"><span class="std std-ref">VmbCameraOpen()</span></a>, no combination must be used. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbAccessMode_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1ace6bd47e23b7e2c05ef3aa7357ed56d4"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbAccessMode_t</span></span></span><a class="headerlink" href="#c.VmbAccessMode_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for an AccessMode; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a51ef665169170f910717cc21ae287536"><span class="std std-ref">VmbAccessModeType</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1ab948547f0a1e34097c98c9151f6eb68e"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbCameraInfo" title="VmbCameraInfo"><span class="n"><span class="pre">VmbCameraInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbCameraInfo_t</span></span></span><br /></dt>
+<dd><p>Camera information. </p>
+<p>Holds read-only information about a camera. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-feature">Feature</p>
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbFeatureDataType">
+<span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataType</span></span></span><a class="headerlink" href="#c.VmbFeatureDataType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Supported feature data types. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureDataType.VmbFeatureDataUnknown">
+<span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a6492493b3581a305f539f37701aad9e5"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataUnknown</span></span></span><a class="headerlink" href="#c.VmbFeatureDataType.VmbFeatureDataUnknown" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unknown feature type. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureDataType.VmbFeatureDataInt">
+<span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a8e7d9b624c5b97737432e040f6eb625f"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataInt</span></span></span><a class="headerlink" href="#c.VmbFeatureDataType.VmbFeatureDataInt" title="Permalink to this definition"></a><br /></dt>
+<dd><p>64-bit integer feature </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureDataType.VmbFeatureDataFloat">
+<span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36ac7b3df65db6f03e945e0f290d336773d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataFloat</span></span></span><a class="headerlink" href="#c.VmbFeatureDataType.VmbFeatureDataFloat" title="Permalink to this definition"></a><br /></dt>
+<dd><p>64-bit floating point feature </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureDataType.VmbFeatureDataEnum">
+<span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a141c37d1c1e0b8208bb57fc0dfaf9ec4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataEnum</span></span></span><a class="headerlink" href="#c.VmbFeatureDataType.VmbFeatureDataEnum" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Enumeration feature. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureDataType.VmbFeatureDataString">
+<span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a0cf1f7d8a26a40bb51949447d828ea73"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataString</span></span></span><a class="headerlink" href="#c.VmbFeatureDataType.VmbFeatureDataString" title="Permalink to this definition"></a><br /></dt>
+<dd><p>String feature. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureDataType.VmbFeatureDataBool">
+<span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a09fe439038590ed33929d9ffeec98ae3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataBool</span></span></span><a class="headerlink" href="#c.VmbFeatureDataType.VmbFeatureDataBool" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Boolean feature. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureDataType.VmbFeatureDataCommand">
+<span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36a83227388ecf0a34336da122b98fb7074"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataCommand</span></span></span><a class="headerlink" href="#c.VmbFeatureDataType.VmbFeatureDataCommand" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Command feature. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureDataType.VmbFeatureDataRaw">
+<span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36ad7c8cddc4764f79507af15bf9af1e1c6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataRaw</span></span></span><a class="headerlink" href="#c.VmbFeatureDataType.VmbFeatureDataRaw" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Raw (direct register access) feature. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureDataType.VmbFeatureDataNone">
+<span class="target" id="VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36ac68bd44ddc3cfb2f49a1bbe47b408948"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataNone</span></span></span><a class="headerlink" href="#c.VmbFeatureDataType.VmbFeatureDataNone" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature with no data. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbFeatureVisibilityType">
+<span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityType</span></span></span><a class="headerlink" href="#c.VmbFeatureVisibilityType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature visibility. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureVisibilityType.VmbFeatureVisibilityUnknown">
+<span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758a0d78ab3ad135167a5c62c4ae8349fb93"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityUnknown</span></span></span><a class="headerlink" href="#c.VmbFeatureVisibilityType.VmbFeatureVisibilityUnknown" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature visibility is not known. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureVisibilityType.VmbFeatureVisibilityBeginner">
+<span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758a5cf332b1f87cb57e565191262fd0e146"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityBeginner</span></span></span><a class="headerlink" href="#c.VmbFeatureVisibilityType.VmbFeatureVisibilityBeginner" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature is visible in feature list (beginner level) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureVisibilityType.VmbFeatureVisibilityExpert">
+<span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758aeaf2fed0acaae5c9ed63fa2f0dcbb312"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityExpert</span></span></span><a class="headerlink" href="#c.VmbFeatureVisibilityType.VmbFeatureVisibilityExpert" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature is visible in feature list (expert level) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureVisibilityType.VmbFeatureVisibilityGuru">
+<span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758ad14977ba01b711ff3629791def4edf97"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityGuru</span></span></span><a class="headerlink" href="#c.VmbFeatureVisibilityType.VmbFeatureVisibilityGuru" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature is visible in feature list (guru level) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureVisibilityType.VmbFeatureVisibilityInvisible">
+<span class="target" id="VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758af0ba43f86202e3bac5d853a87e3fbf07"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityInvisible</span></span></span><a class="headerlink" href="#c.VmbFeatureVisibilityType.VmbFeatureVisibilityInvisible" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature is visible in the feature list, but should be hidden in GUI applications. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbFeatureFlagsType">
+<span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13d"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsType</span></span></span><a class="headerlink" href="#c.VmbFeatureFlagsType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature flags. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureFlagsType.VmbFeatureFlagsNone">
+<span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13da8d5246f6fb93dbed50bca8e858c741d3"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsNone</span></span></span><a class="headerlink" href="#c.VmbFeatureFlagsType.VmbFeatureFlagsNone" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No additional information is provided. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureFlagsType.VmbFeatureFlagsRead">
+<span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13da3d4ce50039f7fb0d2c552924df49aa08"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsRead</span></span></span><a class="headerlink" href="#c.VmbFeatureFlagsType.VmbFeatureFlagsRead" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Static info about read access. Current status depends on access mode, check with <a class="reference internal" href="#group__GeneralFeatures_1ga003bcad157cbab8b57fd2519f0f4174c"><span class="std std-ref">VmbFeatureAccessQuery()</span></a> </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureFlagsType.VmbFeatureFlagsWrite">
+<span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13dae6b8419229e70cad316cf3799c48991b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsWrite</span></span></span><a class="headerlink" href="#c.VmbFeatureFlagsType.VmbFeatureFlagsWrite" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Static info about write access. Current status depends on access mode, check with <a class="reference internal" href="#group__GeneralFeatures_1ga003bcad157cbab8b57fd2519f0f4174c"><span class="std std-ref">VmbFeatureAccessQuery()</span></a> </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureFlagsType.VmbFeatureFlagsVolatile">
+<span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13dafad44efc898f6a9f0861a551eff86a3d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsVolatile</span></span></span><a class="headerlink" href="#c.VmbFeatureFlagsType.VmbFeatureFlagsVolatile" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Value may change at any time. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeatureFlagsType.VmbFeatureFlagsModifyWrite">
+<span class="target" id="VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13da6957ac38fa08ddb5398f0f58db7e94c4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsModifyWrite</span></span></span><a class="headerlink" href="#c.VmbFeatureFlagsType.VmbFeatureFlagsModifyWrite" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Value may change after a write. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1aaa725b6824f93defb4e78d366ccb58f0"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFeatureDataType" title="VmbFeatureDataType"><span class="n"><span class="pre">VmbFeatureDataType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureDataType</span></span></span><br /></dt>
+<dd><p>Supported feature data types. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFeatureData_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1ae2e957454319ec5d1978f3fbafb752af"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureData_t</span></span></span><a class="headerlink" href="#c.VmbFeatureData_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Data type for a Feature; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a2fbb971654735fc52670efa2bfecae36"><span class="std std-ref">VmbFeatureDataType</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a42e591bcabf2d18b1a5cfd511f8fa174"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFeatureVisibilityType" title="VmbFeatureVisibilityType"><span class="n"><span class="pre">VmbFeatureVisibilityType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibilityType</span></span></span><br /></dt>
+<dd><p>Feature visibility. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFeatureVisibility_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1a6560cac7bf7fa5ba125d2cfca0bbd73b"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureVisibility_t</span></span></span><a class="headerlink" href="#c.VmbFeatureVisibility_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for Feature visibility; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a63159563bf9b072a2bb894b4c2347758"><span class="std std-ref">VmbFeatureVisibilityType</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1adbea9be3cda11c3ed86e4e1702dc8511"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFeatureFlagsType" title="VmbFeatureFlagsType"><span class="n"><span class="pre">VmbFeatureFlagsType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlagsType</span></span></span><br /></dt>
+<dd><p>Feature flags. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFeatureFlags_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1a81a83b95087daa573736783d2bf0ffaa"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureFlags_t</span></span></span><a class="headerlink" href="#c.VmbFeatureFlags_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for Feature flags; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a1aa91f8168013080a4645e638d30a13d"><span class="std std-ref">VmbFeatureFlagsType</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1a1692a608984008db16057be8f21bf42d"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFeatureInfo" title="VmbFeatureInfo"><span class="n"><span class="pre">VmbFeatureInfo</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureInfo_t</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature information. </p>
+<p>Holds read-only information about a feature. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1acef6e50a236d55dd67b42b0cc1ed7d02"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFeatureEnumEntry" title="VmbFeatureEnumEntry"><span class="n"><span class="pre">VmbFeatureEnumEntry</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureEnumEntry_t</span></span></span><br /></dt>
+<dd><p>Info about possible entries of an enumeration feature. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-frame">Frame</p>
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbFrameStatusType">
+<span class="target" id="VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusType</span></span></span><a class="headerlink" href="#c.VmbFrameStatusType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Status of a frame transfer. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameStatusType.VmbFrameStatusComplete">
+<span class="target" id="VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0a3f5b6283c74f8b30e328bd2160f0f6c4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusComplete</span></span></span><a class="headerlink" href="#c.VmbFrameStatusType.VmbFrameStatusComplete" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame has been completed without errors. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameStatusType.VmbFrameStatusIncomplete">
+<span class="target" id="VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0a5057a4e8db869f3efa004c96b4a1b4aa"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusIncomplete</span></span></span><a class="headerlink" href="#c.VmbFrameStatusType.VmbFrameStatusIncomplete" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame could not be filled to the end. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameStatusType.VmbFrameStatusTooSmall">
+<span class="target" id="VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0a2184078b008d628f6b57b4f39a8ae545"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusTooSmall</span></span></span><a class="headerlink" href="#c.VmbFrameStatusType.VmbFrameStatusTooSmall" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame buffer was too small. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameStatusType.VmbFrameStatusInvalid">
+<span class="target" id="VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0a73381c0ef8595326ff1255ffb25f83f8"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusInvalid</span></span></span><a class="headerlink" href="#c.VmbFrameStatusType.VmbFrameStatusInvalid" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame buffer was invalid. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbFrameFlagsType">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsType</span></span></span><a class="headerlink" href="#c.VmbFrameFlagsType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame flags. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameFlagsType.VmbFrameFlagsNone">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a5b9e576e11f18b9e297c2310872f4f50"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsNone</span></span></span><a class="headerlink" href="#c.VmbFrameFlagsType.VmbFrameFlagsNone" title="Permalink to this definition"></a><br /></dt>
+<dd><p>No additional information is provided. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameFlagsType.VmbFrameFlagsDimension">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a3fcaa347d4927fd9f948d5e54f91ef9d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsDimension</span></span></span><a class="headerlink" href="#c.VmbFrameFlagsType.VmbFrameFlagsDimension" title="Permalink to this definition"></a><br /></dt>
+<dd><p>VmbFrame_t::width and VmbFrame_t::height are provided. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameFlagsType.VmbFrameFlagsOffset">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a3a08327e16afb4042399eb6eff4f0bd4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsOffset</span></span></span><a class="headerlink" href="#c.VmbFrameFlagsType.VmbFrameFlagsOffset" title="Permalink to this definition"></a><br /></dt>
+<dd><p>VmbFrame_t::offsetX and VmbFrame_t::offsetY are provided (ROI) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameFlagsType.VmbFrameFlagsFrameID">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5ae571b26d9a7c24811f7a315d53fd3ba6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsFrameID</span></span></span><a class="headerlink" href="#c.VmbFrameFlagsType.VmbFrameFlagsFrameID" title="Permalink to this definition"></a><br /></dt>
+<dd><p>VmbFrame_t::frameID is provided. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameFlagsType.VmbFrameFlagsTimestamp">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a5c31d43da7c9b93e9226f00121b3a313"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsTimestamp</span></span></span><a class="headerlink" href="#c.VmbFrameFlagsType.VmbFrameFlagsTimestamp" title="Permalink to this definition"></a><br /></dt>
+<dd><p>VmbFrame_t::timestamp is provided. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameFlagsType.VmbFrameFlagsImageData">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a8e900db1cb18370bed232833a5855f19"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsImageData</span></span></span><a class="headerlink" href="#c.VmbFrameFlagsType.VmbFrameFlagsImageData" title="Permalink to this definition"></a><br /></dt>
+<dd><p>VmbFrame_t::imageData is provided. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameFlagsType.VmbFrameFlagsPayloadType">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a9e623e99ff6dfaa93ad05baccaf0f439"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsPayloadType</span></span></span><a class="headerlink" href="#c.VmbFrameFlagsType.VmbFrameFlagsPayloadType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>VmbFrame_t::payloadType is provided. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFrameFlagsType.VmbFrameFlagsChunkDataPresent">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5a5e9ead49c59303bcc656e1401c713d11"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsChunkDataPresent</span></span></span><a class="headerlink" href="#c.VmbFrameFlagsType.VmbFrameFlagsChunkDataPresent" title="Permalink to this definition"></a><br /></dt>
+<dd><p>VmbFrame_t::chunkDataPresent is set based on info provided by the transport layer. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbPayloadType">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadType</span></span></span><a class="headerlink" href="#c.VmbPayloadType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Frame payload type. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPayloadType.VmbPayloadTypeUnknown">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9a6415eb4fba0b2bcf1a943056e06bd108"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeUnknown</span></span></span><a class="headerlink" href="#c.VmbPayloadType.VmbPayloadTypeUnknown" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Unknown payload type. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPayloadType.VmbPayloadTypeImage">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9a4b035e29cc2517d12f91a1841cc09fcc"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeImage</span></span></span><a class="headerlink" href="#c.VmbPayloadType.VmbPayloadTypeImage" title="Permalink to this definition"></a><br /></dt>
+<dd><p>image data </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPayloadType.VmbPayloadTypeRaw">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9a8df17c57cd9fc2bb3e69d988af0ba414"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeRaw</span></span></span><a class="headerlink" href="#c.VmbPayloadType.VmbPayloadTypeRaw" title="Permalink to this definition"></a><br /></dt>
+<dd><p>raw data </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPayloadType.VmbPayloadTypeFile">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9ac1d2ce07e7a78933d866770f0639dbc9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeFile</span></span></span><a class="headerlink" href="#c.VmbPayloadType.VmbPayloadTypeFile" title="Permalink to this definition"></a><br /></dt>
+<dd><p>file data </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPayloadType.VmbPayloadTypeJPEG">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9ad7d97debd17ced601caf1cd7d9a941a9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeJPEG</span></span></span><a class="headerlink" href="#c.VmbPayloadType.VmbPayloadTypeJPEG" title="Permalink to this definition"></a><br /></dt>
+<dd><p>JPEG data as described in the GigEVision 2.0 specification. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPayloadType.VmbPayloadTypJPEG2000">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9ae34f783c59f80f9e8189d9dedcc407c0"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypJPEG2000</span></span></span><a class="headerlink" href="#c.VmbPayloadType.VmbPayloadTypJPEG2000" title="Permalink to this definition"></a><br /></dt>
+<dd><p>JPEG 2000 data as described in the GigEVision 2.0 specification. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPayloadType.VmbPayloadTypeH264">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9a417d67609983e36c32ddd3c16fd4d5d9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeH264</span></span></span><a class="headerlink" href="#c.VmbPayloadType.VmbPayloadTypeH264" title="Permalink to this definition"></a><br /></dt>
+<dd><p>H.264 data as described in the GigEVision 2.0 specification. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPayloadType.VmbPayloadTypeChunkOnly">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9aa4d235db3b7232c3eb7dcd4a786e8976"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeChunkOnly</span></span></span><a class="headerlink" href="#c.VmbPayloadType.VmbPayloadTypeChunkOnly" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Chunk data exclusively. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPayloadType.VmbPayloadTypeDeviceSpecific">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9ae73c839ce12183d45e7d0d9968ed9853"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeDeviceSpecific</span></span></span><a class="headerlink" href="#c.VmbPayloadType.VmbPayloadTypeDeviceSpecific" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Device specific data format. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbPayloadType.VmbPayloadTypeGenDC">
+<span class="target" id="VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9a80a7b2baa93cdefb84cc509643bc8d72"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadTypeGenDC</span></span></span><a class="headerlink" href="#c.VmbPayloadType.VmbPayloadTypeGenDC" title="Permalink to this definition"></a><br /></dt>
+<dd><p>GenDC data. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a5adeacabbe66ddc41a4210ec9b424f91"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFrameStatusType" title="VmbFrameStatusType"><span class="n"><span class="pre">VmbFrameStatusType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatusType</span></span></span><br /></dt>
+<dd><p>Status of a frame transfer. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFrameStatus_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1a86e9a2f0bef3237409361eb9a56e6d7b"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbInt32_t" title="VmbInt32_t"><span class="n"><span class="pre">VmbInt32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameStatus_t</span></span></span><a class="headerlink" href="#c.VmbFrameStatus_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for the frame status; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1afacfe38c27112253cd775d18a1af95f0"><span class="std std-ref">VmbFrameStatusType</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a891f8f070a58647a7b30ea90b7f16bd8"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFrameFlagsType" title="VmbFrameFlagsType"><span class="n"><span class="pre">VmbFrameFlagsType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlagsType</span></span></span><br /></dt>
+<dd><p>Frame flags. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFrameFlags_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1ac2b57de7213de5daac2c245055c06628"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrameFlags_t</span></span></span><a class="headerlink" href="#c.VmbFrameFlags_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for Frame flags; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a23501624a9e881b838e39cbf7eace2b5"><span class="std std-ref">VmbFrameFlagsType</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1ae094a9cc9dcbc8d8a68665501b36e8bf"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbPayloadType" title="VmbPayloadType"><span class="n"><span class="pre">VmbPayloadType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadType</span></span></span><br /></dt>
+<dd><p>Frame payload type. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbPayloadType_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1a9e15c4dfd6f482ca95a756dc56be7c9d"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbPayloadType_t</span></span></span><a class="headerlink" href="#c.VmbPayloadType_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type representing the payload type of a frame. For values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a23015f9838733b10716397a64f1a96c9"><span class="std std-ref">VmbPayloadType</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbImageDimension_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1a625afeedce0298e42cd7423f3c852c7c"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbImageDimension_t</span></span></span><a class="headerlink" href="#c.VmbImageDimension_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type used to represent a dimension value, e.g. the image height. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a875563f52bc13d30598741248ea80812"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFrame" title="VmbFrame"><span class="n"><span class="pre">VmbFrame</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrame_t</span></span></span><br /></dt>
+<dd><p>Frame delivered by the camera. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-save/loadsettings">Save/LoadSettings</p>
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbFeaturePersistType">
+<span class="target" id="VmbCTypeDefinitions_8h_1a547095368385f75fa03524debf5b83e8"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistType</span></span></span><a class="headerlink" href="#c.VmbFeaturePersistType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type of features that are to be saved (persisted) to the XML file when using <a class="reference internal" href="#group__LoadSaveSettings_1ga7326c5908bf4699a2975289a1bd99c30"><span class="std std-ref">VmbSettingsSave</span></a>. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeaturePersistType.VmbFeaturePersistAll">
+<span class="target" id="VmbCTypeDefinitions_8h_1a547095368385f75fa03524debf5b83e8a2d6e59b527bb0b51dcbe4af19bcf9795"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistAll</span></span></span><a class="headerlink" href="#c.VmbFeaturePersistType.VmbFeaturePersistAll" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Save all features to XML, including look-up tables (if possible) </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeaturePersistType.VmbFeaturePersistStreamable">
+<span class="target" id="VmbCTypeDefinitions_8h_1a547095368385f75fa03524debf5b83e8a9244af7428acf8dea131bb44b226fb72"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistStreamable</span></span></span><a class="headerlink" href="#c.VmbFeaturePersistType.VmbFeaturePersistStreamable" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Save only features marked as streamable, excluding look-up tables. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbFeaturePersistType.VmbFeaturePersistNoLUT">
+<span class="target" id="VmbCTypeDefinitions_8h_1a547095368385f75fa03524debf5b83e8ad1f4433805a352dca02bc5efbaf57022"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistNoLUT</span></span></span><a class="headerlink" href="#c.VmbFeaturePersistType.VmbFeaturePersistNoLUT" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Save all features except look-up tables (default) </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbModulePersistFlagsType">
+<span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580ca"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsType</span></span></span><a class="headerlink" href="#c.VmbModulePersistFlagsType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Parameters determining the operation mode of <a class="reference internal" href="#group__LoadSaveSettings_1ga7326c5908bf4699a2975289a1bd99c30"><span class="std std-ref">VmbSettingsSave</span></a> and <a class="reference internal" href="#group__LoadSaveSettings_1ga618d6ddc00a05f9a476e95148800d7b5"><span class="std std-ref">VmbSettingsLoad</span></a>. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbModulePersistFlagsType.VmbModulePersistFlagsNone">
+<span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caaad7050b42cc722b3736ce47558acf17e"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsNone</span></span></span><a class="headerlink" href="#c.VmbModulePersistFlagsType.VmbModulePersistFlagsNone" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load features for no module. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbModulePersistFlagsType.VmbModulePersistFlagsTransportLayer">
+<span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caa272ac4e89e07badfed01a4799cd0bd7b"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsTransportLayer</span></span></span><a class="headerlink" href="#c.VmbModulePersistFlagsType.VmbModulePersistFlagsTransportLayer" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load the transport layer features. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbModulePersistFlagsType.VmbModulePersistFlagsInterface">
+<span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caa9afc8b9d7fafaa4e1ec788b49ae18c86"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsInterface</span></span></span><a class="headerlink" href="#c.VmbModulePersistFlagsType.VmbModulePersistFlagsInterface" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load the interface features. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbModulePersistFlagsType.VmbModulePersistFlagsRemoteDevice">
+<span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caa01a119fea54ade86934499734037c4f9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsRemoteDevice</span></span></span><a class="headerlink" href="#c.VmbModulePersistFlagsType.VmbModulePersistFlagsRemoteDevice" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load the remote device features. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbModulePersistFlagsType.VmbModulePersistFlagsLocalDevice">
+<span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caad59df874b4cff81c732d045e32952fde"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsLocalDevice</span></span></span><a class="headerlink" href="#c.VmbModulePersistFlagsType.VmbModulePersistFlagsLocalDevice" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load the local device features. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbModulePersistFlagsType.VmbModulePersistFlagsStreams">
+<span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caa0693ab7ab371582aacdbd24fbd1c39e6"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsStreams</span></span></span><a class="headerlink" href="#c.VmbModulePersistFlagsType.VmbModulePersistFlagsStreams" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load the features of stream modules. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbModulePersistFlagsType.VmbModulePersistFlagsAll">
+<span class="target" id="VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580caacbdd4f6972dea214896af22464693c46"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsAll</span></span></span><a class="headerlink" href="#c.VmbModulePersistFlagsType.VmbModulePersistFlagsAll" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Persist/Load features for all modules. </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c enum">
+<dt class="sig sig-object c" id="c.VmbLogLevel">
+<span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevel</span></span></span><a class="headerlink" href="#c.VmbLogLevel" title="Permalink to this definition"></a><br /></dt>
+<dd><p>A level to use for logging. </p>
+<p><em>Values:</em></p>
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbLogLevel.VmbLogLevelNone">
+<span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a6133a71ab181d781e9eb8fc39ab62727"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelNone</span></span></span><a class="headerlink" href="#c.VmbLogLevel.VmbLogLevelNone" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Nothing is logged regardless of the severity of the issue. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbLogLevel.VmbLogLevelError">
+<span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a4c3dcfd9c3688f4b03e5d74fc1b24098"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelError</span></span></span><a class="headerlink" href="#c.VmbLogLevel.VmbLogLevelError" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Only errors are logged. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbLogLevel.VmbLogLevelDebug">
+<span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a606405d0b6c54a2395171584c3a6bf81"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelDebug</span></span></span><a class="headerlink" href="#c.VmbLogLevel.VmbLogLevelDebug" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Only error and debug messages are logged. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbLogLevel.VmbLogLevelWarn">
+<span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a5c497f9dd2c5b2d6f6a8149086c4b7e9"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelWarn</span></span></span><a class="headerlink" href="#c.VmbLogLevel.VmbLogLevelWarn" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Only error, debug and warn messages are logged. </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbLogLevel.VmbLogLevelTrace">
+<span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a2b0cbd973a8b9195a55038761e409dac"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelTrace</span></span></span><a class="headerlink" href="#c.VmbLogLevel.VmbLogLevelTrace" title="Permalink to this definition"></a><br /></dt>
+<dd><p>all messages are logged </p>
+</dd></dl>
+
+<dl class="c enumerator">
+<dt class="sig sig-object c" id="c.VmbLogLevel.VmbLogLevelAll">
+<span class="target" id="VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536a605eac4fe6d1ba4c8979dde9aac433e4"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevelAll</span></span></span><a class="headerlink" href="#c.VmbLogLevel.VmbLogLevelAll" title="Permalink to this definition"></a><br /></dt>
+<dd><p>all messages are logged </p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a8893d5c140a033547d219d37dd298960"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFeaturePersistType" title="VmbFeaturePersistType"><span class="n"><span class="pre">VmbFeaturePersistType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistType</span></span></span><br /></dt>
+<dd><p>Type of features that are to be saved (persisted) to the XML file when using <a class="reference internal" href="#group__LoadSaveSettings_1ga7326c5908bf4699a2975289a1bd99c30"><span class="std std-ref">VmbSettingsSave</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbFeaturePersist_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1a732ac0da2f7b1f47684fd35a2f0f03d7"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersist_t</span></span></span><a class="headerlink" href="#c.VmbFeaturePersist_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for feature persistence; for values see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1a547095368385f75fa03524debf5b83e8"><span class="std std-ref">VmbFeaturePersistType</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a4c3c9202c924b171f55f71fc9e65c18a"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbModulePersistFlagsType" title="VmbModulePersistFlagsType"><span class="n"><span class="pre">VmbModulePersistFlagsType</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlagsType</span></span></span><br /></dt>
+<dd><p>Parameters determining the operation mode of <a class="reference internal" href="#group__LoadSaveSettings_1ga7326c5908bf4699a2975289a1bd99c30"><span class="std std-ref">VmbSettingsSave</span></a> and <a class="reference internal" href="#group__LoadSaveSettings_1ga618d6ddc00a05f9a476e95148800d7b5"><span class="std std-ref">VmbSettingsLoad</span></a>. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbModulePersistFlags_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1a60d866e106ff787d4cd4a6919ee9b915"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbModulePersistFlags_t</span></span></span><a class="headerlink" href="#c.VmbModulePersistFlags_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Type for module persist flags; for values see VmbModulePersistFlagsType. </p>
+<p>Use a combination of <a class="reference internal" href="#VmbCTypeDefinitions_8h_1acfab94eec437947c1130d08eb21580ca"><span class="std std-ref">VmbModulePersistFlagsType</span></a> constants </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a7f619b399eaed2a144e3b4c75ab77863"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbLogLevel" title="VmbLogLevel"><span class="n"><span class="pre">VmbLogLevel</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevel</span></span></span><br /></dt>
+<dd><p>A level to use for logging. </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c" id="c.VmbLogLevel_t">
+<span class="target" id="VmbCTypeDefinitions_8h_1a02cc0a47020372536386f2b67b578d8a"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbLogLevel_t</span></span></span><a class="headerlink" href="#c.VmbLogLevel_t" title="Permalink to this definition"></a><br /></dt>
+<dd><p>The type used for storing the log level. </p>
+<p>Use a constant from <a class="reference internal" href="#VmbCTypeDefinitions_8h_1af010af6b020fc106038a901143862536"><span class="std std-ref">VmbLogLevel</span></a> </p>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1aa1459f69a5b0f766b3c51e7aaa6b0ded"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><a class="reference internal" href="#c.VmbFeaturePersistSettings" title="VmbFeaturePersistSettings"><span class="n"><span class="pre">VmbFeaturePersistSettings</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistSettings_t</span></span></span><br /></dt>
+<dd><p>Parameters determining the operation mode of <a class="reference internal" href="#group__LoadSaveSettings_1ga7326c5908bf4699a2975289a1bd99c30"><span class="std std-ref">VmbSettingsSave</span></a> and <a class="reference internal" href="#group__LoadSaveSettings_1ga618d6ddc00a05f9a476e95148800d7b5"><span class="std std-ref">VmbSettingsLoad</span></a>. </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-callbacks">Callbacks</p>
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a414c98f3ebbfc3cb3e65e6719dcff480"></span><span class="sig-name descname"><span class="pre">void(VMB_CALL</span> <span class="pre">*</span> <span class="pre">VmbInvalidationCallback</span> <span class="pre">)(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">handle,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*name,</span> <span class="pre">void</span> <span class="pre">*userContext)</span></span></dt>
+<dd><p>Invalidation callback type for a function that gets called in a separate thread and has been registered with <a class="reference internal" href="#group__FeatureInvalidation_1ga04e8a6c386ae5795e95c983faf3873a6"><span class="std std-ref">VmbFeatureInvalidationRegister()</span></a>. </p>
+<p>While the callback is run, all feature data is atomic. After the callback finishes, the feature data may be updated with new values.</p>
+<p>Do not spend too much time in this thread; it prevents the feature values from being updated from any other thread or the lower-level drivers.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Param handle</dt>
+<dd class="field-odd"><p><strong>[in]</strong> Handle for an entity that exposes features </p>
+</dd>
+<dt class="field-even">Param name</dt>
+<dd class="field-even"><p><strong>[in]</strong> Name of the feature </p>
+</dd>
+<dt class="field-odd">Param userContext</dt>
+<dd class="field-odd"><p><strong>[in]</strong> Pointer to the user context, see <a class="reference internal" href="#group__FeatureInvalidation_1ga04e8a6c386ae5795e95c983faf3873a6"><span class="std std-ref">VmbFeatureInvalidationRegister</span></a> </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a9e4b620625aff5e0d26812484d7da8c7"></span><span class="sig-name descname"><span class="pre">void(VMB_CALL</span> <span class="pre">*</span> <span class="pre">VmbFrameCallback</span> <span class="pre">)(const</span> <span class="pre">VmbHandle_t</span> <span class="pre">cameraHandle,</span> <span class="pre">const</span> <span class="pre">VmbHandle_t</span> <span class="pre">streamHandle,</span> <span class="pre">VmbFrame_t</span> <span class="pre">*frame)</span></span></dt>
+<dd><p>Frame Callback type for a function that gets called in a separate thread if a frame has been queued with <a class="reference internal" href="#group__Capture_1ga21e639881606a401365b24e6d3103664"><span class="std std-ref">VmbCaptureFrameQueue</span></a>. </p>
+<div class="admonition warning">
+<p class="admonition-title">Warning</p>
+<p>Any operations closing the stream including <a class="reference internal" href="#group__Init_1ga3adc3b7c9181e8821c6892d8e35f40ee"><span class="std std-ref">VmbShutdown</span></a> and <a class="reference internal" href="#group__CameraInfo_1ga6a7ec1503fbf35c937c3a7cebefeb1b4"><span class="std std-ref">VmbCameraClose</span></a> in addition to <a class="reference internal" href="#group__Capture_1ga1d477d6cd758717d1379457ed0c3789e"><span class="std std-ref">VmbCaptureEnd</span></a> block until any currently active callbacks return. If the callback does not return in finite time, the program may not return.</p>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Param cameraHandle</dt>
+<dd class="field-odd"><p><strong>[in]</strong> Handle of the camera the frame belongs to </p>
+</dd>
+<dt class="field-even">Param streamHandle</dt>
+<dd class="field-even"><p><strong>[in]</strong> Handle of the stream the frame belongs to </p>
+</dd>
+<dt class="field-odd">Param frame</dt>
+<dd class="field-odd"><p><strong>[in]</strong> The received frame </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="c type">
+<dt class="sig sig-object c">
+<span class="target" id="VmbCTypeDefinitions_8h_1a1065de7704c3ac5ebdc595b641fe6ad4"></span><span class="sig-name descname"><span class="pre">VmbError_t(VMB_CALL</span> <span class="pre">*</span> <span class="pre">VmbChunkAccessCallback</span> <span class="pre">)(VmbHandle_t</span> <span class="pre">featureAccessHandle,</span> <span class="pre">void</span> <span class="pre">*userContext)</span></span></dt>
+<dd><p>Function pointer type to access chunk data. </p>
+<p>This function should complete as quickly as possible, since it blocks other updates on the remote device.</p>
+<p>This function should not throw exceptions, even if VmbC is used from C++. Any exception thrown will only result in an error code indicating that an exception was thrown.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Param featureAccessHandle</dt>
+<dd class="field-odd"><p><strong>[in]</strong> A special handle that can be used for accessing features; the handle is only valid during the call of the function. </p>
+</dd>
+<dt class="field-even">Param userContext</dt>
+<dd class="field-even"><p><strong>[in]</strong> The value the user passed to <a class="reference internal" href="#group__ChunkData_1gae988d459f02508e5351fa74a77fa727e"><span class="std std-ref">VmbChunkDataAccess</span></a>.</p>
+</dd>
+<dt class="field-odd">Return</dt>
+<dd class="field-odd"><p>An error to be returned from <a class="reference internal" href="#group__ChunkData_1gae988d459f02508e5351fa74a77fa727e"><span class="std std-ref">VmbChunkDataAccess</span></a> in the absence of other errors; A custom exit code &gt;= <a class="reference internal" href="#VmbCommonTypes_8h_1aeff928cbbcd8ea5dfd50c2d115228139a9ad210fe4d1d090508ff016367d530fb"><span class="std std-ref">VmbErrorCustom</span></a> can be returned to indicate a failure via <a class="reference internal" href="#group__ChunkData_1gae988d459f02508e5351fa74a77fa727e"><span class="std std-ref">VmbChunkDataAccess</span></a> return code </p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+<dl class="c struct">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbTransportLayerInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbTransportLayerInfo</span></span></span><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Transport layer information. </p>
+<p>Holds read-only information about a transport layer. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbTransportLayerInfo_1a6f7e0a491e29c92453380298b6d08e68"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerIdString</span></span></span><br /></dt>
+<dd><p>Unique id of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbTransportLayerInfo_1a26b4eec68f4ca3517df698867801719e"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerName</span></span></span><br /></dt>
+<dd><p>Name of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbTransportLayerInfo_1a289c08c21caf1fcc513bb49187b004b8"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerModelName</span></span></span><br /></dt>
+<dd><p>Model name of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbTransportLayerInfo_1acac270513c7802c92b1c426f01d90e76"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerVendor</span></span></span><br /></dt>
+<dd><p>Vendor of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbTransportLayerInfo_1a6de53fdc3d988b7480ec82e6a38da2c6"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerVersion</span></span></span><br /></dt>
+<dd><p>Version of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbTransportLayerInfo_1af9c09034fbc6b2af9839ebfe8a7e280c"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerPath</span></span></span><br /></dt>
+<dd><p>Full path of the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbTransportLayerInfo_1a51c2eb9351de2ac2f93cc4e1097a0180"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerHandle</span></span></span><br /></dt>
+<dd><p>Handle of the transport layer for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbTransportLayerInfo_1a0b79fd5622221aeed57ddd1e073cc34d"></span><a class="reference internal" href="#c.VmbTransportLayerType_t" title="VmbTransportLayerType_t"><span class="n"><span class="pre">VmbTransportLayerType_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerType</span></span></span><br /></dt>
+<dd><p>The type of the transport layer. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c struct">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbInterfaceInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbInterfaceInfo</span></span></span><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Interface information. </p>
+<p>Holds read-only information about an interface. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbInterfaceInfo_1a47bbeaa473a4700a9d806365005a8691"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">interfaceIdString</span></span></span><br /></dt>
+<dd><p>Identifier of the interface. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbInterfaceInfo_1aa02e95a6c0bd019f1e2323c8b93c5f54"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">interfaceName</span></span></span><br /></dt>
+<dd><p>Interface name, given by the transport layer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbInterfaceInfo_1a9c7cbbe0b7ca6fbfb31000b096fa68d5"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">interfaceHandle</span></span></span><br /></dt>
+<dd><p>Handle of the interface for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbInterfaceInfo_1a88efd459cc32b3309d89c3c0f55fa417"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerHandle</span></span></span><br /></dt>
+<dd><p>Handle of the related transport layer for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbInterfaceInfo_1a626f06ba8366ea5c31ec9288fa7d95d3"></span><a class="reference internal" href="#c.VmbTransportLayerType_t" title="VmbTransportLayerType_t"><span class="n"><span class="pre">VmbTransportLayerType_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">interfaceType</span></span></span><br /></dt>
+<dd><p>The technology of the interface. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c struct">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbCameraInfo</span></span></span><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Camera information. </p>
+<p>Holds read-only information about a camera. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1abaaff803bd593e5ec7e5a1711d2f86bc"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraIdString</span></span></span><br /></dt>
+<dd><p>Identifier of the camera. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a4ce8aeaa6602df59e829b1ddb7fe7e4d"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraIdExtended</span></span></span><br /></dt>
+<dd><p>globally unique identifier for the camera </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a10a51f5abdf8445a14dcdeeb36a4f61b"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">cameraName</span></span></span><br /></dt>
+<dd><p>The display name of the camera. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a2f85dbfe811c10613cb0481a623280d7"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">modelName</span></span></span><br /></dt>
+<dd><p>Model name. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1ac724c560124fe166778fe559622a0b84"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">serialString</span></span></span><br /></dt>
+<dd><p>Serial number. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a317ada59d63ef4630060a4ab1b719f8f"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">transportLayerHandle</span></span></span><br /></dt>
+<dd><p>Handle of the related transport layer for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a2fbe7ed5eec82271ba67109022fc5ac7"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">interfaceHandle</span></span></span><br /></dt>
+<dd><p>Handle of the related interface for feature access. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1a54735e37e55bbadfa386c701a4b6241b"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">localDeviceHandle</span></span></span><br /></dt>
+<dd><p>Handle of the related GenTL local device. NULL if the camera is not opened. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1aa758a46b402b06b0e3c3175d4ba8092e"></span><a class="reference internal" href="#c.VmbHandle_t" title="VmbHandle_t"><span class="n"><span class="pre">VmbHandle_t</span></span></a><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">streamHandles</span></span></span><br /></dt>
+<dd><p>Handles of the streams provided by the camera. NULL if the camera is not opened. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1af136c70badac27cec7f4e06ae821a6cd"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">streamCount</span></span></span><br /></dt>
+<dd><p>Number of stream handles in the streamHandles array. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbCameraInfo_1ade9ea0657be84e40393a6af7e9024cf5"></span><a class="reference internal" href="#c.VmbAccessMode_t" title="VmbAccessMode_t"><span class="n"><span class="pre">VmbAccessMode_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">permittedAccess</span></span></span><br /></dt>
+<dd><p>Permitted access modes, see <a class="reference internal" href="#VmbCTypeDefinitions_8h_1aa0d1156f6eb619730081886bd2f4a951"><span class="std std-ref">VmbAccessModeType</span></a>. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c struct">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo">
+<span class="target" id="structVmbFeatureInfo"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureInfo</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo" title="Permalink to this definition"></a><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Feature information. </p>
+<p>Holds read-only information about a feature. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.name">
+<span class="target" id="structVmbFeatureInfo_1a05ae916cf5c16c50d4b15be194152864"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">name</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.name" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Name used in the API. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.category">
+<span class="target" id="structVmbFeatureInfo_1a14b4f3be29c4fdafdb5bb5a81d5da248"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">category</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.category" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Category this feature can be found in. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.displayName">
+<span class="target" id="structVmbFeatureInfo_1a84992d3ff82a3c401a73703ad577c9fa"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">displayName</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.displayName" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Feature name to be used in GUIs. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.tooltip">
+<span class="target" id="structVmbFeatureInfo_1a71608e1a0071d12fceb8ebf0fc3bf3d3"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">tooltip</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.tooltip" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Short description, e.g. for a tooltip. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.description">
+<span class="target" id="structVmbFeatureInfo_1a88e37c331937cbf9a652ab90fbb8b7b1"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">description</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.description" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Longer description. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.sfncNamespace">
+<span class="target" id="structVmbFeatureInfo_1ac7ff7d26ea886de46d81bb2a062ab2bf"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">sfncNamespace</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.sfncNamespace" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Namespace this feature resides in. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.unit">
+<span class="target" id="structVmbFeatureInfo_1a1ead094a89e856f1bf6ba8ad2a576224"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">unit</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.unit" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Measuring unit as given in the XML file. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.representation">
+<span class="target" id="structVmbFeatureInfo_1a554488281d2611e83bd81157f5722981"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">representation</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.representation" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Representation of a numeric feature. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.featureDataType">
+<span class="target" id="structVmbFeatureInfo_1a9108fd78e578dfac015ec460897a31c6"></span><a class="reference internal" href="#c.VmbFeatureData_t" title="VmbFeatureData_t"><span class="n"><span class="pre">VmbFeatureData_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">featureDataType</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.featureDataType" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Data type of this feature. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.featureFlags">
+<span class="target" id="structVmbFeatureInfo_1a0aad77511930ca2174caf0525ca5af66"></span><a class="reference internal" href="#c.VmbFeatureFlags_t" title="VmbFeatureFlags_t"><span class="n"><span class="pre">VmbFeatureFlags_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">featureFlags</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.featureFlags" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Access flags for this feature. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.pollingTime">
+<span class="target" id="structVmbFeatureInfo_1a871a326032b4f8b2b079a53a5b2ecf7d"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">pollingTime</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.pollingTime" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Predefined polling time for volatile features. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.visibility">
+<span class="target" id="structVmbFeatureInfo_1a2541f3c53da7cd41d11771c5ab9c6713"></span><a class="reference internal" href="#c.VmbFeatureVisibility_t" title="VmbFeatureVisibility_t"><span class="n"><span class="pre">VmbFeatureVisibility_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">visibility</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.visibility" title="Permalink to this definition"></a><br /></dt>
+<dd><p>GUI visibility. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.isStreamable">
+<span class="target" id="structVmbFeatureInfo_1ad0b198bde3cf7048863f0f24807b49db"></span><a class="reference internal" href="#c.VmbBool_t" title="VmbBool_t"><span class="n"><span class="pre">VmbBool_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">isStreamable</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.isStreamable" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Indicates if a feature can be stored to / loaded from a file. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c" id="c.VmbFeatureInfo.hasSelectedFeatures">
+<span class="target" id="structVmbFeatureInfo_1a2b5e977f004f703a158045f9ae345b0c"></span><a class="reference internal" href="#c.VmbBool_t" title="VmbBool_t"><span class="n"><span class="pre">VmbBool_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">hasSelectedFeatures</span></span></span><a class="headerlink" href="#c.VmbFeatureInfo.hasSelectedFeatures" title="Permalink to this definition"></a><br /></dt>
+<dd><p>Indicates if the feature selects other features. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c struct">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeatureEnumEntry"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeatureEnumEntry</span></span></span><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Info about possible entries of an enumeration feature. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeatureEnumEntry_1ab7ea2db6d4dbdee8e409585fcc9daebf"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">name</span></span></span><br /></dt>
+<dd><p>Name used in the API. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeatureEnumEntry_1ae3ec279078159a547337faff44176e30"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">displayName</span></span></span><br /></dt>
+<dd><p>Enumeration entry name to be used in GUIs. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeatureEnumEntry_1a19683960df3457641cda740ecc07ab36"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">tooltip</span></span></span><br /></dt>
+<dd><p>Short description, e.g. for a tooltip. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeatureEnumEntry_1a3ba2cd8dfdf100617b006a9f51366bec"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">description</span></span></span><br /></dt>
+<dd><p>Longer description. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeatureEnumEntry_1aa5d9fee1a684c3d184113b030f0b704c"></span><a class="reference internal" href="#c.VmbInt64_t" title="VmbInt64_t"><span class="n"><span class="pre">VmbInt64_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">intValue</span></span></span><br /></dt>
+<dd><p>Integer value of this enumeration entry. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeatureEnumEntry_1ac1b4143df80aea790ae424f0607c9534"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">sfncNamespace</span></span></span><br /></dt>
+<dd><p>Namespace this feature resides in. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeatureEnumEntry_1a3fbb849aa981c5a18e4d32eedbaf720d"></span><a class="reference internal" href="#c.VmbFeatureVisibility_t" title="VmbFeatureVisibility_t"><span class="n"><span class="pre">VmbFeatureVisibility_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">visibility</span></span></span><br /></dt>
+<dd><p>GUI visibility. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c struct">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFrame</span></span></span><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Frame delivered by the camera. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-in">In</p>
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1aad6043634732325e11b2bb4a88c8cf28"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">buffer</span></span></span><br /></dt>
+<dd><p>Comprises image and potentially chunk data. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1ae414da43614ab456e3ea0b27cd490827"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">bufferSize</span></span></span><br /></dt>
+<dd><p>The size of the data buffer. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1acf5b032440dd5da997cdd353331517a4"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">context</span></span></span><span class="p"><span class="pre">[</span></span><span class="m"><span class="pre">4</span></span><span class="p"><span class="pre">]</span></span><br /></dt>
+<dd><p>4 void pointers that can be employed by the user (e.g. for storing handles) </p>
+</dd></dl>
+
+</div>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-out">Out</p>
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1a2b7da7f4d43d1a666e307a95eff75894"></span><a class="reference internal" href="#c.VmbFrameStatus_t" title="VmbFrameStatus_t"><span class="n"><span class="pre">VmbFrameStatus_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">receiveStatus</span></span></span><br /></dt>
+<dd><p>The resulting status of the receive operation. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1acf8edd02ec2ac3e0894277a7de3eb11e"></span><a class="reference internal" href="#c.VmbUint64_t" title="VmbUint64_t"><span class="n"><span class="pre">VmbUint64_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">frameID</span></span></span><br /></dt>
+<dd><p>Unique ID of this frame in this stream. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1a582e5f0ff30509371370d02cfee77b12"></span><a class="reference internal" href="#c.VmbUint64_t" title="VmbUint64_t"><span class="n"><span class="pre">VmbUint64_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">timestamp</span></span></span><br /></dt>
+<dd><p>The timestamp set by the camera. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1ac22a2a3781084f8a84e0ec2545082842"></span><a class="reference internal" href="#c.VmbUint8_t" title="VmbUint8_t"><span class="n"><span class="pre">VmbUint8_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">imageData</span></span></span><br /></dt>
+<dd><p>The start of the image data, if present, or null. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1a03fefaf716f75a6c67af54791e304602"></span><a class="reference internal" href="#c.VmbFrameFlags_t" title="VmbFrameFlags_t"><span class="n"><span class="pre">VmbFrameFlags_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">receiveFlags</span></span></span><br /></dt>
+<dd><p>Flags indicating which additional frame information is available. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1a16e647cf1beba6b0f66cc1a7c6892f34"></span><a class="reference internal" href="#c.VmbPixelFormat_t" title="VmbPixelFormat_t"><span class="n"><span class="pre">VmbPixelFormat_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">pixelFormat</span></span></span><br /></dt>
+<dd><p>Pixel format of the image. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1a75f1209cc47de628b6cc3e848ddd30b6"></span><a class="reference internal" href="#c.VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">width</span></span></span><br /></dt>
+<dd><p>Width of an image. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1a3b862560c995e974708c53941be05cbd"></span><a class="reference internal" href="#c.VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">height</span></span></span><br /></dt>
+<dd><p>Height of an image. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1a5c78cb4e7471257e2be5268a628aaa5c"></span><a class="reference internal" href="#c.VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">offsetX</span></span></span><br /></dt>
+<dd><p>Horizontal offset of an image. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1aaebdc7a43d5d255c23dca5da3df7e656"></span><a class="reference internal" href="#c.VmbImageDimension_t" title="VmbImageDimension_t"><span class="n"><span class="pre">VmbImageDimension_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">offsetY</span></span></span><br /></dt>
+<dd><p>Vertical offset of an image. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1aa525dff28c846426bbda92011b96739b"></span><a class="reference internal" href="#c.VmbPayloadType_t" title="VmbPayloadType_t"><span class="n"><span class="pre">VmbPayloadType_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">payloadType</span></span></span><br /></dt>
+<dd><p>The type of payload. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFrame_1a6af5700e735a429d74439d166b079a3e"></span><a class="reference internal" href="#c.VmbBool_t" title="VmbBool_t"><span class="n"><span class="pre">VmbBool_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">chunkDataPresent</span></span></span><br /></dt>
+<dd><p>True if the transport layer reported chunk data to be present in the buffer. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+<dl class="c struct">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeaturePersistSettings"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">VmbFeaturePersistSettings</span></span></span><br /></dt>
+<dd><div class="docutils container">
+<em>#include &lt;VmbCTypeDefinitions.h&gt;</em></div>
+<p>Parameters determining the operation mode of <a class="reference internal" href="#group__LoadSaveSettings_1ga7326c5908bf4699a2975289a1bd99c30"><span class="std std-ref">VmbSettingsSave</span></a> and <a class="reference internal" href="#group__LoadSaveSettings_1ga618d6ddc00a05f9a476e95148800d7b5"><span class="std std-ref">VmbSettingsLoad</span></a>. </p>
+<div class="breathe-sectiondef docutils container">
+<p class="breathe-sectiondef-title rubric" id="breathe-section-title-in">In</p>
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeaturePersistSettings_1a69b37ca86fd7e5ba9ef89975385f39a0"></span><a class="reference internal" href="#c.VmbFeaturePersist_t" title="VmbFeaturePersist_t"><span class="n"><span class="pre">VmbFeaturePersist_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">persistType</span></span></span><br /></dt>
+<dd><p>Type of features that are to be saved. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeaturePersistSettings_1a9604b6c00134a362ec8de4927d1e07a3"></span><a class="reference internal" href="#c.VmbModulePersistFlags_t" title="VmbModulePersistFlags_t"><span class="n"><span class="pre">VmbModulePersistFlags_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">modulePersistFlags</span></span></span><br /></dt>
+<dd><p>Flags specifying the modules to persist/load. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeaturePersistSettings_1a29b31568a79c3f86e4c1814dd00f1f46"></span><a class="reference internal" href="#c.VmbUint32_t" title="VmbUint32_t"><span class="n"><span class="pre">VmbUint32_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">maxIterations</span></span></span><br /></dt>
+<dd><p>Number of iterations when loading settings. </p>
+</dd></dl>
+
+<dl class="c var">
+<dt class="sig sig-object c">
+<span class="target" id="structVmbFeaturePersistSettings_1aefd09a24146d872cf50dfaf4ef9fd2c2"></span><a class="reference internal" href="#c.VmbLogLevel_t" title="VmbLogLevel_t"><span class="n"><span class="pre">VmbLogLevel_t</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">loggingLevel</span></span></span><br /></dt>
+<dd><p>Determines level of detail for load/save settings logging. </p>
+</dd></dl>
+
+</div>
+</dd></dl>
+
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="index.html" class="btn btn-neutral float-left" title="VmbC API Function Reference" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/genindex.html b/VimbaX/doc/VmbC_Function_Reference/genindex.html
new file mode 100644
index 0000000000000000000000000000000000000000..770bceb236ba092cc0a4d4f1ad652c0d84b8bd6b
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/genindex.html
@@ -0,0 +1,848 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Index &mdash; VmbC 1.0.2 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="#" />
+    <link rel="search" title="Search" href="search.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> VmbC
+          </a>
+              <div class="version">
+                1.0.2
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="cAPIReference.html">VmbC C API Function Reference</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">VmbC</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Index</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ <a href="#V"><strong>V</strong></a>
+ 
+</div>
+<h2 id="V">V</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIReference.html#c.VMB_FILE_PATH_LITERAL">VMB_FILE_PATH_LITERAL (C macro)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VMB_PATH_SEPARATOR_CHAR">VMB_PATH_SEPARATOR_CHAR (C macro)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VMB_PATH_SEPARATOR_STRING">VMB_PATH_SEPARATOR_STRING (C macro)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VMB_SFNC_NAMESPACE_CUSTOM">VMB_SFNC_NAMESPACE_CUSTOM (C macro)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VMB_SFNC_NAMESPACE_STANDARD">VMB_SFNC_NAMESPACE_STANDARD (C macro)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbAccessMode_t">VmbAccessMode_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbAccessModeType">VmbAccessModeType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbAccessModeType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbAccessModeType.VmbAccessModeExclusive">VmbAccessModeType.VmbAccessModeExclusive (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbAccessModeType.VmbAccessModeFull">VmbAccessModeType.VmbAccessModeFull (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbAccessModeType.VmbAccessModeNone">VmbAccessModeType.VmbAccessModeNone (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbAccessModeType.VmbAccessModeRead">VmbAccessModeType.VmbAccessModeRead (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbAccessModeType.VmbAccessModeUnknown">VmbAccessModeType.VmbAccessModeUnknown (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbBool_t">VmbBool_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbBoolVal">VmbBoolVal (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbBoolVal">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbBoolVal.VmbBoolFalse">VmbBoolVal.VmbBoolFalse (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbBoolVal.VmbBoolTrue">VmbBoolVal.VmbBoolTrue (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo">VmbCameraInfo (C struct)</a>, <a href="cAPIReference.html#c.VmbCameraInfo">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.cameraIdExtended">VmbCameraInfo.cameraIdExtended (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.cameraIdExtended">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.cameraIdExtended">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.cameraIdString">VmbCameraInfo.cameraIdString (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.cameraIdString">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.cameraIdString">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.cameraName">VmbCameraInfo.cameraName (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.cameraName">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.cameraName">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.interfaceHandle">VmbCameraInfo.interfaceHandle (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.interfaceHandle">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.interfaceHandle">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.localDeviceHandle">VmbCameraInfo.localDeviceHandle (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.localDeviceHandle">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.localDeviceHandle">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.modelName">VmbCameraInfo.modelName (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.modelName">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.modelName">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.permittedAccess">VmbCameraInfo.permittedAccess (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.permittedAccess">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.permittedAccess">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.serialString">VmbCameraInfo.serialString (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.serialString">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.serialString">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.streamCount">VmbCameraInfo.streamCount (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.streamCount">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.streamCount">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.streamHandles">VmbCameraInfo.streamHandles (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.streamHandles">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.streamHandles">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo.transportLayerHandle">VmbCameraInfo.transportLayerHandle (C var)</a>, <a href="cAPIReference.html#c.VmbCameraInfo.transportLayerHandle">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo.transportLayerHandle">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbCameraInfo_t">VmbCameraInfo_t (C type)</a>, <a href="cAPIReference.html#c.VmbCameraInfo_t">[1]</a>, <a href="cAPIReference.html#c.VmbCameraInfo_t">[2]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbError_t">VmbError_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType">VmbErrorType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbErrorType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorAlready">VmbErrorType.VmbErrorAlready (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorAmbiguous">VmbErrorType.VmbErrorAmbiguous (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorApiNotStarted">VmbErrorType.VmbErrorApiNotStarted (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorBadHandle">VmbErrorType.VmbErrorBadHandle (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorBadParameter">VmbErrorType.VmbErrorBadParameter (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorBusy">VmbErrorType.VmbErrorBusy (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorCustom">VmbErrorType.VmbErrorCustom (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorDeviceNotOpen">VmbErrorType.VmbErrorDeviceNotOpen (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorFeaturesUnavailable">VmbErrorType.VmbErrorFeaturesUnavailable (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorGenTLUnspecified">VmbErrorType.VmbErrorGenTLUnspecified (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorIncomplete">VmbErrorType.VmbErrorIncomplete (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorInsufficientBufferCount">VmbErrorType.VmbErrorInsufficientBufferCount (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorInternalFault">VmbErrorType.VmbErrorInternalFault (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorInUse">VmbErrorType.VmbErrorInUse (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorInvalidAccess">VmbErrorType.VmbErrorInvalidAccess (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorInvalidAddress">VmbErrorType.VmbErrorInvalidAddress (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorInvalidCall">VmbErrorType.VmbErrorInvalidCall (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorInvalidValue">VmbErrorType.VmbErrorInvalidValue (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorIO">VmbErrorType.VmbErrorIO (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorMoreData">VmbErrorType.VmbErrorMoreData (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorNoChunkData">VmbErrorType.VmbErrorNoChunkData (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorNoData">VmbErrorType.VmbErrorNoData (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorNotAvailable">VmbErrorType.VmbErrorNotAvailable (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorNotFound">VmbErrorType.VmbErrorNotFound (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorNotImplemented">VmbErrorType.VmbErrorNotImplemented (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorNotInitialized">VmbErrorType.VmbErrorNotInitialized (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorNoTL">VmbErrorType.VmbErrorNoTL (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorNotSupported">VmbErrorType.VmbErrorNotSupported (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorOther">VmbErrorType.VmbErrorOther (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorParsingChunkData">VmbErrorType.VmbErrorParsingChunkData (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorResources">VmbErrorType.VmbErrorResources (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorRetriesExceeded">VmbErrorType.VmbErrorRetriesExceeded (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorStructSize">VmbErrorType.VmbErrorStructSize (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorSuccess">VmbErrorType.VmbErrorSuccess (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorTimeout">VmbErrorType.VmbErrorTimeout (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorTLNotFound">VmbErrorType.VmbErrorTLNotFound (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorUnknown">VmbErrorType.VmbErrorUnknown (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorUnspecified">VmbErrorType.VmbErrorUnspecified (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorUserCallbackException">VmbErrorType.VmbErrorUserCallbackException (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorValidValueSetNotPresent">VmbErrorType.VmbErrorValidValueSetNotPresent (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorWrongType">VmbErrorType.VmbErrorWrongType (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbErrorType.VmbErrorXml">VmbErrorType.VmbErrorXml (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureData_t">VmbFeatureData_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureDataType">VmbFeatureDataType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbFeatureDataType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbFeatureDataType.VmbFeatureDataBool">VmbFeatureDataType.VmbFeatureDataBool (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureDataType.VmbFeatureDataCommand">VmbFeatureDataType.VmbFeatureDataCommand (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureDataType.VmbFeatureDataEnum">VmbFeatureDataType.VmbFeatureDataEnum (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureDataType.VmbFeatureDataFloat">VmbFeatureDataType.VmbFeatureDataFloat (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureDataType.VmbFeatureDataInt">VmbFeatureDataType.VmbFeatureDataInt (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureDataType.VmbFeatureDataNone">VmbFeatureDataType.VmbFeatureDataNone (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureDataType.VmbFeatureDataRaw">VmbFeatureDataType.VmbFeatureDataRaw (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureDataType.VmbFeatureDataString">VmbFeatureDataType.VmbFeatureDataString (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureDataType.VmbFeatureDataUnknown">VmbFeatureDataType.VmbFeatureDataUnknown (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureEnumEntry">VmbFeatureEnumEntry (C struct)</a>, <a href="cAPIReference.html#c.VmbFeatureEnumEntry">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureEnumEntry.description">VmbFeatureEnumEntry.description (C var)</a>, <a href="cAPIReference.html#c.VmbFeatureEnumEntry.description">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureEnumEntry.displayName">VmbFeatureEnumEntry.displayName (C var)</a>, <a href="cAPIReference.html#c.VmbFeatureEnumEntry.displayName">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureEnumEntry.intValue">VmbFeatureEnumEntry.intValue (C var)</a>, <a href="cAPIReference.html#c.VmbFeatureEnumEntry.intValue">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureEnumEntry.name">VmbFeatureEnumEntry.name (C var)</a>, <a href="cAPIReference.html#c.VmbFeatureEnumEntry.name">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureEnumEntry.sfncNamespace">VmbFeatureEnumEntry.sfncNamespace (C var)</a>, <a href="cAPIReference.html#c.VmbFeatureEnumEntry.sfncNamespace">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureEnumEntry.tooltip">VmbFeatureEnumEntry.tooltip (C var)</a>, <a href="cAPIReference.html#c.VmbFeatureEnumEntry.tooltip">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureEnumEntry.visibility">VmbFeatureEnumEntry.visibility (C var)</a>, <a href="cAPIReference.html#c.VmbFeatureEnumEntry.visibility">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureEnumEntry_t">VmbFeatureEnumEntry_t (C type)</a>, <a href="cAPIReference.html#c.VmbFeatureEnumEntry_t">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureFlags_t">VmbFeatureFlags_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureFlagsType">VmbFeatureFlagsType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbFeatureFlagsType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbFeatureFlagsType.VmbFeatureFlagsModifyWrite">VmbFeatureFlagsType.VmbFeatureFlagsModifyWrite (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureFlagsType.VmbFeatureFlagsNone">VmbFeatureFlagsType.VmbFeatureFlagsNone (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureFlagsType.VmbFeatureFlagsRead">VmbFeatureFlagsType.VmbFeatureFlagsRead (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureFlagsType.VmbFeatureFlagsVolatile">VmbFeatureFlagsType.VmbFeatureFlagsVolatile (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureFlagsType.VmbFeatureFlagsWrite">VmbFeatureFlagsType.VmbFeatureFlagsWrite (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo">VmbFeatureInfo (C struct)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.category">VmbFeatureInfo.category (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.description">VmbFeatureInfo.description (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.displayName">VmbFeatureInfo.displayName (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.featureDataType">VmbFeatureInfo.featureDataType (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.featureFlags">VmbFeatureInfo.featureFlags (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.hasSelectedFeatures">VmbFeatureInfo.hasSelectedFeatures (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.isStreamable">VmbFeatureInfo.isStreamable (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.name">VmbFeatureInfo.name (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.pollingTime">VmbFeatureInfo.pollingTime (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.representation">VmbFeatureInfo.representation (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.sfncNamespace">VmbFeatureInfo.sfncNamespace (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.tooltip">VmbFeatureInfo.tooltip (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.unit">VmbFeatureInfo.unit (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo.visibility">VmbFeatureInfo.visibility (C var)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureInfo_t">VmbFeatureInfo_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersist_t">VmbFeaturePersist_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersistSettings">VmbFeaturePersistSettings (C struct)</a>, <a href="cAPIReference.html#c.VmbFeaturePersistSettings">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersistSettings.loggingLevel">VmbFeaturePersistSettings.loggingLevel (C var)</a>, <a href="cAPIReference.html#c.VmbFeaturePersistSettings.loggingLevel">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersistSettings.maxIterations">VmbFeaturePersistSettings.maxIterations (C var)</a>, <a href="cAPIReference.html#c.VmbFeaturePersistSettings.maxIterations">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersistSettings.modulePersistFlags">VmbFeaturePersistSettings.modulePersistFlags (C var)</a>, <a href="cAPIReference.html#c.VmbFeaturePersistSettings.modulePersistFlags">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersistSettings.persistType">VmbFeaturePersistSettings.persistType (C var)</a>, <a href="cAPIReference.html#c.VmbFeaturePersistSettings.persistType">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersistSettings_t">VmbFeaturePersistSettings_t (C type)</a>, <a href="cAPIReference.html#c.VmbFeaturePersistSettings_t">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersistType">VmbFeaturePersistType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbFeaturePersistType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersistType.VmbFeaturePersistAll">VmbFeaturePersistType.VmbFeaturePersistAll (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersistType.VmbFeaturePersistNoLUT">VmbFeaturePersistType.VmbFeaturePersistNoLUT (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeaturePersistType.VmbFeaturePersistStreamable">VmbFeaturePersistType.VmbFeaturePersistStreamable (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureVisibility_t">VmbFeatureVisibility_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureVisibilityType">VmbFeatureVisibilityType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbFeatureVisibilityType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbFeatureVisibilityType.VmbFeatureVisibilityBeginner">VmbFeatureVisibilityType.VmbFeatureVisibilityBeginner (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureVisibilityType.VmbFeatureVisibilityExpert">VmbFeatureVisibilityType.VmbFeatureVisibilityExpert (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureVisibilityType.VmbFeatureVisibilityGuru">VmbFeatureVisibilityType.VmbFeatureVisibilityGuru (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureVisibilityType.VmbFeatureVisibilityInvisible">VmbFeatureVisibilityType.VmbFeatureVisibilityInvisible (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFeatureVisibilityType.VmbFeatureVisibilityUnknown">VmbFeatureVisibilityType.VmbFeatureVisibilityUnknown (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFilePathChar_t">VmbFilePathChar_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame">VmbFrame (C struct)</a>, <a href="cAPIReference.html#c.VmbFrame">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.buffer">VmbFrame.buffer (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.buffer">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.bufferSize">VmbFrame.bufferSize (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.bufferSize">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.chunkDataPresent">VmbFrame.chunkDataPresent (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.chunkDataPresent">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.context">VmbFrame.context (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.context">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.frameID">VmbFrame.frameID (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.frameID">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.height">VmbFrame.height (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.height">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.imageData">VmbFrame.imageData (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.imageData">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.offsetX">VmbFrame.offsetX (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.offsetX">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.offsetY">VmbFrame.offsetY (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.offsetY">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.payloadType">VmbFrame.payloadType (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.payloadType">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.pixelFormat">VmbFrame.pixelFormat (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.pixelFormat">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.receiveFlags">VmbFrame.receiveFlags (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.receiveFlags">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.receiveStatus">VmbFrame.receiveStatus (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.receiveStatus">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.timestamp">VmbFrame.timestamp (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.timestamp">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame.width">VmbFrame.width (C var)</a>, <a href="cAPIReference.html#c.VmbFrame.width">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrame_t">VmbFrame_t (C type)</a>, <a href="cAPIReference.html#c.VmbFrame_t">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameFlags_t">VmbFrameFlags_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameFlagsType">VmbFrameFlagsType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbFrameFlagsType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbFrameFlagsType.VmbFrameFlagsChunkDataPresent">VmbFrameFlagsType.VmbFrameFlagsChunkDataPresent (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameFlagsType.VmbFrameFlagsDimension">VmbFrameFlagsType.VmbFrameFlagsDimension (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameFlagsType.VmbFrameFlagsFrameID">VmbFrameFlagsType.VmbFrameFlagsFrameID (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameFlagsType.VmbFrameFlagsImageData">VmbFrameFlagsType.VmbFrameFlagsImageData (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameFlagsType.VmbFrameFlagsNone">VmbFrameFlagsType.VmbFrameFlagsNone (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameFlagsType.VmbFrameFlagsOffset">VmbFrameFlagsType.VmbFrameFlagsOffset (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameFlagsType.VmbFrameFlagsPayloadType">VmbFrameFlagsType.VmbFrameFlagsPayloadType (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameFlagsType.VmbFrameFlagsTimestamp">VmbFrameFlagsType.VmbFrameFlagsTimestamp (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameStatus_t">VmbFrameStatus_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameStatusType">VmbFrameStatusType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbFrameStatusType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbFrameStatusType.VmbFrameStatusComplete">VmbFrameStatusType.VmbFrameStatusComplete (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameStatusType.VmbFrameStatusIncomplete">VmbFrameStatusType.VmbFrameStatusIncomplete (C enumerator)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cAPIReference.html#c.VmbFrameStatusType.VmbFrameStatusInvalid">VmbFrameStatusType.VmbFrameStatusInvalid (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbFrameStatusType.VmbFrameStatusTooSmall">VmbFrameStatusType.VmbFrameStatusTooSmall (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbHandle_t">VmbHandle_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbImageDimension_t">VmbImageDimension_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInt16_t">VmbInt16_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInt32_t">VmbInt32_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInt64_t">VmbInt64_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInt8_t">VmbInt8_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInterfaceInfo">VmbInterfaceInfo (C struct)</a>, <a href="cAPIReference.html#c.VmbInterfaceInfo">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInterfaceInfo.interfaceHandle">VmbInterfaceInfo.interfaceHandle (C var)</a>, <a href="cAPIReference.html#c.VmbInterfaceInfo.interfaceHandle">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInterfaceInfo.interfaceIdString">VmbInterfaceInfo.interfaceIdString (C var)</a>, <a href="cAPIReference.html#c.VmbInterfaceInfo.interfaceIdString">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInterfaceInfo.interfaceName">VmbInterfaceInfo.interfaceName (C var)</a>, <a href="cAPIReference.html#c.VmbInterfaceInfo.interfaceName">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInterfaceInfo.interfaceType">VmbInterfaceInfo.interfaceType (C var)</a>, <a href="cAPIReference.html#c.VmbInterfaceInfo.interfaceType">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInterfaceInfo.transportLayerHandle">VmbInterfaceInfo.transportLayerHandle (C var)</a>, <a href="cAPIReference.html#c.VmbInterfaceInfo.transportLayerHandle">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbInterfaceInfo_t">VmbInterfaceInfo_t (C type)</a>, <a href="cAPIReference.html#c.VmbInterfaceInfo_t">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbLogLevel">VmbLogLevel (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbLogLevel">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbLogLevel.VmbLogLevelAll">VmbLogLevel.VmbLogLevelAll (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbLogLevel.VmbLogLevelDebug">VmbLogLevel.VmbLogLevelDebug (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbLogLevel.VmbLogLevelError">VmbLogLevel.VmbLogLevelError (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbLogLevel.VmbLogLevelNone">VmbLogLevel.VmbLogLevelNone (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbLogLevel.VmbLogLevelTrace">VmbLogLevel.VmbLogLevelTrace (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbLogLevel.VmbLogLevelWarn">VmbLogLevel.VmbLogLevelWarn (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbLogLevel_t">VmbLogLevel_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbModulePersistFlags_t">VmbModulePersistFlags_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbModulePersistFlagsType">VmbModulePersistFlagsType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbModulePersistFlagsType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbModulePersistFlagsType.VmbModulePersistFlagsAll">VmbModulePersistFlagsType.VmbModulePersistFlagsAll (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbModulePersistFlagsType.VmbModulePersistFlagsInterface">VmbModulePersistFlagsType.VmbModulePersistFlagsInterface (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbModulePersistFlagsType.VmbModulePersistFlagsLocalDevice">VmbModulePersistFlagsType.VmbModulePersistFlagsLocalDevice (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbModulePersistFlagsType.VmbModulePersistFlagsNone">VmbModulePersistFlagsType.VmbModulePersistFlagsNone (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbModulePersistFlagsType.VmbModulePersistFlagsRemoteDevice">VmbModulePersistFlagsType.VmbModulePersistFlagsRemoteDevice (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbModulePersistFlagsType.VmbModulePersistFlagsStreams">VmbModulePersistFlagsType.VmbModulePersistFlagsStreams (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbModulePersistFlagsType.VmbModulePersistFlagsTransportLayer">VmbModulePersistFlagsType.VmbModulePersistFlagsTransportLayer (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType">VmbPayloadType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbPayloadType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType.VmbPayloadTypeChunkOnly">VmbPayloadType.VmbPayloadTypeChunkOnly (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType.VmbPayloadTypeDeviceSpecific">VmbPayloadType.VmbPayloadTypeDeviceSpecific (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType.VmbPayloadTypeFile">VmbPayloadType.VmbPayloadTypeFile (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType.VmbPayloadTypeGenDC">VmbPayloadType.VmbPayloadTypeGenDC (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType.VmbPayloadTypeH264">VmbPayloadType.VmbPayloadTypeH264 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType.VmbPayloadTypeImage">VmbPayloadType.VmbPayloadTypeImage (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType.VmbPayloadTypeJPEG">VmbPayloadType.VmbPayloadTypeJPEG (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType.VmbPayloadTypeRaw">VmbPayloadType.VmbPayloadTypeRaw (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType.VmbPayloadTypeUnknown">VmbPayloadType.VmbPayloadTypeUnknown (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType.VmbPayloadTypJPEG2000">VmbPayloadType.VmbPayloadTypJPEG2000 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPayloadType_t">VmbPayloadType_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormat_t">VmbPixelFormat_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType">VmbPixelFormatType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbPixelFormatType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatArgb8">VmbPixelFormatType.VmbPixelFormatArgb8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerBG10">VmbPixelFormatType.VmbPixelFormatBayerBG10 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerBG10p">VmbPixelFormatType.VmbPixelFormatBayerBG10p (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerBG12">VmbPixelFormatType.VmbPixelFormatBayerBG12 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerBG12p">VmbPixelFormatType.VmbPixelFormatBayerBG12p (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerBG12Packed">VmbPixelFormatType.VmbPixelFormatBayerBG12Packed (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerBG16">VmbPixelFormatType.VmbPixelFormatBayerBG16 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerBG8">VmbPixelFormatType.VmbPixelFormatBayerBG8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGB10">VmbPixelFormatType.VmbPixelFormatBayerGB10 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGB10p">VmbPixelFormatType.VmbPixelFormatBayerGB10p (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGB12">VmbPixelFormatType.VmbPixelFormatBayerGB12 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGB12p">VmbPixelFormatType.VmbPixelFormatBayerGB12p (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGB12Packed">VmbPixelFormatType.VmbPixelFormatBayerGB12Packed (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGB16">VmbPixelFormatType.VmbPixelFormatBayerGB16 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGB8">VmbPixelFormatType.VmbPixelFormatBayerGB8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGR10">VmbPixelFormatType.VmbPixelFormatBayerGR10 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGR10p">VmbPixelFormatType.VmbPixelFormatBayerGR10p (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGR12">VmbPixelFormatType.VmbPixelFormatBayerGR12 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGR12p">VmbPixelFormatType.VmbPixelFormatBayerGR12p (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGR12Packed">VmbPixelFormatType.VmbPixelFormatBayerGR12Packed (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGR16">VmbPixelFormatType.VmbPixelFormatBayerGR16 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerGR8">VmbPixelFormatType.VmbPixelFormatBayerGR8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerRG10">VmbPixelFormatType.VmbPixelFormatBayerRG10 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerRG10p">VmbPixelFormatType.VmbPixelFormatBayerRG10p (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerRG12">VmbPixelFormatType.VmbPixelFormatBayerRG12 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerRG12p">VmbPixelFormatType.VmbPixelFormatBayerRG12p (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerRG12Packed">VmbPixelFormatType.VmbPixelFormatBayerRG12Packed (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerRG16">VmbPixelFormatType.VmbPixelFormatBayerRG16 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBayerRG8">VmbPixelFormatType.VmbPixelFormatBayerRG8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBgr10">VmbPixelFormatType.VmbPixelFormatBgr10 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBgr12">VmbPixelFormatType.VmbPixelFormatBgr12 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBgr14">VmbPixelFormatType.VmbPixelFormatBgr14 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBgr16">VmbPixelFormatType.VmbPixelFormatBgr16 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBgr8">VmbPixelFormatType.VmbPixelFormatBgr8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBgra10">VmbPixelFormatType.VmbPixelFormatBgra10 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBgra12">VmbPixelFormatType.VmbPixelFormatBgra12 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBgra14">VmbPixelFormatType.VmbPixelFormatBgra14 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBgra16">VmbPixelFormatType.VmbPixelFormatBgra16 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatBgra8">VmbPixelFormatType.VmbPixelFormatBgra8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatLast">VmbPixelFormatType.VmbPixelFormatLast (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatMono10">VmbPixelFormatType.VmbPixelFormatMono10 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatMono10p">VmbPixelFormatType.VmbPixelFormatMono10p (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatMono12">VmbPixelFormatType.VmbPixelFormatMono12 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatMono12p">VmbPixelFormatType.VmbPixelFormatMono12p (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatMono12Packed">VmbPixelFormatType.VmbPixelFormatMono12Packed (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatMono14">VmbPixelFormatType.VmbPixelFormatMono14 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatMono16">VmbPixelFormatType.VmbPixelFormatMono16 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatMono8">VmbPixelFormatType.VmbPixelFormatMono8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatRgb10">VmbPixelFormatType.VmbPixelFormatRgb10 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatRgb12">VmbPixelFormatType.VmbPixelFormatRgb12 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatRgb14">VmbPixelFormatType.VmbPixelFormatRgb14 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatRgb16">VmbPixelFormatType.VmbPixelFormatRgb16 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatRgb8">VmbPixelFormatType.VmbPixelFormatRgb8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatRgba10">VmbPixelFormatType.VmbPixelFormatRgba10 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatRgba12">VmbPixelFormatType.VmbPixelFormatRgba12 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatRgba14">VmbPixelFormatType.VmbPixelFormatRgba14 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatRgba16">VmbPixelFormatType.VmbPixelFormatRgba16 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatRgba8">VmbPixelFormatType.VmbPixelFormatRgba8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr411_8">VmbPixelFormatType.VmbPixelFormatYCbCr411_8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr411_8_CbYYCrYY">VmbPixelFormatType.VmbPixelFormatYCbCr411_8_CbYYCrYY (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr422_8">VmbPixelFormatType.VmbPixelFormatYCbCr422_8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr422_8_CbYCrY">VmbPixelFormatType.VmbPixelFormatYCbCr422_8_CbYCrY (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr601_411_8_CbYYCrYY">VmbPixelFormatType.VmbPixelFormatYCbCr601_411_8_CbYYCrYY (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8">VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8_CbYCrY">VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8_CbYCrY (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr601_8_CbYCr">VmbPixelFormatType.VmbPixelFormatYCbCr601_8_CbYCr (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr709_411_8_CbYYCrYY">VmbPixelFormatType.VmbPixelFormatYCbCr709_411_8_CbYYCrYY (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8">VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8_CbYCrY">VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8_CbYCrY (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr709_8_CbYCr">VmbPixelFormatType.VmbPixelFormatYCbCr709_8_CbYCr (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr8">VmbPixelFormatType.VmbPixelFormatYCbCr8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYCbCr8_CbYCr">VmbPixelFormatType.VmbPixelFormatYCbCr8_CbYCr (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYuv411">VmbPixelFormatType.VmbPixelFormatYuv411 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYuv422">VmbPixelFormatType.VmbPixelFormatYuv422 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYuv422_8">VmbPixelFormatType.VmbPixelFormatYuv422_8 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelFormatType.VmbPixelFormatYuv444">VmbPixelFormatType.VmbPixelFormatYuv444 (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelOccupyType">VmbPixelOccupyType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbPixelOccupyType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbPixelOccupyType.VmbPixelOccupy10Bit">VmbPixelOccupyType.VmbPixelOccupy10Bit (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelOccupyType.VmbPixelOccupy12Bit">VmbPixelOccupyType.VmbPixelOccupy12Bit (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelOccupyType.VmbPixelOccupy14Bit">VmbPixelOccupyType.VmbPixelOccupy14Bit (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelOccupyType.VmbPixelOccupy16Bit">VmbPixelOccupyType.VmbPixelOccupy16Bit (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelOccupyType.VmbPixelOccupy24Bit">VmbPixelOccupyType.VmbPixelOccupy24Bit (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelOccupyType.VmbPixelOccupy32Bit">VmbPixelOccupyType.VmbPixelOccupy32Bit (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelOccupyType.VmbPixelOccupy48Bit">VmbPixelOccupyType.VmbPixelOccupy48Bit (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelOccupyType.VmbPixelOccupy64Bit">VmbPixelOccupyType.VmbPixelOccupy64Bit (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelOccupyType.VmbPixelOccupy8Bit">VmbPixelOccupyType.VmbPixelOccupy8Bit (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelType">VmbPixelType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbPixelType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbPixelType.VmbPixelColor">VmbPixelType.VmbPixelColor (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbPixelType.VmbPixelMono">VmbPixelType.VmbPixelMono (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerInfo">VmbTransportLayerInfo (C struct)</a>, <a href="cAPIReference.html#c.VmbTransportLayerInfo">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerHandle">VmbTransportLayerInfo.transportLayerHandle (C var)</a>, <a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerHandle">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerIdString">VmbTransportLayerInfo.transportLayerIdString (C var)</a>, <a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerIdString">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerModelName">VmbTransportLayerInfo.transportLayerModelName (C var)</a>, <a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerModelName">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerName">VmbTransportLayerInfo.transportLayerName (C var)</a>, <a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerName">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerPath">VmbTransportLayerInfo.transportLayerPath (C var)</a>, <a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerPath">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerType">VmbTransportLayerInfo.transportLayerType (C var)</a>, <a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerType">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerVendor">VmbTransportLayerInfo.transportLayerVendor (C var)</a>, <a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerVendor">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerVersion">VmbTransportLayerInfo.transportLayerVersion (C var)</a>, <a href="cAPIReference.html#c.VmbTransportLayerInfo.transportLayerVersion">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerInfo_t">VmbTransportLayerInfo_t (C type)</a>, <a href="cAPIReference.html#c.VmbTransportLayerInfo_t">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType">VmbTransportLayerType (C enum)</a>
+
+      <ul>
+        <li><a href="cAPIReference.html#c.VmbTransportLayerType">(C type)</a>
+</li>
+      </ul></li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeCL">VmbTransportLayerType.VmbTransportLayerTypeCL (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeCLHS">VmbTransportLayerType.VmbTransportLayerTypeCLHS (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeCustom">VmbTransportLayerType.VmbTransportLayerTypeCustom (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeCXP">VmbTransportLayerType.VmbTransportLayerTypeCXP (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeEthernet">VmbTransportLayerType.VmbTransportLayerTypeEthernet (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeGEV">VmbTransportLayerType.VmbTransportLayerTypeGEV (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeIIDC">VmbTransportLayerType.VmbTransportLayerTypeIIDC (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeMixed">VmbTransportLayerType.VmbTransportLayerTypeMixed (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypePCI">VmbTransportLayerType.VmbTransportLayerTypePCI (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeU3V">VmbTransportLayerType.VmbTransportLayerTypeU3V (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeUnknown">VmbTransportLayerType.VmbTransportLayerTypeUnknown (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType.VmbTransportLayerTypeUVC">VmbTransportLayerType.VmbTransportLayerTypeUVC (C enumerator)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbTransportLayerType_t">VmbTransportLayerType_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbUchar_t">VmbUchar_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbUint16_t">VmbUint16_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbUint32_t">VmbUint32_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbUint64_t">VmbUint64_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbUint8_t">VmbUint8_t (C type)</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbVersionInfo">VmbVersionInfo (C struct)</a>, <a href="cAPIReference.html#c.VmbVersionInfo">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbVersionInfo.major">VmbVersionInfo.major (C var)</a>, <a href="cAPIReference.html#c.VmbVersionInfo.major">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbVersionInfo.minor">VmbVersionInfo.minor (C var)</a>, <a href="cAPIReference.html#c.VmbVersionInfo.minor">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbVersionInfo.patch">VmbVersionInfo.patch (C var)</a>, <a href="cAPIReference.html#c.VmbVersionInfo.patch">[1]</a>
+</li>
+      <li><a href="cAPIReference.html#c.VmbVersionInfo_t">VmbVersionInfo_t (C type)</a>, <a href="cAPIReference.html#c.VmbVersionInfo_t">[1]</a>
+</li>
+  </ul></td>
+</tr></table>
+
+
+
+           </div>
+          </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/index.html b/VimbaX/doc/VmbC_Function_Reference/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..2f485243614281f30679ab78dd262fd649ee388c
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/index.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>VmbC API Function Reference &mdash; VmbC 1.0.2 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="VmbC C API Function Reference" href="cAPIReference.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="#" class="icon icon-home"> VmbC
+          </a>
+              <div class="version">
+                1.0.2
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="cAPIReference.html">VmbC C API Function Reference</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="#">VmbC</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="#" class="icon icon-home"></a> &raquo;</li>
+      <li>VmbC API Function Reference</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="vmbc-api-function-reference">
+<h1>VmbC API Function Reference<a class="headerlink" href="#vmbc-api-function-reference" title="Permalink to this headline"></a></h1>
+<div class="toctree-wrapper compound">
+<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="cAPIReference.html">VmbC C API Function Reference</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#overview">Overview</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#api-version">API Version</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#api-initialization">API Initialization</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#transport-layer-enumeration-information">Transport Layer Enumeration &amp; Information</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#interface-enumeration-information">Interface Enumeration &amp; Information</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#camera-enumeration-information">Camera Enumeration &amp; Information</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#general-feature-functions">General Feature Functions</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#integer-feature-access">Integer Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#float-feature-access">Float Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#bool-feature-access">Bool Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#enum-feature-access">Enum Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#string-feature-access">String Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#command-feature-access">Command Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#raw-feature-access">Raw Feature Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#chunk-data-access">Chunk Data Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#feature-invalidation">Feature Invalidation</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#image-preparation-and-acquisition">Image preparation and acquisition</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#direct-access">Direct Access</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#load-save-settings">Load &amp; Save Settings</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cAPIReference.html#common-types-constants">Common Types &amp; Constants</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</section>
+<section id="indices-and-tables">
+<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline"></a></h1>
+<ul class="simple">
+<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
+</ul>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="cAPIReference.html" class="btn btn-neutral float-right" title="VmbC C API Function Reference" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/objects.inv b/VimbaX/doc/VmbC_Function_Reference/objects.inv
new file mode 100644
index 0000000000000000000000000000000000000000..d4552669e67634bcf9c15784c12e3d84801039ea
Binary files /dev/null and b/VimbaX/doc/VmbC_Function_Reference/objects.inv differ
diff --git a/VimbaX/doc/VmbC_Function_Reference/search.html b/VimbaX/doc/VmbC_Function_Reference/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..bf066c9cc0005bc42b5d80aa307aad8f960b784f
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/search.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Search &mdash; VmbC 1.0.2 documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+      <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+      <link rel="stylesheet" href="_static/pygments_new.css" type="text/css" />
+    
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="#" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> VmbC
+          </a>
+              <div class="version">
+                1.0.2
+              </div>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="#" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="cAPIReference.html">VmbC C API Function Reference</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">VmbC</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Search</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <noscript>
+  <div id="fallback" class="admonition warning">
+    <p class="last">
+      Please activate JavaScript to enable the search functionality.
+    </p>
+  </div>
+  </noscript>
+
+  
+  <div id="search-results">
+  
+  </div>
+
+           </div>
+          </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2023, Allied Vision.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+  <script>
+    jQuery(function() { Search.loadIndex("searchindex.js"); });
+  </script>
+  
+  <script id="searchindexloader"></script>
+   
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/VimbaX/doc/VmbC_Function_Reference/searchindex.js b/VimbaX/doc/VmbC_Function_Reference/searchindex.js
new file mode 100644
index 0000000000000000000000000000000000000000..145792aad91788603f4a5f029dadccd9f2c2f6c6
--- /dev/null
+++ b/VimbaX/doc/VmbC_Function_Reference/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({docnames:["cAPIReference","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["cAPIReference.rst","index.rst"],objects:{"":[[0,0,1,"c.VMB_FILE_PATH_LITERAL","VMB_FILE_PATH_LITERAL"],[0,0,1,"c.VMB_PATH_SEPARATOR_CHAR","VMB_PATH_SEPARATOR_CHAR"],[0,0,1,"c.VMB_PATH_SEPARATOR_STRING","VMB_PATH_SEPARATOR_STRING"],[0,0,1,"c.VMB_SFNC_NAMESPACE_CUSTOM","VMB_SFNC_NAMESPACE_CUSTOM"],[0,0,1,"c.VMB_SFNC_NAMESPACE_STANDARD","VMB_SFNC_NAMESPACE_STANDARD"],[0,1,1,"c.VmbAccessModeType.VmbAccessModeExclusive","VmbAccessModeExclusive"],[0,1,1,"c.VmbAccessModeType.VmbAccessModeFull","VmbAccessModeFull"],[0,1,1,"c.VmbAccessModeType.VmbAccessModeNone","VmbAccessModeNone"],[0,1,1,"c.VmbAccessModeType.VmbAccessModeRead","VmbAccessModeRead"],[0,2,1,"c.VmbAccessModeType","VmbAccessModeType"],[0,3,1,"c.VmbAccessModeType","VmbAccessModeType"],[0,1,1,"c.VmbAccessModeType.VmbAccessModeUnknown","VmbAccessModeUnknown"],[0,3,1,"c.VmbAccessMode_t","VmbAccessMode_t"],[0,1,1,"c.VmbBoolVal.VmbBoolFalse","VmbBoolFalse"],[0,1,1,"c.VmbBoolVal.VmbBoolTrue","VmbBoolTrue"],[0,2,1,"c.VmbBoolVal","VmbBoolVal"],[0,3,1,"c.VmbBoolVal","VmbBoolVal"],[0,3,1,"c.VmbBool_t","VmbBool_t"],[0,4,1,"c.VmbCameraInfo","VmbCameraInfo"],[0,4,1,"c.VmbCameraInfo","VmbCameraInfo"],[0,4,1,"c.VmbCameraInfo","VmbCameraInfo"],[0,3,1,"c.VmbCameraInfo_t","VmbCameraInfo_t"],[0,3,1,"c.VmbCameraInfo_t","VmbCameraInfo_t"],[0,3,1,"c.VmbCameraInfo_t","VmbCameraInfo_t"],[0,1,1,"c.VmbErrorType.VmbErrorAlready","VmbErrorAlready"],[0,1,1,"c.VmbErrorType.VmbErrorAmbiguous","VmbErrorAmbiguous"],[0,1,1,"c.VmbErrorType.VmbErrorApiNotStarted","VmbErrorApiNotStarted"],[0,1,1,"c.VmbErrorType.VmbErrorBadHandle","VmbErrorBadHandle"],[0,1,1,"c.VmbErrorType.VmbErrorBadParameter","VmbErrorBadParameter"],[0,1,1,"c.VmbErrorType.VmbErrorBusy","VmbErrorBusy"],[0,1,1,"c.VmbErrorType.VmbErrorCustom","VmbErrorCustom"],[0,1,1,"c.VmbErrorType.VmbErrorDeviceNotOpen","VmbErrorDeviceNotOpen"],[0,1,1,"c.VmbErrorType.VmbErrorFeaturesUnavailable","VmbErrorFeaturesUnavailable"],[0,1,1,"c.VmbErrorType.VmbErrorGenTLUnspecified","VmbErrorGenTLUnspecified"],[0,1,1,"c.VmbErrorType.VmbErrorIO","VmbErrorIO"],[0,1,1,"c.VmbErrorType.VmbErrorInUse","VmbErrorInUse"],[0,1,1,"c.VmbErrorType.VmbErrorIncomplete","VmbErrorIncomplete"],[0,1,1,"c.VmbErrorType.VmbErrorInsufficientBufferCount","VmbErrorInsufficientBufferCount"],[0,1,1,"c.VmbErrorType.VmbErrorInternalFault","VmbErrorInternalFault"],[0,1,1,"c.VmbErrorType.VmbErrorInvalidAccess","VmbErrorInvalidAccess"],[0,1,1,"c.VmbErrorType.VmbErrorInvalidAddress","VmbErrorInvalidAddress"],[0,1,1,"c.VmbErrorType.VmbErrorInvalidCall","VmbErrorInvalidCall"],[0,1,1,"c.VmbErrorType.VmbErrorInvalidValue","VmbErrorInvalidValue"],[0,1,1,"c.VmbErrorType.VmbErrorMoreData","VmbErrorMoreData"],[0,1,1,"c.VmbErrorType.VmbErrorNoChunkData","VmbErrorNoChunkData"],[0,1,1,"c.VmbErrorType.VmbErrorNoData","VmbErrorNoData"],[0,1,1,"c.VmbErrorType.VmbErrorNoTL","VmbErrorNoTL"],[0,1,1,"c.VmbErrorType.VmbErrorNotAvailable","VmbErrorNotAvailable"],[0,1,1,"c.VmbErrorType.VmbErrorNotFound","VmbErrorNotFound"],[0,1,1,"c.VmbErrorType.VmbErrorNotImplemented","VmbErrorNotImplemented"],[0,1,1,"c.VmbErrorType.VmbErrorNotInitialized","VmbErrorNotInitialized"],[0,1,1,"c.VmbErrorType.VmbErrorNotSupported","VmbErrorNotSupported"],[0,1,1,"c.VmbErrorType.VmbErrorOther","VmbErrorOther"],[0,1,1,"c.VmbErrorType.VmbErrorParsingChunkData","VmbErrorParsingChunkData"],[0,1,1,"c.VmbErrorType.VmbErrorResources","VmbErrorResources"],[0,1,1,"c.VmbErrorType.VmbErrorRetriesExceeded","VmbErrorRetriesExceeded"],[0,1,1,"c.VmbErrorType.VmbErrorStructSize","VmbErrorStructSize"],[0,1,1,"c.VmbErrorType.VmbErrorSuccess","VmbErrorSuccess"],[0,1,1,"c.VmbErrorType.VmbErrorTLNotFound","VmbErrorTLNotFound"],[0,1,1,"c.VmbErrorType.VmbErrorTimeout","VmbErrorTimeout"],[0,2,1,"c.VmbErrorType","VmbErrorType"],[0,3,1,"c.VmbErrorType","VmbErrorType"],[0,1,1,"c.VmbErrorType.VmbErrorUnknown","VmbErrorUnknown"],[0,1,1,"c.VmbErrorType.VmbErrorUnspecified","VmbErrorUnspecified"],[0,1,1,"c.VmbErrorType.VmbErrorUserCallbackException","VmbErrorUserCallbackException"],[0,1,1,"c.VmbErrorType.VmbErrorValidValueSetNotPresent","VmbErrorValidValueSetNotPresent"],[0,1,1,"c.VmbErrorType.VmbErrorWrongType","VmbErrorWrongType"],[0,1,1,"c.VmbErrorType.VmbErrorXml","VmbErrorXml"],[0,3,1,"c.VmbError_t","VmbError_t"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataBool","VmbFeatureDataBool"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataCommand","VmbFeatureDataCommand"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataEnum","VmbFeatureDataEnum"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataFloat","VmbFeatureDataFloat"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataInt","VmbFeatureDataInt"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataNone","VmbFeatureDataNone"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataRaw","VmbFeatureDataRaw"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataString","VmbFeatureDataString"],[0,2,1,"c.VmbFeatureDataType","VmbFeatureDataType"],[0,3,1,"c.VmbFeatureDataType","VmbFeatureDataType"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataUnknown","VmbFeatureDataUnknown"],[0,3,1,"c.VmbFeatureData_t","VmbFeatureData_t"],[0,4,1,"c.VmbFeatureEnumEntry","VmbFeatureEnumEntry"],[0,4,1,"c.VmbFeatureEnumEntry","VmbFeatureEnumEntry"],[0,3,1,"c.VmbFeatureEnumEntry_t","VmbFeatureEnumEntry_t"],[0,3,1,"c.VmbFeatureEnumEntry_t","VmbFeatureEnumEntry_t"],[0,1,1,"c.VmbFeatureFlagsType.VmbFeatureFlagsModifyWrite","VmbFeatureFlagsModifyWrite"],[0,1,1,"c.VmbFeatureFlagsType.VmbFeatureFlagsNone","VmbFeatureFlagsNone"],[0,1,1,"c.VmbFeatureFlagsType.VmbFeatureFlagsRead","VmbFeatureFlagsRead"],[0,2,1,"c.VmbFeatureFlagsType","VmbFeatureFlagsType"],[0,3,1,"c.VmbFeatureFlagsType","VmbFeatureFlagsType"],[0,1,1,"c.VmbFeatureFlagsType.VmbFeatureFlagsVolatile","VmbFeatureFlagsVolatile"],[0,1,1,"c.VmbFeatureFlagsType.VmbFeatureFlagsWrite","VmbFeatureFlagsWrite"],[0,3,1,"c.VmbFeatureFlags_t","VmbFeatureFlags_t"],[0,4,1,"c.VmbFeatureInfo","VmbFeatureInfo"],[0,3,1,"c.VmbFeatureInfo_t","VmbFeatureInfo_t"],[0,1,1,"c.VmbFeaturePersistType.VmbFeaturePersistAll","VmbFeaturePersistAll"],[0,1,1,"c.VmbFeaturePersistType.VmbFeaturePersistNoLUT","VmbFeaturePersistNoLUT"],[0,4,1,"c.VmbFeaturePersistSettings","VmbFeaturePersistSettings"],[0,4,1,"c.VmbFeaturePersistSettings","VmbFeaturePersistSettings"],[0,3,1,"c.VmbFeaturePersistSettings_t","VmbFeaturePersistSettings_t"],[0,3,1,"c.VmbFeaturePersistSettings_t","VmbFeaturePersistSettings_t"],[0,1,1,"c.VmbFeaturePersistType.VmbFeaturePersistStreamable","VmbFeaturePersistStreamable"],[0,2,1,"c.VmbFeaturePersistType","VmbFeaturePersistType"],[0,3,1,"c.VmbFeaturePersistType","VmbFeaturePersistType"],[0,3,1,"c.VmbFeaturePersist_t","VmbFeaturePersist_t"],[0,1,1,"c.VmbFeatureVisibilityType.VmbFeatureVisibilityBeginner","VmbFeatureVisibilityBeginner"],[0,1,1,"c.VmbFeatureVisibilityType.VmbFeatureVisibilityExpert","VmbFeatureVisibilityExpert"],[0,1,1,"c.VmbFeatureVisibilityType.VmbFeatureVisibilityGuru","VmbFeatureVisibilityGuru"],[0,1,1,"c.VmbFeatureVisibilityType.VmbFeatureVisibilityInvisible","VmbFeatureVisibilityInvisible"],[0,2,1,"c.VmbFeatureVisibilityType","VmbFeatureVisibilityType"],[0,3,1,"c.VmbFeatureVisibilityType","VmbFeatureVisibilityType"],[0,1,1,"c.VmbFeatureVisibilityType.VmbFeatureVisibilityUnknown","VmbFeatureVisibilityUnknown"],[0,3,1,"c.VmbFeatureVisibility_t","VmbFeatureVisibility_t"],[0,3,1,"c.VmbFilePathChar_t","VmbFilePathChar_t"],[0,4,1,"c.VmbFrame","VmbFrame"],[0,4,1,"c.VmbFrame","VmbFrame"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsChunkDataPresent","VmbFrameFlagsChunkDataPresent"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsDimension","VmbFrameFlagsDimension"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsFrameID","VmbFrameFlagsFrameID"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsImageData","VmbFrameFlagsImageData"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsNone","VmbFrameFlagsNone"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsOffset","VmbFrameFlagsOffset"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsPayloadType","VmbFrameFlagsPayloadType"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsTimestamp","VmbFrameFlagsTimestamp"],[0,2,1,"c.VmbFrameFlagsType","VmbFrameFlagsType"],[0,3,1,"c.VmbFrameFlagsType","VmbFrameFlagsType"],[0,3,1,"c.VmbFrameFlags_t","VmbFrameFlags_t"],[0,1,1,"c.VmbFrameStatusType.VmbFrameStatusComplete","VmbFrameStatusComplete"],[0,1,1,"c.VmbFrameStatusType.VmbFrameStatusIncomplete","VmbFrameStatusIncomplete"],[0,1,1,"c.VmbFrameStatusType.VmbFrameStatusInvalid","VmbFrameStatusInvalid"],[0,1,1,"c.VmbFrameStatusType.VmbFrameStatusTooSmall","VmbFrameStatusTooSmall"],[0,2,1,"c.VmbFrameStatusType","VmbFrameStatusType"],[0,3,1,"c.VmbFrameStatusType","VmbFrameStatusType"],[0,3,1,"c.VmbFrameStatus_t","VmbFrameStatus_t"],[0,3,1,"c.VmbFrame_t","VmbFrame_t"],[0,3,1,"c.VmbFrame_t","VmbFrame_t"],[0,3,1,"c.VmbHandle_t","VmbHandle_t"],[0,3,1,"c.VmbImageDimension_t","VmbImageDimension_t"],[0,3,1,"c.VmbInt16_t","VmbInt16_t"],[0,3,1,"c.VmbInt32_t","VmbInt32_t"],[0,3,1,"c.VmbInt64_t","VmbInt64_t"],[0,3,1,"c.VmbInt8_t","VmbInt8_t"],[0,4,1,"c.VmbInterfaceInfo","VmbInterfaceInfo"],[0,4,1,"c.VmbInterfaceInfo","VmbInterfaceInfo"],[0,3,1,"c.VmbInterfaceInfo_t","VmbInterfaceInfo_t"],[0,3,1,"c.VmbInterfaceInfo_t","VmbInterfaceInfo_t"],[0,2,1,"c.VmbLogLevel","VmbLogLevel"],[0,3,1,"c.VmbLogLevel","VmbLogLevel"],[0,1,1,"c.VmbLogLevel.VmbLogLevelAll","VmbLogLevelAll"],[0,1,1,"c.VmbLogLevel.VmbLogLevelDebug","VmbLogLevelDebug"],[0,1,1,"c.VmbLogLevel.VmbLogLevelError","VmbLogLevelError"],[0,1,1,"c.VmbLogLevel.VmbLogLevelNone","VmbLogLevelNone"],[0,1,1,"c.VmbLogLevel.VmbLogLevelTrace","VmbLogLevelTrace"],[0,1,1,"c.VmbLogLevel.VmbLogLevelWarn","VmbLogLevelWarn"],[0,3,1,"c.VmbLogLevel_t","VmbLogLevel_t"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsAll","VmbModulePersistFlagsAll"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsInterface","VmbModulePersistFlagsInterface"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsLocalDevice","VmbModulePersistFlagsLocalDevice"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsNone","VmbModulePersistFlagsNone"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsRemoteDevice","VmbModulePersistFlagsRemoteDevice"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsStreams","VmbModulePersistFlagsStreams"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsTransportLayer","VmbModulePersistFlagsTransportLayer"],[0,2,1,"c.VmbModulePersistFlagsType","VmbModulePersistFlagsType"],[0,3,1,"c.VmbModulePersistFlagsType","VmbModulePersistFlagsType"],[0,3,1,"c.VmbModulePersistFlags_t","VmbModulePersistFlags_t"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypJPEG2000","VmbPayloadTypJPEG2000"],[0,2,1,"c.VmbPayloadType","VmbPayloadType"],[0,3,1,"c.VmbPayloadType","VmbPayloadType"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeChunkOnly","VmbPayloadTypeChunkOnly"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeDeviceSpecific","VmbPayloadTypeDeviceSpecific"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeFile","VmbPayloadTypeFile"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeGenDC","VmbPayloadTypeGenDC"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeH264","VmbPayloadTypeH264"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeImage","VmbPayloadTypeImage"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeJPEG","VmbPayloadTypeJPEG"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeRaw","VmbPayloadTypeRaw"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeUnknown","VmbPayloadTypeUnknown"],[0,3,1,"c.VmbPayloadType_t","VmbPayloadType_t"],[0,1,1,"c.VmbPixelType.VmbPixelColor","VmbPixelColor"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatArgb8","VmbPixelFormatArgb8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG10","VmbPixelFormatBayerBG10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG10p","VmbPixelFormatBayerBG10p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG12","VmbPixelFormatBayerBG12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG12Packed","VmbPixelFormatBayerBG12Packed"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG12p","VmbPixelFormatBayerBG12p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG16","VmbPixelFormatBayerBG16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG8","VmbPixelFormatBayerBG8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB10","VmbPixelFormatBayerGB10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB10p","VmbPixelFormatBayerGB10p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB12","VmbPixelFormatBayerGB12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB12Packed","VmbPixelFormatBayerGB12Packed"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB12p","VmbPixelFormatBayerGB12p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB16","VmbPixelFormatBayerGB16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB8","VmbPixelFormatBayerGB8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR10","VmbPixelFormatBayerGR10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR10p","VmbPixelFormatBayerGR10p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR12","VmbPixelFormatBayerGR12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR12Packed","VmbPixelFormatBayerGR12Packed"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR12p","VmbPixelFormatBayerGR12p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR16","VmbPixelFormatBayerGR16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR8","VmbPixelFormatBayerGR8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG10","VmbPixelFormatBayerRG10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG10p","VmbPixelFormatBayerRG10p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG12","VmbPixelFormatBayerRG12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG12Packed","VmbPixelFormatBayerRG12Packed"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG12p","VmbPixelFormatBayerRG12p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG16","VmbPixelFormatBayerRG16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG8","VmbPixelFormatBayerRG8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgr10","VmbPixelFormatBgr10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgr12","VmbPixelFormatBgr12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgr14","VmbPixelFormatBgr14"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgr16","VmbPixelFormatBgr16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgr8","VmbPixelFormatBgr8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgra10","VmbPixelFormatBgra10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgra12","VmbPixelFormatBgra12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgra14","VmbPixelFormatBgra14"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgra16","VmbPixelFormatBgra16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgra8","VmbPixelFormatBgra8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatLast","VmbPixelFormatLast"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono10","VmbPixelFormatMono10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono10p","VmbPixelFormatMono10p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono12","VmbPixelFormatMono12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono12Packed","VmbPixelFormatMono12Packed"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono12p","VmbPixelFormatMono12p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono14","VmbPixelFormatMono14"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono16","VmbPixelFormatMono16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono8","VmbPixelFormatMono8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgb10","VmbPixelFormatRgb10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgb12","VmbPixelFormatRgb12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgb14","VmbPixelFormatRgb14"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgb16","VmbPixelFormatRgb16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgb8","VmbPixelFormatRgb8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgba10","VmbPixelFormatRgba10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgba12","VmbPixelFormatRgba12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgba14","VmbPixelFormatRgba14"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgba16","VmbPixelFormatRgba16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgba8","VmbPixelFormatRgba8"],[0,2,1,"c.VmbPixelFormatType","VmbPixelFormatType"],[0,3,1,"c.VmbPixelFormatType","VmbPixelFormatType"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr411_8","VmbPixelFormatYCbCr411_8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr411_8_CbYYCrYY","VmbPixelFormatYCbCr411_8_CbYYCrYY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr422_8","VmbPixelFormatYCbCr422_8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr422_8_CbYCrY","VmbPixelFormatYCbCr422_8_CbYCrY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr601_411_8_CbYYCrYY","VmbPixelFormatYCbCr601_411_8_CbYYCrYY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8","VmbPixelFormatYCbCr601_422_8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8_CbYCrY","VmbPixelFormatYCbCr601_422_8_CbYCrY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr601_8_CbYCr","VmbPixelFormatYCbCr601_8_CbYCr"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr709_411_8_CbYYCrYY","VmbPixelFormatYCbCr709_411_8_CbYYCrYY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8","VmbPixelFormatYCbCr709_422_8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8_CbYCrY","VmbPixelFormatYCbCr709_422_8_CbYCrY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr709_8_CbYCr","VmbPixelFormatYCbCr709_8_CbYCr"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr8","VmbPixelFormatYCbCr8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr8_CbYCr","VmbPixelFormatYCbCr8_CbYCr"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYuv411","VmbPixelFormatYuv411"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYuv422","VmbPixelFormatYuv422"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYuv422_8","VmbPixelFormatYuv422_8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYuv444","VmbPixelFormatYuv444"],[0,3,1,"c.VmbPixelFormat_t","VmbPixelFormat_t"],[0,1,1,"c.VmbPixelType.VmbPixelMono","VmbPixelMono"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy10Bit","VmbPixelOccupy10Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy12Bit","VmbPixelOccupy12Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy14Bit","VmbPixelOccupy14Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy16Bit","VmbPixelOccupy16Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy24Bit","VmbPixelOccupy24Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy32Bit","VmbPixelOccupy32Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy48Bit","VmbPixelOccupy48Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy64Bit","VmbPixelOccupy64Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy8Bit","VmbPixelOccupy8Bit"],[0,2,1,"c.VmbPixelOccupyType","VmbPixelOccupyType"],[0,3,1,"c.VmbPixelOccupyType","VmbPixelOccupyType"],[0,2,1,"c.VmbPixelType","VmbPixelType"],[0,3,1,"c.VmbPixelType","VmbPixelType"],[0,4,1,"c.VmbTransportLayerInfo","VmbTransportLayerInfo"],[0,4,1,"c.VmbTransportLayerInfo","VmbTransportLayerInfo"],[0,3,1,"c.VmbTransportLayerInfo_t","VmbTransportLayerInfo_t"],[0,3,1,"c.VmbTransportLayerInfo_t","VmbTransportLayerInfo_t"],[0,2,1,"c.VmbTransportLayerType","VmbTransportLayerType"],[0,3,1,"c.VmbTransportLayerType","VmbTransportLayerType"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeCL","VmbTransportLayerTypeCL"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeCLHS","VmbTransportLayerTypeCLHS"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeCXP","VmbTransportLayerTypeCXP"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeCustom","VmbTransportLayerTypeCustom"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeEthernet","VmbTransportLayerTypeEthernet"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeGEV","VmbTransportLayerTypeGEV"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeIIDC","VmbTransportLayerTypeIIDC"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeMixed","VmbTransportLayerTypeMixed"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypePCI","VmbTransportLayerTypePCI"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeU3V","VmbTransportLayerTypeU3V"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeUVC","VmbTransportLayerTypeUVC"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeUnknown","VmbTransportLayerTypeUnknown"],[0,3,1,"c.VmbTransportLayerType_t","VmbTransportLayerType_t"],[0,3,1,"c.VmbUchar_t","VmbUchar_t"],[0,3,1,"c.VmbUint16_t","VmbUint16_t"],[0,3,1,"c.VmbUint32_t","VmbUint32_t"],[0,3,1,"c.VmbUint64_t","VmbUint64_t"],[0,3,1,"c.VmbUint8_t","VmbUint8_t"],[0,4,1,"c.VmbVersionInfo","VmbVersionInfo"],[0,4,1,"c.VmbVersionInfo","VmbVersionInfo"],[0,3,1,"c.VmbVersionInfo_t","VmbVersionInfo_t"],[0,3,1,"c.VmbVersionInfo_t","VmbVersionInfo_t"]],VmbAccessModeType:[[0,1,1,"c.VmbAccessModeType.VmbAccessModeExclusive","VmbAccessModeExclusive"],[0,1,1,"c.VmbAccessModeType.VmbAccessModeFull","VmbAccessModeFull"],[0,1,1,"c.VmbAccessModeType.VmbAccessModeNone","VmbAccessModeNone"],[0,1,1,"c.VmbAccessModeType.VmbAccessModeRead","VmbAccessModeRead"],[0,1,1,"c.VmbAccessModeType.VmbAccessModeUnknown","VmbAccessModeUnknown"]],VmbBoolVal:[[0,1,1,"c.VmbBoolVal.VmbBoolFalse","VmbBoolFalse"],[0,1,1,"c.VmbBoolVal.VmbBoolTrue","VmbBoolTrue"]],VmbCameraInfo:[[0,5,1,"c.VmbCameraInfo.cameraIdExtended","cameraIdExtended"],[0,5,1,"c.VmbCameraInfo.cameraIdExtended","cameraIdExtended"],[0,5,1,"c.VmbCameraInfo.cameraIdExtended","cameraIdExtended"],[0,5,1,"c.VmbCameraInfo.cameraIdString","cameraIdString"],[0,5,1,"c.VmbCameraInfo.cameraIdString","cameraIdString"],[0,5,1,"c.VmbCameraInfo.cameraIdString","cameraIdString"],[0,5,1,"c.VmbCameraInfo.cameraName","cameraName"],[0,5,1,"c.VmbCameraInfo.cameraName","cameraName"],[0,5,1,"c.VmbCameraInfo.cameraName","cameraName"],[0,5,1,"c.VmbCameraInfo.interfaceHandle","interfaceHandle"],[0,5,1,"c.VmbCameraInfo.interfaceHandle","interfaceHandle"],[0,5,1,"c.VmbCameraInfo.interfaceHandle","interfaceHandle"],[0,5,1,"c.VmbCameraInfo.localDeviceHandle","localDeviceHandle"],[0,5,1,"c.VmbCameraInfo.localDeviceHandle","localDeviceHandle"],[0,5,1,"c.VmbCameraInfo.localDeviceHandle","localDeviceHandle"],[0,5,1,"c.VmbCameraInfo.modelName","modelName"],[0,5,1,"c.VmbCameraInfo.modelName","modelName"],[0,5,1,"c.VmbCameraInfo.modelName","modelName"],[0,5,1,"c.VmbCameraInfo.permittedAccess","permittedAccess"],[0,5,1,"c.VmbCameraInfo.permittedAccess","permittedAccess"],[0,5,1,"c.VmbCameraInfo.permittedAccess","permittedAccess"],[0,5,1,"c.VmbCameraInfo.serialString","serialString"],[0,5,1,"c.VmbCameraInfo.serialString","serialString"],[0,5,1,"c.VmbCameraInfo.serialString","serialString"],[0,5,1,"c.VmbCameraInfo.streamCount","streamCount"],[0,5,1,"c.VmbCameraInfo.streamCount","streamCount"],[0,5,1,"c.VmbCameraInfo.streamCount","streamCount"],[0,5,1,"c.VmbCameraInfo.streamHandles","streamHandles"],[0,5,1,"c.VmbCameraInfo.streamHandles","streamHandles"],[0,5,1,"c.VmbCameraInfo.streamHandles","streamHandles"],[0,5,1,"c.VmbCameraInfo.transportLayerHandle","transportLayerHandle"],[0,5,1,"c.VmbCameraInfo.transportLayerHandle","transportLayerHandle"],[0,5,1,"c.VmbCameraInfo.transportLayerHandle","transportLayerHandle"]],VmbErrorType:[[0,1,1,"c.VmbErrorType.VmbErrorAlready","VmbErrorAlready"],[0,1,1,"c.VmbErrorType.VmbErrorAmbiguous","VmbErrorAmbiguous"],[0,1,1,"c.VmbErrorType.VmbErrorApiNotStarted","VmbErrorApiNotStarted"],[0,1,1,"c.VmbErrorType.VmbErrorBadHandle","VmbErrorBadHandle"],[0,1,1,"c.VmbErrorType.VmbErrorBadParameter","VmbErrorBadParameter"],[0,1,1,"c.VmbErrorType.VmbErrorBusy","VmbErrorBusy"],[0,1,1,"c.VmbErrorType.VmbErrorCustom","VmbErrorCustom"],[0,1,1,"c.VmbErrorType.VmbErrorDeviceNotOpen","VmbErrorDeviceNotOpen"],[0,1,1,"c.VmbErrorType.VmbErrorFeaturesUnavailable","VmbErrorFeaturesUnavailable"],[0,1,1,"c.VmbErrorType.VmbErrorGenTLUnspecified","VmbErrorGenTLUnspecified"],[0,1,1,"c.VmbErrorType.VmbErrorIO","VmbErrorIO"],[0,1,1,"c.VmbErrorType.VmbErrorInUse","VmbErrorInUse"],[0,1,1,"c.VmbErrorType.VmbErrorIncomplete","VmbErrorIncomplete"],[0,1,1,"c.VmbErrorType.VmbErrorInsufficientBufferCount","VmbErrorInsufficientBufferCount"],[0,1,1,"c.VmbErrorType.VmbErrorInternalFault","VmbErrorInternalFault"],[0,1,1,"c.VmbErrorType.VmbErrorInvalidAccess","VmbErrorInvalidAccess"],[0,1,1,"c.VmbErrorType.VmbErrorInvalidAddress","VmbErrorInvalidAddress"],[0,1,1,"c.VmbErrorType.VmbErrorInvalidCall","VmbErrorInvalidCall"],[0,1,1,"c.VmbErrorType.VmbErrorInvalidValue","VmbErrorInvalidValue"],[0,1,1,"c.VmbErrorType.VmbErrorMoreData","VmbErrorMoreData"],[0,1,1,"c.VmbErrorType.VmbErrorNoChunkData","VmbErrorNoChunkData"],[0,1,1,"c.VmbErrorType.VmbErrorNoData","VmbErrorNoData"],[0,1,1,"c.VmbErrorType.VmbErrorNoTL","VmbErrorNoTL"],[0,1,1,"c.VmbErrorType.VmbErrorNotAvailable","VmbErrorNotAvailable"],[0,1,1,"c.VmbErrorType.VmbErrorNotFound","VmbErrorNotFound"],[0,1,1,"c.VmbErrorType.VmbErrorNotImplemented","VmbErrorNotImplemented"],[0,1,1,"c.VmbErrorType.VmbErrorNotInitialized","VmbErrorNotInitialized"],[0,1,1,"c.VmbErrorType.VmbErrorNotSupported","VmbErrorNotSupported"],[0,1,1,"c.VmbErrorType.VmbErrorOther","VmbErrorOther"],[0,1,1,"c.VmbErrorType.VmbErrorParsingChunkData","VmbErrorParsingChunkData"],[0,1,1,"c.VmbErrorType.VmbErrorResources","VmbErrorResources"],[0,1,1,"c.VmbErrorType.VmbErrorRetriesExceeded","VmbErrorRetriesExceeded"],[0,1,1,"c.VmbErrorType.VmbErrorStructSize","VmbErrorStructSize"],[0,1,1,"c.VmbErrorType.VmbErrorSuccess","VmbErrorSuccess"],[0,1,1,"c.VmbErrorType.VmbErrorTLNotFound","VmbErrorTLNotFound"],[0,1,1,"c.VmbErrorType.VmbErrorTimeout","VmbErrorTimeout"],[0,1,1,"c.VmbErrorType.VmbErrorUnknown","VmbErrorUnknown"],[0,1,1,"c.VmbErrorType.VmbErrorUnspecified","VmbErrorUnspecified"],[0,1,1,"c.VmbErrorType.VmbErrorUserCallbackException","VmbErrorUserCallbackException"],[0,1,1,"c.VmbErrorType.VmbErrorValidValueSetNotPresent","VmbErrorValidValueSetNotPresent"],[0,1,1,"c.VmbErrorType.VmbErrorWrongType","VmbErrorWrongType"],[0,1,1,"c.VmbErrorType.VmbErrorXml","VmbErrorXml"]],VmbFeatureDataType:[[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataBool","VmbFeatureDataBool"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataCommand","VmbFeatureDataCommand"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataEnum","VmbFeatureDataEnum"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataFloat","VmbFeatureDataFloat"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataInt","VmbFeatureDataInt"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataNone","VmbFeatureDataNone"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataRaw","VmbFeatureDataRaw"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataString","VmbFeatureDataString"],[0,1,1,"c.VmbFeatureDataType.VmbFeatureDataUnknown","VmbFeatureDataUnknown"]],VmbFeatureEnumEntry:[[0,5,1,"c.VmbFeatureEnumEntry.description","description"],[0,5,1,"c.VmbFeatureEnumEntry.description","description"],[0,5,1,"c.VmbFeatureEnumEntry.displayName","displayName"],[0,5,1,"c.VmbFeatureEnumEntry.displayName","displayName"],[0,5,1,"c.VmbFeatureEnumEntry.intValue","intValue"],[0,5,1,"c.VmbFeatureEnumEntry.intValue","intValue"],[0,5,1,"c.VmbFeatureEnumEntry.name","name"],[0,5,1,"c.VmbFeatureEnumEntry.name","name"],[0,5,1,"c.VmbFeatureEnumEntry.sfncNamespace","sfncNamespace"],[0,5,1,"c.VmbFeatureEnumEntry.sfncNamespace","sfncNamespace"],[0,5,1,"c.VmbFeatureEnumEntry.tooltip","tooltip"],[0,5,1,"c.VmbFeatureEnumEntry.tooltip","tooltip"],[0,5,1,"c.VmbFeatureEnumEntry.visibility","visibility"],[0,5,1,"c.VmbFeatureEnumEntry.visibility","visibility"]],VmbFeatureFlagsType:[[0,1,1,"c.VmbFeatureFlagsType.VmbFeatureFlagsModifyWrite","VmbFeatureFlagsModifyWrite"],[0,1,1,"c.VmbFeatureFlagsType.VmbFeatureFlagsNone","VmbFeatureFlagsNone"],[0,1,1,"c.VmbFeatureFlagsType.VmbFeatureFlagsRead","VmbFeatureFlagsRead"],[0,1,1,"c.VmbFeatureFlagsType.VmbFeatureFlagsVolatile","VmbFeatureFlagsVolatile"],[0,1,1,"c.VmbFeatureFlagsType.VmbFeatureFlagsWrite","VmbFeatureFlagsWrite"]],VmbFeatureInfo:[[0,5,1,"c.VmbFeatureInfo.category","category"],[0,5,1,"c.VmbFeatureInfo.description","description"],[0,5,1,"c.VmbFeatureInfo.displayName","displayName"],[0,5,1,"c.VmbFeatureInfo.featureDataType","featureDataType"],[0,5,1,"c.VmbFeatureInfo.featureFlags","featureFlags"],[0,5,1,"c.VmbFeatureInfo.hasSelectedFeatures","hasSelectedFeatures"],[0,5,1,"c.VmbFeatureInfo.isStreamable","isStreamable"],[0,5,1,"c.VmbFeatureInfo.name","name"],[0,5,1,"c.VmbFeatureInfo.pollingTime","pollingTime"],[0,5,1,"c.VmbFeatureInfo.representation","representation"],[0,5,1,"c.VmbFeatureInfo.sfncNamespace","sfncNamespace"],[0,5,1,"c.VmbFeatureInfo.tooltip","tooltip"],[0,5,1,"c.VmbFeatureInfo.unit","unit"],[0,5,1,"c.VmbFeatureInfo.visibility","visibility"]],VmbFeaturePersistSettings:[[0,5,1,"c.VmbFeaturePersistSettings.loggingLevel","loggingLevel"],[0,5,1,"c.VmbFeaturePersistSettings.loggingLevel","loggingLevel"],[0,5,1,"c.VmbFeaturePersistSettings.maxIterations","maxIterations"],[0,5,1,"c.VmbFeaturePersistSettings.maxIterations","maxIterations"],[0,5,1,"c.VmbFeaturePersistSettings.modulePersistFlags","modulePersistFlags"],[0,5,1,"c.VmbFeaturePersistSettings.modulePersistFlags","modulePersistFlags"],[0,5,1,"c.VmbFeaturePersistSettings.persistType","persistType"],[0,5,1,"c.VmbFeaturePersistSettings.persistType","persistType"]],VmbFeaturePersistType:[[0,1,1,"c.VmbFeaturePersistType.VmbFeaturePersistAll","VmbFeaturePersistAll"],[0,1,1,"c.VmbFeaturePersistType.VmbFeaturePersistNoLUT","VmbFeaturePersistNoLUT"],[0,1,1,"c.VmbFeaturePersistType.VmbFeaturePersistStreamable","VmbFeaturePersistStreamable"]],VmbFeatureVisibilityType:[[0,1,1,"c.VmbFeatureVisibilityType.VmbFeatureVisibilityBeginner","VmbFeatureVisibilityBeginner"],[0,1,1,"c.VmbFeatureVisibilityType.VmbFeatureVisibilityExpert","VmbFeatureVisibilityExpert"],[0,1,1,"c.VmbFeatureVisibilityType.VmbFeatureVisibilityGuru","VmbFeatureVisibilityGuru"],[0,1,1,"c.VmbFeatureVisibilityType.VmbFeatureVisibilityInvisible","VmbFeatureVisibilityInvisible"],[0,1,1,"c.VmbFeatureVisibilityType.VmbFeatureVisibilityUnknown","VmbFeatureVisibilityUnknown"]],VmbFrame:[[0,5,1,"c.VmbFrame.buffer","buffer"],[0,5,1,"c.VmbFrame.buffer","buffer"],[0,5,1,"c.VmbFrame.bufferSize","bufferSize"],[0,5,1,"c.VmbFrame.bufferSize","bufferSize"],[0,5,1,"c.VmbFrame.chunkDataPresent","chunkDataPresent"],[0,5,1,"c.VmbFrame.chunkDataPresent","chunkDataPresent"],[0,5,1,"c.VmbFrame.context","context"],[0,5,1,"c.VmbFrame.context","context"],[0,5,1,"c.VmbFrame.frameID","frameID"],[0,5,1,"c.VmbFrame.frameID","frameID"],[0,5,1,"c.VmbFrame.height","height"],[0,5,1,"c.VmbFrame.height","height"],[0,5,1,"c.VmbFrame.imageData","imageData"],[0,5,1,"c.VmbFrame.imageData","imageData"],[0,5,1,"c.VmbFrame.offsetX","offsetX"],[0,5,1,"c.VmbFrame.offsetX","offsetX"],[0,5,1,"c.VmbFrame.offsetY","offsetY"],[0,5,1,"c.VmbFrame.offsetY","offsetY"],[0,5,1,"c.VmbFrame.payloadType","payloadType"],[0,5,1,"c.VmbFrame.payloadType","payloadType"],[0,5,1,"c.VmbFrame.pixelFormat","pixelFormat"],[0,5,1,"c.VmbFrame.pixelFormat","pixelFormat"],[0,5,1,"c.VmbFrame.receiveFlags","receiveFlags"],[0,5,1,"c.VmbFrame.receiveFlags","receiveFlags"],[0,5,1,"c.VmbFrame.receiveStatus","receiveStatus"],[0,5,1,"c.VmbFrame.receiveStatus","receiveStatus"],[0,5,1,"c.VmbFrame.timestamp","timestamp"],[0,5,1,"c.VmbFrame.timestamp","timestamp"],[0,5,1,"c.VmbFrame.width","width"],[0,5,1,"c.VmbFrame.width","width"]],VmbFrameFlagsType:[[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsChunkDataPresent","VmbFrameFlagsChunkDataPresent"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsDimension","VmbFrameFlagsDimension"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsFrameID","VmbFrameFlagsFrameID"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsImageData","VmbFrameFlagsImageData"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsNone","VmbFrameFlagsNone"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsOffset","VmbFrameFlagsOffset"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsPayloadType","VmbFrameFlagsPayloadType"],[0,1,1,"c.VmbFrameFlagsType.VmbFrameFlagsTimestamp","VmbFrameFlagsTimestamp"]],VmbFrameStatusType:[[0,1,1,"c.VmbFrameStatusType.VmbFrameStatusComplete","VmbFrameStatusComplete"],[0,1,1,"c.VmbFrameStatusType.VmbFrameStatusIncomplete","VmbFrameStatusIncomplete"],[0,1,1,"c.VmbFrameStatusType.VmbFrameStatusInvalid","VmbFrameStatusInvalid"],[0,1,1,"c.VmbFrameStatusType.VmbFrameStatusTooSmall","VmbFrameStatusTooSmall"]],VmbInterfaceInfo:[[0,5,1,"c.VmbInterfaceInfo.interfaceHandle","interfaceHandle"],[0,5,1,"c.VmbInterfaceInfo.interfaceHandle","interfaceHandle"],[0,5,1,"c.VmbInterfaceInfo.interfaceIdString","interfaceIdString"],[0,5,1,"c.VmbInterfaceInfo.interfaceIdString","interfaceIdString"],[0,5,1,"c.VmbInterfaceInfo.interfaceName","interfaceName"],[0,5,1,"c.VmbInterfaceInfo.interfaceName","interfaceName"],[0,5,1,"c.VmbInterfaceInfo.interfaceType","interfaceType"],[0,5,1,"c.VmbInterfaceInfo.interfaceType","interfaceType"],[0,5,1,"c.VmbInterfaceInfo.transportLayerHandle","transportLayerHandle"],[0,5,1,"c.VmbInterfaceInfo.transportLayerHandle","transportLayerHandle"]],VmbLogLevel:[[0,1,1,"c.VmbLogLevel.VmbLogLevelAll","VmbLogLevelAll"],[0,1,1,"c.VmbLogLevel.VmbLogLevelDebug","VmbLogLevelDebug"],[0,1,1,"c.VmbLogLevel.VmbLogLevelError","VmbLogLevelError"],[0,1,1,"c.VmbLogLevel.VmbLogLevelNone","VmbLogLevelNone"],[0,1,1,"c.VmbLogLevel.VmbLogLevelTrace","VmbLogLevelTrace"],[0,1,1,"c.VmbLogLevel.VmbLogLevelWarn","VmbLogLevelWarn"]],VmbModulePersistFlagsType:[[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsAll","VmbModulePersistFlagsAll"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsInterface","VmbModulePersistFlagsInterface"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsLocalDevice","VmbModulePersistFlagsLocalDevice"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsNone","VmbModulePersistFlagsNone"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsRemoteDevice","VmbModulePersistFlagsRemoteDevice"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsStreams","VmbModulePersistFlagsStreams"],[0,1,1,"c.VmbModulePersistFlagsType.VmbModulePersistFlagsTransportLayer","VmbModulePersistFlagsTransportLayer"]],VmbPayloadType:[[0,1,1,"c.VmbPayloadType.VmbPayloadTypJPEG2000","VmbPayloadTypJPEG2000"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeChunkOnly","VmbPayloadTypeChunkOnly"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeDeviceSpecific","VmbPayloadTypeDeviceSpecific"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeFile","VmbPayloadTypeFile"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeGenDC","VmbPayloadTypeGenDC"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeH264","VmbPayloadTypeH264"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeImage","VmbPayloadTypeImage"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeJPEG","VmbPayloadTypeJPEG"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeRaw","VmbPayloadTypeRaw"],[0,1,1,"c.VmbPayloadType.VmbPayloadTypeUnknown","VmbPayloadTypeUnknown"]],VmbPixelFormatType:[[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatArgb8","VmbPixelFormatArgb8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG10","VmbPixelFormatBayerBG10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG10p","VmbPixelFormatBayerBG10p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG12","VmbPixelFormatBayerBG12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG12Packed","VmbPixelFormatBayerBG12Packed"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG12p","VmbPixelFormatBayerBG12p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG16","VmbPixelFormatBayerBG16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerBG8","VmbPixelFormatBayerBG8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB10","VmbPixelFormatBayerGB10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB10p","VmbPixelFormatBayerGB10p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB12","VmbPixelFormatBayerGB12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB12Packed","VmbPixelFormatBayerGB12Packed"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB12p","VmbPixelFormatBayerGB12p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB16","VmbPixelFormatBayerGB16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGB8","VmbPixelFormatBayerGB8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR10","VmbPixelFormatBayerGR10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR10p","VmbPixelFormatBayerGR10p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR12","VmbPixelFormatBayerGR12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR12Packed","VmbPixelFormatBayerGR12Packed"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR12p","VmbPixelFormatBayerGR12p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR16","VmbPixelFormatBayerGR16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerGR8","VmbPixelFormatBayerGR8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG10","VmbPixelFormatBayerRG10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG10p","VmbPixelFormatBayerRG10p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG12","VmbPixelFormatBayerRG12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG12Packed","VmbPixelFormatBayerRG12Packed"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG12p","VmbPixelFormatBayerRG12p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG16","VmbPixelFormatBayerRG16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBayerRG8","VmbPixelFormatBayerRG8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgr10","VmbPixelFormatBgr10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgr12","VmbPixelFormatBgr12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgr14","VmbPixelFormatBgr14"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgr16","VmbPixelFormatBgr16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgr8","VmbPixelFormatBgr8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgra10","VmbPixelFormatBgra10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgra12","VmbPixelFormatBgra12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgra14","VmbPixelFormatBgra14"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgra16","VmbPixelFormatBgra16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatBgra8","VmbPixelFormatBgra8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatLast","VmbPixelFormatLast"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono10","VmbPixelFormatMono10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono10p","VmbPixelFormatMono10p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono12","VmbPixelFormatMono12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono12Packed","VmbPixelFormatMono12Packed"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono12p","VmbPixelFormatMono12p"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono14","VmbPixelFormatMono14"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono16","VmbPixelFormatMono16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatMono8","VmbPixelFormatMono8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgb10","VmbPixelFormatRgb10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgb12","VmbPixelFormatRgb12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgb14","VmbPixelFormatRgb14"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgb16","VmbPixelFormatRgb16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgb8","VmbPixelFormatRgb8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgba10","VmbPixelFormatRgba10"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgba12","VmbPixelFormatRgba12"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgba14","VmbPixelFormatRgba14"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgba16","VmbPixelFormatRgba16"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatRgba8","VmbPixelFormatRgba8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr411_8","VmbPixelFormatYCbCr411_8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr411_8_CbYYCrYY","VmbPixelFormatYCbCr411_8_CbYYCrYY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr422_8","VmbPixelFormatYCbCr422_8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr422_8_CbYCrY","VmbPixelFormatYCbCr422_8_CbYCrY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr601_411_8_CbYYCrYY","VmbPixelFormatYCbCr601_411_8_CbYYCrYY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8","VmbPixelFormatYCbCr601_422_8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr601_422_8_CbYCrY","VmbPixelFormatYCbCr601_422_8_CbYCrY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr601_8_CbYCr","VmbPixelFormatYCbCr601_8_CbYCr"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr709_411_8_CbYYCrYY","VmbPixelFormatYCbCr709_411_8_CbYYCrYY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8","VmbPixelFormatYCbCr709_422_8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr709_422_8_CbYCrY","VmbPixelFormatYCbCr709_422_8_CbYCrY"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr709_8_CbYCr","VmbPixelFormatYCbCr709_8_CbYCr"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr8","VmbPixelFormatYCbCr8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYCbCr8_CbYCr","VmbPixelFormatYCbCr8_CbYCr"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYuv411","VmbPixelFormatYuv411"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYuv422","VmbPixelFormatYuv422"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYuv422_8","VmbPixelFormatYuv422_8"],[0,1,1,"c.VmbPixelFormatType.VmbPixelFormatYuv444","VmbPixelFormatYuv444"]],VmbPixelOccupyType:[[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy10Bit","VmbPixelOccupy10Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy12Bit","VmbPixelOccupy12Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy14Bit","VmbPixelOccupy14Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy16Bit","VmbPixelOccupy16Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy24Bit","VmbPixelOccupy24Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy32Bit","VmbPixelOccupy32Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy48Bit","VmbPixelOccupy48Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy64Bit","VmbPixelOccupy64Bit"],[0,1,1,"c.VmbPixelOccupyType.VmbPixelOccupy8Bit","VmbPixelOccupy8Bit"]],VmbPixelType:[[0,1,1,"c.VmbPixelType.VmbPixelColor","VmbPixelColor"],[0,1,1,"c.VmbPixelType.VmbPixelMono","VmbPixelMono"]],VmbTransportLayerInfo:[[0,5,1,"c.VmbTransportLayerInfo.transportLayerHandle","transportLayerHandle"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerHandle","transportLayerHandle"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerIdString","transportLayerIdString"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerIdString","transportLayerIdString"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerModelName","transportLayerModelName"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerModelName","transportLayerModelName"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerName","transportLayerName"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerName","transportLayerName"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerPath","transportLayerPath"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerPath","transportLayerPath"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerType","transportLayerType"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerType","transportLayerType"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerVendor","transportLayerVendor"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerVendor","transportLayerVendor"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerVersion","transportLayerVersion"],[0,5,1,"c.VmbTransportLayerInfo.transportLayerVersion","transportLayerVersion"]],VmbTransportLayerType:[[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeCL","VmbTransportLayerTypeCL"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeCLHS","VmbTransportLayerTypeCLHS"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeCXP","VmbTransportLayerTypeCXP"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeCustom","VmbTransportLayerTypeCustom"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeEthernet","VmbTransportLayerTypeEthernet"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeGEV","VmbTransportLayerTypeGEV"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeIIDC","VmbTransportLayerTypeIIDC"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeMixed","VmbTransportLayerTypeMixed"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypePCI","VmbTransportLayerTypePCI"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeU3V","VmbTransportLayerTypeU3V"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeUVC","VmbTransportLayerTypeUVC"],[0,1,1,"c.VmbTransportLayerType.VmbTransportLayerTypeUnknown","VmbTransportLayerTypeUnknown"]],VmbVersionInfo:[[0,5,1,"c.VmbVersionInfo.major","major"],[0,5,1,"c.VmbVersionInfo.major","major"],[0,5,1,"c.VmbVersionInfo.minor","minor"],[0,5,1,"c.VmbVersionInfo.minor","minor"],[0,5,1,"c.VmbVersionInfo.patch","patch"],[0,5,1,"c.VmbVersionInfo.patch","patch"]]},objnames:{"0":["c","macro","C macro"],"1":["c","enumerator","C enumerator"],"2":["c","enum","C enum"],"3":["c","type","C type"],"4":["c","struct","C struct"],"5":["c","member","C member"]},objtypes:{"0":"c:macro","1":"c:enumerator","2":"c:enum","3":"c:type","4":"c:struct","5":"c:member"},terms:{"0":0,"000f314c4be5":0,"0x10c0006":0,"1":0,"10":0,"12":0,"13":0,"1394":0,"14":0,"16":0,"169":0,"2":0,"2000":0,"24":0,"254":0,"264":0,"2x12":0,"3":0,"32":0,"4":0,"48":0,"5":0,"64":0,"8":0,"boolean":0,"byte":0,"case":0,"char":0,"class":0,"const":0,"default":0,"do":0,"enum":1,"float":1,"int":0,"long":0,"new":0,"null":0,"return":0,"short":0,"static":0,"throw":0,"true":0,"void":0,"while":0,A:0,As:0,For:0,If:0,In:0,No:0,Not:0,One:0,The:0,There:0,These:0,To:0,With:0,_path:0,abl:0,abort:0,about:0,absenc:0,access:1,accessmod:0,accomplish:0,accord:0,acquisit:1,action:0,activ:0,actual:0,adapt:0,add:0,addit:0,addition:0,address:0,adher:0,after:0,again:0,align:0,all:0,alloc:0,allow:0,alreadi:0,also:0,alwai:0,an:0,ani:0,announc:0,anymor:0,anytim:0,applic:0,ar:0,area:0,argb:0,arrai:0,arraylength:0,assign:0,associ:0,atom:0,avail:0,avoid:0,base:0,basic:0,bayer:0,bayerbg10:0,bayerbg10p:0,bayerbg12:0,bayerbg12p:0,bayerbg12pack:0,bayerbg16:0,bayerbg8:0,bayergb10:0,bayergb10p:0,bayergb12:0,bayergb12p:0,bayergb12pack:0,bayergb16:0,bayergb8:0,bayergr10:0,bayergr10p:0,bayergr12:0,bayergr12p:0,bayergr12pack:0,bayergr16:0,bayergr8:0,bayerrg10:0,bayerrg10p:0,bayerrg12:0,bayerrg12p:0,bayerrg12pack:0,bayerrg16:0,bayerrg8:0,bear:0,becaus:0,been:0,befor:0,beforehand:0,beginn:0,behaviour:0,being:0,belong:0,between:0,bg:0,bgr8:0,bgr:0,bgra8:0,bgra:0,bit:0,block:0,bool:1,both:0,bound:0,buffer:0,bufferfilledcount:0,buffers:0,build:0,busi:0,c:1,call:0,callback:0,caller:0,camera:1,camerahandl:0,cameraidextend:0,cameraidstr:0,camerainfo:0,cameranam:0,can:0,cannot:0,capabl:0,captur:0,card:0,categori:0,cbycr:0,cbycri:0,cbycrt:0,cbyycryi:0,certain:0,chang:0,channel:0,charact:0,check:0,chunk:1,chunkaccesscallback:0,chunkdatapres:0,clean:0,close:0,coaxpress:0,code:0,colon:0,color:0,combin:0,command:1,common:1,compat:0,complet:0,compris:0,condit:0,configur:0,conflict:0,connect:0,consequ:0,consid:0,consider:0,constant:1,consum:0,contain:0,content:0,context:0,continu:0,control:0,convent:0,convert:0,copi:0,correct:0,correspond:0,could:0,cti:0,current:0,custom:0,data:1,databuff:0,dealloc:0,debug:0,defin:0,definit:0,deliv:0,depend:0,dequeu:0,describ:0,descript:0,design:0,desir:0,detail:0,determin:0,dev_1234567890:0,dev_81237473991:0,deviat:0,devic:0,differ:0,dimens:0,direct:1,directori:0,displai:0,displaynam:0,dma:0,doe:0,done:0,doubl:0,driver:0,dure:0,dynam:0,e:0,effect:0,either:0,element:0,emit:0,emploi:0,empti:0,end:0,ensur:0,entiti:0,entri:0,entrynam:0,enumer:1,environ:0,equival:0,error:0,etc:0,ethernet:0,even:0,event:0,exampl:0,exceed:0,except:0,exclud:0,exclus:0,execut:0,exist:0,exit:0,expect:0,expert:0,expos:0,fail:0,failur:0,far:0,fault:0,featur:1,featureaccesshandl:0,featuredatatyp:0,featureenumentri:0,featureflag:0,featureinfo:0,featureinfolist:0,featurenam:0,few:0,field:0,file:0,filenam:0,filepath:0,fill:0,filter:0,finish:0,finit:0,first:0,fit:0,fix:0,flag:0,flush:0,follow:0,format:0,found:0,frame:0,frameid:0,free:0,from:0,full:0,g:0,gb:0,gendc:0,gener:1,genicam:0,genicam_gentl:0,gentl:0,get:0,gev:0,gige:0,gigevis:0,given:0,global:0,gr:0,grabber:0,gui:0,guru:0,h:0,ha:0,handl:0,happen:0,hasincr:0,hasselectedfeatur:0,have:0,header:0,height:0,here:0,hidden:0,hold:0,horizont:0,hs:0,id:0,ident:0,identifi:0,idstr:0,ignor:0,iidc:0,illeg:0,imag:1,imagedata:0,imexportc:0,impact:0,implement:0,includ:0,incom:0,increment:0,index:[0,1],indic:0,influenc:0,info:0,inform:1,initi:1,inout:0,input:0,instanc:0,instead:0,insuffici:0,integ:1,interfac:1,interfacehandl:0,interfaceidstr:0,interfaceinfo:0,interfacenam:0,interfacetyp:0,intern:0,intval:0,intvalu:0,invalid:1,invok:0,io:0,ip:0,isavail:0,isdon:0,isn:0,isread:0,isstream:0,issu:0,iswrit:0,iter:0,its:0,jpeg:0,kei:0,kill:0,known:0,l:0,languag:0,larg:0,largest:0,last:0,later:0,layer:1,leav:0,legaci:0,length:0,less:0,level:0,like:0,line:0,link:0,list:0,listen:0,listlength:0,liter:0,load:1,loadset:0,local:0,localdevicehandl:0,lock:0,log:0,logginglevel:0,longer:0,longest:0,look:0,low:0,lower:0,lsb:0,lut:0,mac:0,macro:0,mai:0,main:0,major:0,mark:0,match:0,max:0,maximum:0,maxiter:0,maxlength:0,measur:0,member:0,memori:0,messag:0,method:0,millisecond:0,min:0,minimum:0,minor:0,miss:0,mix:0,mode:0,model:0,modelnam:0,modul:0,modulepersistflag:0,mono10:0,mono10p:0,mono12:0,mono12pack:0,mono14:0,mono16:0,mono8:0,monochrom:0,monopack:0,more:0,most:0,much:0,multipl:0,must:0,name:0,namearrai:0,namespac:0,necessari:0,need:0,neither:0,node:0,non:0,nor:0,note:0,noth:0,notif:0,number:0,numer:0,numfound:0,numfund:0,occupi:0,occur:0,offset:0,offseti:0,offsetx:0,ok:0,onc:0,one:0,onli:0,open:0,oper:0,option:0,order:0,os:0,other:0,otherwis:0,out:0,overview:1,overwritten:0,pack:0,packets:0,param:0,paramet:0,pars:0,pass:0,patch:0,path:0,pathconfigur:0,payload:0,payloads:0,payloadtyp:0,pci:0,pcie:0,perform:0,permit:0,permittedaccess:0,persist:0,persisttyp:0,pfnc:0,physic:0,pixel:0,pixelformat:0,point:0,pointer:0,poll:0,pollingtim:0,pool:0,portabl:0,possibl:0,potenti:0,predefin:0,prefix:0,prepar:1,present:0,prevent:0,previous:0,process:0,program:0,properli:0,properti:0,provid:0,put:0,queri:0,queu:0,queue:0,quickli:0,rang:0,raw:1,read:0,readabl:0,reason:0,receiv:0,receiveflag:0,receivestatu:0,recommend:0,reenqueu:0,referenc:0,regardless:0,regist:0,rel:0,relat:0,releas:0,remain:0,remot:0,remov:0,replac:0,report:0,repres:0,represent:0,request:0,requir:0,resid:0,resourc:0,respect:0,respons:0,restor:0,result:0,retri:0,retriev:0,revok:0,rg:0,rgb12:0,rgb16:0,rgb8:0,rgb:0,rgba8:0,rgba:0,roi:0,run:0,runtim:0,s:0,same:0,save:1,search:0,second:0,see:0,select:0,selector:0,semicolon:0,separ:0,sequenti:0,serial:0,serialstr:0,set:1,setsiz:0,sever:0,sfnc:0,sfncnamespac:0,should:0,shutdown:0,sign:0,signal:0,silent:0,sinc:0,singl:0,size:0,sizecomplet:0,sizefil:0,sizeofcamerainfo:0,sizeoffeatureenumentri:0,sizeoffeatureinfo:0,sizeoffram:0,sizeofinterfaceinfo:0,sizeofset:0,sizeoftransportlayerinfo:0,sizeofversioninfo:0,small:0,so:0,some:0,someth:0,space:0,span:0,special:0,specif:0,specifi:0,spend:0,split:0,standard:0,start:0,state:0,statu:0,still:0,stop:0,store:0,stream:0,streamabl:0,streamannouncebufferminimum:0,streamcount:0,streamhandl:0,string:1,stringvalu:0,struct:0,structur:0,succe:0,success:0,successfulli:0,support:0,system:0,t:0,tabl:0,taken:0,technolog:0,termin:0,than:0,thei:0,thi:0,thread:0,threw:0,thrown:0,time:0,timeout:0,timestamp:0,tl:0,too:0,tooltip:0,top:0,total:0,track:0,transfer:0,transport:1,transportlayerhandl:0,transportlayeridstr:0,transportlayerinfo:0,transportlayermodelnam:0,transportlayernam:0,transportlayerpath:0,transportlayertyp:0,transportlayervendor:0,transportlayervers:0,twice:0,type:1,typedef:0,u3v:0,unavail:0,underli:0,unexpect:0,uniqu:0,unit:0,unknown:0,unmodifi:0,unregist:0,unsign:0,unspecifi:0,unsuccess:0,until:0,up:0,updat:0,us:0,usag:0,usb3:0,usb:0,user:0,usercontext:0,usual:0,valid:0,valu:0,variabl:0,vendor:0,version:1,versioninfo:0,vertic:0,via:0,video:0,visibl:0,vision:0,vmb:0,vmb_call:0,vmb_file_path_liter:0,vmb_path_separator_char:0,vmb_path_separator_str:0,vmb_sfnc_namespace_custom:0,vmb_sfnc_namespace_standard:0,vmbaccessmode_t:0,vmbaccessmodeexclus:0,vmbaccessmodeful:0,vmbaccessmodenon:0,vmbaccessmoderead:0,vmbaccessmodetyp:0,vmbaccessmodeunknown:0,vmbbool_t:0,vmbboolfals:0,vmbbooltru:0,vmbboolval:0,vmbcameraclos:0,vmbcamerainfo:0,vmbcamerainfo_t:0,vmbcamerainfoqueri:0,vmbcamerainfoquerybyhandl:0,vmbcameraopen:0,vmbcamerasettingsload:0,vmbcamerasettingssav:0,vmbcameraslist:0,vmbcaptureend:0,vmbcaptureframequeu:0,vmbcaptureframewait:0,vmbcapturequeueflush:0,vmbcapturestart:0,vmbchunkaccesscallback:0,vmbchunkdataaccess:0,vmbcommontyp:0,vmbctypedefinit:0,vmberror_t:0,vmberroralreadi:0,vmberrorambigu:0,vmberrorapinotstart:0,vmberrorbadhandl:0,vmberrorbadparamet:0,vmberrorbusi:0,vmberrorcustom:0,vmberrordevicenotopen:0,vmberrorfeaturesunavail:0,vmberrorgentlunspecifi:0,vmberrorincomplet:0,vmberrorinsufficientbuffercount:0,vmberrorinternalfault:0,vmberrorinus:0,vmberrorinvalidaccess:0,vmberrorinvalidaddress:0,vmberrorinvalidcal:0,vmberrorinvalidvalu:0,vmberrorio:0,vmberrormoredata:0,vmberrornochunkdata:0,vmberrornodata:0,vmberrornotavail:0,vmberrornotfound:0,vmberrornotimpl:0,vmberrornotiniti:0,vmberrornotl:0,vmberrornotsupport:0,vmberroroth:0,vmberrorparsingchunkdata:0,vmberrorresourc:0,vmberrorretriesexceed:0,vmberrorstructs:0,vmberrorsuccess:0,vmberrortimeout:0,vmberrortlnotfound:0,vmberrortyp:0,vmberrorunknown:0,vmberrorunspecifi:0,vmberrorusercallbackexcept:0,vmberrorvalidvaluesetnotpres:0,vmberrorwrongtyp:0,vmberrorxml:0,vmbfeatureaccessqueri:0,vmbfeatureboolget:0,vmbfeatureboolset:0,vmbfeaturecommandisdon:0,vmbfeaturecommandrun:0,vmbfeaturedata_t:0,vmbfeaturedatabool:0,vmbfeaturedatacommand:0,vmbfeaturedataenum:0,vmbfeaturedatafloat:0,vmbfeaturedataint:0,vmbfeaturedatanon:0,vmbfeaturedataraw:0,vmbfeaturedatastr:0,vmbfeaturedatatyp:0,vmbfeaturedataunknown:0,vmbfeatureenumasint:0,vmbfeatureenumasstr:0,vmbfeatureenumentri:0,vmbfeatureenumentry_t:0,vmbfeatureenumentryget:0,vmbfeatureenumget:0,vmbfeatureenumisavail:0,vmbfeatureenumrangequeri:0,vmbfeatureenumset:0,vmbfeatureflags_t:0,vmbfeatureflagsmodifywrit:0,vmbfeatureflagsnon:0,vmbfeatureflagsread:0,vmbfeatureflagstyp:0,vmbfeatureflagsvolatil:0,vmbfeatureflagswrit:0,vmbfeaturefloatget:0,vmbfeaturefloatincrementqueri:0,vmbfeaturefloatrangequeri:0,vmbfeaturefloatset:0,vmbfeatureinfo:0,vmbfeatureinfo_t:0,vmbfeatureinfoqueri:0,vmbfeatureintget:0,vmbfeatureintincrementqueri:0,vmbfeatureintrangequeri:0,vmbfeatureintset:0,vmbfeatureintvalidvaluesetqueri:0,vmbfeatureinvalidationregist:0,vmbfeatureinvalidationunregist:0,vmbfeaturelistselect:0,vmbfeaturepersist_t:0,vmbfeaturepersistal:0,vmbfeaturepersistnolut:0,vmbfeaturepersistset:0,vmbfeaturepersistsettings_t:0,vmbfeaturepersiststream:0,vmbfeaturepersisttyp:0,vmbfeaturerawget:0,vmbfeaturerawlengthqueri:0,vmbfeaturerawset:0,vmbfeatureslist:0,vmbfeaturestringget:0,vmbfeaturestringmaxlengthqueri:0,vmbfeaturestringset:0,vmbfeaturevisibility_t:0,vmbfeaturevisibilitybeginn:0,vmbfeaturevisibilityexpert:0,vmbfeaturevisibilityguru:0,vmbfeaturevisibilityinvis:0,vmbfeaturevisibilitytyp:0,vmbfeaturevisibilityunknown:0,vmbfilepathchar_t:0,vmbframe:0,vmbframe_t:0,vmbframeannounc:0,vmbframecallback:0,vmbframeflags_t:0,vmbframeflagschunkdatapres:0,vmbframeflagsdimens:0,vmbframeflagsframeid:0,vmbframeflagsimagedata:0,vmbframeflagsnon:0,vmbframeflagsoffset:0,vmbframeflagspayloadtyp:0,vmbframeflagstimestamp:0,vmbframeflagstyp:0,vmbframerevok:0,vmbframerevokeal:0,vmbframestatus_t:0,vmbframestatuscomplet:0,vmbframestatusincomplet:0,vmbframestatusinvalid:0,vmbframestatustoosmal:0,vmbframestatustyp:0,vmbhandle_t:0,vmbimagedimension_t:0,vmbint16_t:0,vmbint32_t:0,vmbint64_t:0,vmbint8_t:0,vmbinterfaceinfo:0,vmbinterfaceinfo_t:0,vmbinterfaceslist:0,vmbinvalidationcallback:0,vmbloglevel:0,vmbloglevel_t:0,vmbloglevelal:0,vmblogleveldebug:0,vmbloglevelerror:0,vmbloglevelnon:0,vmblogleveltrac:0,vmbloglevelwarn:0,vmbmemoryread:0,vmbmemorywrit:0,vmbmodulepersistflags_t:0,vmbmodulepersistflagsal:0,vmbmodulepersistflagsinterfac:0,vmbmodulepersistflagslocaldevic:0,vmbmodulepersistflagsnon:0,vmbmodulepersistflagsremotedevic:0,vmbmodulepersistflagsstream:0,vmbmodulepersistflagstransportlay:0,vmbmodulepersistflagstyp:0,vmbpayloadsizeget:0,vmbpayloadtyp:0,vmbpayloadtype_t:0,vmbpayloadtypechunkonli:0,vmbpayloadtypedevicespecif:0,vmbpayloadtypefil:0,vmbpayloadtypegendc:0,vmbpayloadtypeh264:0,vmbpayloadtypeimag:0,vmbpayloadtypejpeg:0,vmbpayloadtyperaw:0,vmbpayloadtypeunknown:0,vmbpayloadtypjpeg2000:0,vmbpixelcolor:0,vmbpixelformat_t:0,vmbpixelformatargb8:0,vmbpixelformatbayerbg10:0,vmbpixelformatbayerbg10p:0,vmbpixelformatbayerbg12:0,vmbpixelformatbayerbg12p:0,vmbpixelformatbayerbg12pack:0,vmbpixelformatbayerbg16:0,vmbpixelformatbayerbg8:0,vmbpixelformatbayergb10:0,vmbpixelformatbayergb10p:0,vmbpixelformatbayergb12:0,vmbpixelformatbayergb12p:0,vmbpixelformatbayergb12pack:0,vmbpixelformatbayergb16:0,vmbpixelformatbayergb8:0,vmbpixelformatbayergr10:0,vmbpixelformatbayergr10p:0,vmbpixelformatbayergr12:0,vmbpixelformatbayergr12p:0,vmbpixelformatbayergr12pack:0,vmbpixelformatbayergr16:0,vmbpixelformatbayergr8:0,vmbpixelformatbayerrg10:0,vmbpixelformatbayerrg10p:0,vmbpixelformatbayerrg12:0,vmbpixelformatbayerrg12p:0,vmbpixelformatbayerrg12pack:0,vmbpixelformatbayerrg16:0,vmbpixelformatbayerrg8:0,vmbpixelformatbgr10:0,vmbpixelformatbgr12:0,vmbpixelformatbgr14:0,vmbpixelformatbgr16:0,vmbpixelformatbgr8:0,vmbpixelformatbgra10:0,vmbpixelformatbgra12:0,vmbpixelformatbgra14:0,vmbpixelformatbgra16:0,vmbpixelformatbgra8:0,vmbpixelformatlast:0,vmbpixelformatmono10:0,vmbpixelformatmono10p:0,vmbpixelformatmono12:0,vmbpixelformatmono12p:0,vmbpixelformatmono12pack:0,vmbpixelformatmono14:0,vmbpixelformatmono16:0,vmbpixelformatmono8:0,vmbpixelformatrgb10:0,vmbpixelformatrgb12:0,vmbpixelformatrgb14:0,vmbpixelformatrgb16:0,vmbpixelformatrgb8:0,vmbpixelformatrgba10:0,vmbpixelformatrgba12:0,vmbpixelformatrgba14:0,vmbpixelformatrgba16:0,vmbpixelformatrgba8:0,vmbpixelformattyp:0,vmbpixelformatycbcr411_8:0,vmbpixelformatycbcr411_8_cbyycryi:0,vmbpixelformatycbcr422_8:0,vmbpixelformatycbcr422_8_cbycri:0,vmbpixelformatycbcr601_411_8_cbyycryi:0,vmbpixelformatycbcr601_422_8:0,vmbpixelformatycbcr601_422_8_cbycri:0,vmbpixelformatycbcr601_8_cbycr:0,vmbpixelformatycbcr709_411_8_cbyycryi:0,vmbpixelformatycbcr709_422_8:0,vmbpixelformatycbcr709_422_8_cbycri:0,vmbpixelformatycbcr709_8_cbycr:0,vmbpixelformatycbcr8:0,vmbpixelformatycbcr8_cbycr:0,vmbpixelformatyuv411:0,vmbpixelformatyuv422:0,vmbpixelformatyuv422_8:0,vmbpixelformatyuv444:0,vmbpixelmono:0,vmbpixeloccupy10bit:0,vmbpixeloccupy12bit:0,vmbpixeloccupy14bit:0,vmbpixeloccupy16bit:0,vmbpixeloccupy24bit:0,vmbpixeloccupy32bit:0,vmbpixeloccupy48bit:0,vmbpixeloccupy64bit:0,vmbpixeloccupy8bit:0,vmbpixeloccupytyp:0,vmbpixeltyp:0,vmbregistersread:0,vmbregisterswrit:0,vmbsettingsload:0,vmbsettingssav:0,vmbshutdown:0,vmbstartup:0,vmbtransportlayerinfo:0,vmbtransportlayerinfo_t:0,vmbtransportlayerslist:0,vmbtransportlayertyp:0,vmbtransportlayertype_t:0,vmbtransportlayertypecl:0,vmbtransportlayertypeclh:0,vmbtransportlayertypecustom:0,vmbtransportlayertypecxp:0,vmbtransportlayertypeethernet:0,vmbtransportlayertypegev:0,vmbtransportlayertypeiidc:0,vmbtransportlayertypemix:0,vmbtransportlayertypepci:0,vmbtransportlayertypeu3v:0,vmbtransportlayertypeunknown:0,vmbtransportlayertypeuvc:0,vmbuchar_t:0,vmbuint16_t:0,vmbuint32_t:0,vmbuint64_t:0,vmbuint8_t:0,vmbversioninfo:0,vmbversioninfo_t:0,vmbversionqueri:0,volatil:0,wa:0,wait:0,warn:0,were:0,when:0,where:0,whether:0,which:0,whitespac:0,width:0,window:0,within:0,without:0,work:0,writabl:0,write:0,written:0,wrong:0,x:0,xml:0,ycbcr411_8:0,ycbcr411_8_cbyycryi:0,ycbcr422_8:0,ycbcr422_8_cbycri:0,ycbcr601:0,ycbcr601_411_8_cbyycryi:0,ycbcr601_422_8:0,ycbcr601_422_8_cbycri:0,ycbcr601_8_cbycr:0,ycbcr709:0,ycbcr709_411_8_cbyycryi:0,ycbcr709_422_8:0,ycbcr709_422_8_cbycri:0,ycbcr709_8_cbycr:0,ycbcr8:0,ycbcr8_cbycr:0,ycbcr:0,ycbycr:0,you:0,yuv411_8_uyyvyi:0,yuv411pack:0,yuv422_8:0,yuv422_8_uyvi:0,yuv422pack:0,yuv444pack:0,yuv8_uyv:0,yuv:0,yuyv:0,yycbyycr:0,zero:0},titles:["VmbC C API Function Reference","VmbC API Function Reference"],titleterms:{"enum":0,"float":0,"function":[0,1],access:0,acquisit:0,api:[0,1],bool:0,c:0,camera:0,chunk:0,command:0,common:0,constant:0,content:1,data:0,direct:0,enumer:0,featur:0,gener:0,imag:0,indic:1,inform:0,initi:0,integ:0,interfac:0,invalid:0,layer:0,load:0,overview:0,prepar:0,raw:0,refer:[0,1],save:0,set:0,string:0,tabl:1,transport:0,type:0,version:0,vmbc:[0,1]}})
\ No newline at end of file
diff --git a/recorder/lib/libGCBase_GNU8_4_0_v3_2_AVT.so b/recorder/lib/libGCBase_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..b94a76fcb5d22229534d0cb33a1f5715d76eeea6
Binary files /dev/null and b/recorder/lib/libGCBase_GNU8_4_0_v3_2_AVT.so differ
diff --git a/recorder/lib/libGenApi_GNU8_4_0_v3_2_AVT.so b/recorder/lib/libGenApi_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..467e03b283283a584531553f96e9cdedfcebb1be
Binary files /dev/null and b/recorder/lib/libGenApi_GNU8_4_0_v3_2_AVT.so differ
diff --git a/recorder/lib/libLog_GNU8_4_0_v3_2_AVT.so b/recorder/lib/libLog_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..be336e10f254a0d16943b2da616eae723f6a678e
Binary files /dev/null and b/recorder/lib/libLog_GNU8_4_0_v3_2_AVT.so differ
diff --git a/recorder/lib/libMathParser_GNU8_4_0_v3_2_AVT.so b/recorder/lib/libMathParser_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..d35f8e71ec53130aa8e15c5ee4bb7185ff74536c
Binary files /dev/null and b/recorder/lib/libMathParser_GNU8_4_0_v3_2_AVT.so differ
diff --git a/recorder/lib/libNodeMapData_GNU8_4_0_v3_2_AVT.so b/recorder/lib/libNodeMapData_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..612a0ceadbdaa59e1b5f25f721585cca1e54ae08
Binary files /dev/null and b/recorder/lib/libNodeMapData_GNU8_4_0_v3_2_AVT.so differ
diff --git a/recorder/lib/libVimbaC.so b/recorder/lib/libVimbaC.so.bup
similarity index 100%
rename from recorder/lib/libVimbaC.so
rename to recorder/lib/libVimbaC.so.bup
diff --git a/recorder/lib/libVimbaCPP.so b/recorder/lib/libVimbaCPP.so.bup
similarity index 100%
rename from recorder/lib/libVimbaCPP.so
rename to recorder/lib/libVimbaCPP.so.bup
diff --git a/recorder/lib/libVmbC.so b/recorder/lib/libVmbC.so
new file mode 100644
index 0000000000000000000000000000000000000000..86fe524500a7a17b7617de136e1811577cbaa342
Binary files /dev/null and b/recorder/lib/libVmbC.so differ
diff --git a/recorder/lib/libVmbCPP.so b/recorder/lib/libVmbCPP.so
new file mode 100644
index 0000000000000000000000000000000000000000..c9d7ec6729aab2cf667b9754c28fc16144510f5d
Binary files /dev/null and b/recorder/lib/libVmbCPP.so differ
diff --git a/recorder/lib/libVmbImageTransform.so b/recorder/lib/libVmbImageTransform.so
new file mode 100644
index 0000000000000000000000000000000000000000..2e69f7c1fea8750b9678f18a3c8dc54e24359b96
Binary files /dev/null and b/recorder/lib/libVmbImageTransform.so differ
diff --git a/recorder/lib/libXmlParser_GNU8_4_0_v3_2_AVT.so b/recorder/lib/libXmlParser_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..7e6d76ba4096bf68ef4b34bdc3933f0f8f94bda8
Binary files /dev/null and b/recorder/lib/libXmlParser_GNU8_4_0_v3_2_AVT.so differ
diff --git a/recorder/lib/liblog4cpp_GNU8_4_0_v3_2_AVT.so b/recorder/lib/liblog4cpp_GNU8_4_0_v3_2_AVT.so
new file mode 100644
index 0000000000000000000000000000000000000000..4e028fe43d48f3c3afd93d259174518dee7c82bb
Binary files /dev/null and b/recorder/lib/liblog4cpp_GNU8_4_0_v3_2_AVT.so differ
diff --git a/recorder/obj/moc_predefs.h b/recorder/obj/moc_predefs.h
index 3bb6d7af7cedea0c63c500b4d17c6b69333f1c01..0c7d9f016b520ef3cf516ec8c022de6a07602085 100644
--- a/recorder/obj/moc_predefs.h
+++ b/recorder/obj/moc_predefs.h
@@ -207,7 +207,7 @@
 #define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
 #define __FLT_MANT_DIG__ 24
 #define __LDBL_DECIMAL_DIG__ 21
-#define __VERSION__ "11.2.0"
+#define __VERSION__ "11.3.0"
 #define __UINT64_C(c) c ## UL
 #define __cpp_unicode_characters 201411L
 #define _STDC_PREDEF_H 1
@@ -408,7 +408,7 @@
 #define __DEC128_MAX_EXP__ 6145
 #define __FLT32X_HAS_QUIET_NAN__ 1
 #define __ATOMIC_CONSUME 1
-#define __GNUC_MINOR__ 2
+#define __GNUC_MINOR__ 3
 #define __GLIBCXX_TYPE_INT_N_0 __int128
 #define __INT_FAST16_WIDTH__ 64
 #define __UINTMAX_MAX__ 0xffffffffffffffffUL
diff --git a/recorder/obj/recorder.pro b/recorder/obj/recorder.pro
index 2162e8f1a9593940f69d9691850bf4fe76804926..5a9b2bc084801b88f1438a440315edd2d884b27a 100644
--- a/recorder/obj/recorder.pro
+++ b/recorder/obj/recorder.pro
@@ -23,11 +23,20 @@ CONFIG += link_pkgconfig
 PKGCONFIG += opencv4
 
 # Vimba
-VIMBA_LIB_DIR=../lib
-INCLUDEPATH += ../.. $${VIMBA_LIB_DIR}
-LIBS += -L$${VIMBA_LIB_DIR} -lVimbaC -lVimbaCPP -Wl,-rpath,.
+VIMBA_LIB_DIR = ../lib
+
+INCLUDEPATH += \
+	../../VimbaX/api/include \
+	$${VIMBA_LIB_DIR} \
+	../..
+
+LIBS += -L$${VIMBA_LIB_DIR} -lVmbC -lVmbCPP -Wl,-rpath,.
 QMAKE_POST_LINK += cp $${VIMBA_LIB_DIR}/lib*.so ../bin  # copy vimlibs to bin
 
+#PRE_LINK: cp vimba libs once
+# cp ../b/VimbaX/api/lib/GenICam/*.so $${VIMBA_LIB_DIR}
+# cp ../b/VimbaX/api/lib/libVmb{C,CPP,ImageTransform}.so $${VIMBA_LIB_DIR}
+
 TARGET = recorder
 DESTDIR = ../bin
 
diff --git a/recorder/recorder.sublime-project b/recorder/recorder.sublime-project
index c650914c5ee74bf2b67380e54037c8608e01aa03..0b63d4c9a5d697ba6b244843bcbaa18f2fe67047 100644
--- a/recorder/recorder.sublime-project
+++ b/recorder/recorder.sublime-project
@@ -2,8 +2,8 @@
 	"folders":
 	[
 		{
-			"path": "..",
-			"name": "b (vimba)"
+			"path": "../VimbaX",
+			"name": "VimbaX"
 		},
 		{
 			"path": ".",
diff --git a/recorder/src/mainwindow.cpp b/recorder/src/mainwindow.cpp
index 1f18ef56ef14781db3e2b47bdf4992633b724d50..ee6eadf15096c9a24aa9df6b9755b76aa908beea 100644
--- a/recorder/src/mainwindow.cpp
+++ b/recorder/src/mainwindow.cpp
@@ -8,13 +8,13 @@
 #include <unistd.h>
 #include <iostream>
 
-using namespace AVT::VmbAPI;
+using namespace VmbCPP;
 
 
 MainWindow::MainWindow(QWidget *parent)
 : QMainWindow(parent)
 , ui(new Ui::MainWindow)
-, sys(VimbaSystem::GetInstance()) // Create and get Vimba singleton
+, sys(VmbSystem::GetInstance()) // Create and get Vimba singleton
 , curCam(CameraPtr())
 , cameras(CameraPtrVector())
 , camInfoNames({"name","model","id","serial","interface","state"})
diff --git a/recorder/src/mainwindow.h b/recorder/src/mainwindow.h
index 2aad2d37c35684d5a68432018481262adf3a6f21..034b845b801304351eacd66c300f3efcd2cd68cd 100644
--- a/recorder/src/mainwindow.h
+++ b/recorder/src/mainwindow.h
@@ -2,7 +2,7 @@
 #define MAINWINDOW_H
 
 #include <QMainWindow>
-#include <VimbaCPP/Include/VimbaCPP.h> //cameratptrvector (cant fwddcl typedef), vimbasys (could fwd decl)
+#include <VmbCPP/VmbCPP.h> //cameraptrvector (cant fwddcl typedef), vimbasys (could fwd decl)
 
 QT_BEGIN_NAMESPACE
 namespace Ui { class MainWindow; }
@@ -18,7 +18,7 @@ public:
     ~MainWindow();
 
 public slots:
-    void log(QString,VmbError_t err = VmbErrorNothing);
+    void log(QString,VmbError_t err = VmbErrorJustInfo);
 
 private slots:
     void updateCams();
@@ -29,14 +29,14 @@ protected:
     void keyPressEvent(QKeyEvent *);
 
 private:
-    void getCamInfo( const AVT::VmbAPI::CameraPtr &camera );
+    void getCamInfo( const VmbCPP::CameraPtr &camera );
     void addRow( QStringList& );
 
     Ui::MainWindow *ui;
-    AVT::VmbAPI::VimbaSystem &sys;
+    VmbCPP::VmbSystem &sys;
 
-    AVT::VmbAPI::CameraPtr curCam;
-    AVT::VmbAPI::CameraPtrVector cameras;
+    VmbCPP::CameraPtr curCam;
+    VmbCPP::CameraPtrVector cameras;
     QStringList camInfoNames;
 };
 #endif // MAINWINDOW_H
diff --git a/recorder/src/recorder.cpp b/recorder/src/recorder.cpp
index 6a4f7b6fca5ccab5808da1dccbd121900311e346..c8b89b2c216137d7eba562d0624bf01a442a2a9d 100644
--- a/recorder/src/recorder.cpp
+++ b/recorder/src/recorder.cpp
@@ -1,4 +1,4 @@
-#include "VimbaCPP/Include/VimbaCPP.h"
+#include "VmbCPP.h"
 
 #include <iostream>
 #include <vector>
@@ -11,7 +11,7 @@
 
 using std::cout;
 using std::endl;
-// using namespace AVT::VmbAPI;
+// using namespace VmbCPP;
 
 
 
diff --git a/recorder/src/simple_streaming.cpp b/recorder/src/simple_streaming.cpp
index bc76cfff645e92183d4b1d8e1450b2ef1d279a73..a94629b984136e51a2d12ac288098a20ea4b7018 100644
--- a/recorder/src/simple_streaming.cpp
+++ b/recorder/src/simple_streaming.cpp
@@ -1,10 +1,8 @@
-#include "VimbaCPP/Include/VimbaCPP.h"
-#include "VimbaC/Include/VimbaC.h"
-#include "VimbaCPP/Include/Frame.h"
-// #include "Vimba.h"
+#include "VmbCPP/VimbaCPP.h"
+#include "VmbC/VimbaC.h"
+#include "VmbCPP/Frame.h"
 
-namespace AVT {
-namespace VmbAPI {
+namespace VmbCPP {
 
 // Constructor for the FrameObserver 
 class FrameObserver::FrameObserver( CameraPtr pCamera ) : IFrameObserver ( pCamera ){}
@@ -24,7 +22,7 @@ void Vimba::RunExample (void)
 {
 	VmbInt64_t nPLS; // Payload size value
 	FeaturePtr pFeature ; // Generic feature pointer
-	VimbaSystem &sys = VimbaSystem :: GetInstance (); // Create and get Vimba singleton
+	VmbSystem &sys = VmbSystem :: GetInstance (); // Create and get Vimba singleton
 	CameraPtrVector cameras ; // Holds camera handles
 	CameraPtr camera ;
 	FramePtrVector frames (15); // Frame array
@@ -81,4 +79,4 @@ void Vimba::RunExample (void)
 	camera ->Close ();
 	sys.Shutdown (); // Always pair sys. Startup and sys. Shutdown
 }
-}} // namespace AVT :: VmbAPI
+} // namespace VmbCPP
diff --git a/recorder/src/utils.cpp b/recorder/src/utils.cpp
index eaa904fd4b84bac1cfb9b99755a0e0b36e5fcd78..10735d0e997f88d9674eb9f69c338d87c802e15b 100644
--- a/recorder/src/utils.cpp
+++ b/recorder/src/utils.cpp
@@ -3,7 +3,7 @@
 #include <random>
 
 #include "mainwindow.h"
-#include "VimbaCPP/Include/VimbaCPP.h"
+#include "VmbCPP/VmbCPP.h"
 #include <QString>
 #include <QDebug>
 
@@ -12,12 +12,12 @@ const int APP_VERSION_MAJOR = 0;
 const int APP_VERSION_MINOR = 0;
 const int APP_VERSION_PATCH = 3;
 
-using namespace AVT::VmbAPI;
+using namespace VmbCPP;
 
 const QString getVersionString()
 {
     VmbVersionInfo_t version;
-    VimbaSystem::GetInstance().QueryVersion(version);
+    VmbSystem::GetInstance().QueryVersion(version);
 
     QString s = "### Versions\n";
     s += QStringLiteral("# Recorder: %1.%2.%3\n").arg(APP_VERSION_MAJOR).arg(APP_VERSION_MINOR).arg(APP_VERSION_PATCH);
@@ -35,7 +35,7 @@ const QString errorCodeToMessage( VmbError_t err )
     switch( err )
     {
         default:                        msg += "Unknown"; break;
-        case VmbErrorNothing:           msg = ""; break;
+        case VmbErrorJustInfo:          msg = ""; break; //custom
         case VmbErrorSuccess:           msg = "Success"; break;
         case VmbErrorInternalFault:     msg += "Unexpected fault in VmbApi or driver."; break;
         case VmbErrorApiNotStarted:     msg += "API not started."; break;
diff --git a/recorder/src/utils.h b/recorder/src/utils.h
index 1efdd380a03808edcb2cd80246ebf0d4eaef8155..91b7546bb34613ad326b6407a16df8ebc736e1d4 100644
--- a/recorder/src/utils.h
+++ b/recorder/src/utils.h
@@ -3,7 +3,7 @@
 
 #include <QString>
 
-#include "VimbaC/Include/VmbCommonTypes.h" //VmbError_t -> cant really fwd-decl typedef...??
+#include "VmbC/VmbCommonTypes.h" //VmbError_t -> cant really fwd-decl typedef...??
 
 const QString getVersionString();
 const QString errorCodeToMessage( VmbError_t );